public Node List() { var list_node = new ListLiteralNode(); Expect(TokenCategory.CURLY_OPEN); var nodes = Optional(simpleLiterals, () => { list_node.Add(Node.fromToken(Expect(simpleLiterals))); return ZeroOrMore(TokenCategory.COMMA, SimpleLiteral, true); }); list_node.Add(nodes); Expect(TokenCategory.CURLY_CLOSE); return list_node; }
public Node List() { var listLiteral = new ListLiteralNode(); if (CurrentToken == TokenCategory.KEY_OPEN) { Expect(TokenCategory.KEY_OPEN); var litList = SimpleLiteral(); while (CurrentToken == TokenCategory.COMMA) { var commaNode = new Identifier() { AnchorToken = Expect(TokenCategory.COMMA) }; commaNode.Add(litList); commaNode.Add(SimpleLiteral()); litList = commaNode; } listLiteral.Add(litList); Expect(TokenCategory.KEY_CLOSE); } if (CurrentToken == TokenCategory.BRACKETS_OPEN) { Expect(TokenCategory.BRACKETS_OPEN); if (CurrentToken != TokenCategory.IDENTIFIER) { var litList = SimpleLiteral(); while (CurrentToken == TokenCategory.COMMA) { var commaNode = new Identifier() { AnchorToken = Expect(TokenCategory.COMMA) }; commaNode.Add(litList); commaNode.Add(SimpleLiteral()); litList = commaNode; } listLiteral.Add(litList); } else { var expList = Expression(); while (CurrentToken == TokenCategory.COMMA) { var commaNode = new Identifier() { AnchorToken = Expect(TokenCategory.COMMA) }; commaNode.Add(expList); commaNode.Add(Expression()); expList = commaNode; } listLiteral.Add(expList); } Expect(TokenCategory.BRACKETS_CLOSE); } return(listLiteral); }