@Test public void nested() throws ScanException { Tokenizer tokenizer = new Tokenizer("a${b${c}}d"); Parser parser = new Parser(tokenizer.tokenize()); Node node = parser.parse(); Node witness = new Node(Node.Type.LITERAL, "a"); Node bLiteralNode = new Node(Node.Type.LITERAL, "b"); Node cLiteralNode = new Node(Node.Type.LITERAL, "c"); Node bVariableNode = new Node(Node.Type.VARIABLE, bLiteralNode); Node cVariableNode = new Node(Node.Type.VARIABLE, cLiteralNode); bLiteralNode.next = cVariableNode; witness.next = bVariableNode; witness.next.next = new Node(Node.Type.LITERAL, "d"); assertEquals(witness, node); }
public Node parse() throws ScanException { if (tokenList == null || tokenList.isEmpty()) return null; return E(); }
Parser { public Node parse() throws ScanException { if (tokenList == null || tokenList.isEmpty()) return null; return E(); } }
Parser { public Node parse() throws ScanException { if (tokenList == null || tokenList.isEmpty()) return null; return E(); } Parser(List<Token> tokenList); }
Parser { public Node parse() throws ScanException { if (tokenList == null || tokenList.isEmpty()) return null; return E(); } Parser(List<Token> tokenList); Node parse(); }
Parser { public Node parse() throws ScanException { if (tokenList == null || tokenList.isEmpty()) return null; return E(); } Parser(List<Token> tokenList); Node parse();  }