private void addNonTerminal(String EBNF) { String p = "<([\\w-]+)>[\\s]*::=(" + "([\\s]*(<[\\w-]+>|(\"[^\"]*\")|[|\\[\\]{}])" + ")+)"; Matcher m = Pattern.compile(p).matcher(EBNF); m.find(); NonTerminal nt = new NonTerminal(m.group(1)); List<? extends EBNFBranch> branches = EBNFBranch.getBranches(m.group(2)); assert (branches.size() > 0); if (nonTerminals.size() == 0) { startSymbol = nt; } nonTerminals.put(nt, branches); }