Пример #1
0
        public Node AssignmentStatement(Token identifier)
        {
            var identifierNode = new Identifier()
            {
                AnchorToken = identifier
            };

            if (CurrentToken == TokenCategory.BRACKETS_OPEN)
            {
                Expect(TokenCategory.BRACKETS_OPEN);
                identifierNode.Add(Expression());
                Expect(TokenCategory.BRACKETS_CLOSE);
            }

            var assignmentNode = new Assignment_Statement()
            {
                AnchorToken = Expect(TokenCategory.ASSIGN)
            };

            assignmentNode.Add(identifierNode);
            assignmentNode.Add(Expression());


            Expect(TokenCategory.EOL);


            return(assignmentNode);
        }
Пример #2
0
 public Node AssignmentOrCallStatement()
 {
     var id_node = Node.fromToken(Expect(TokenCategory.IDENTIFIER));
     Node node = null;
     if (Has(TokenCategory.PARENTHESIS_OPEN))
     {
         node = new Call_Statement()
         {
             AnchorToken = id_node.AnchorToken
         };
         Expect(TokenCategory.PARENTHESIS_OPEN);
         node.Add(Optional(firstOfExpression, () =>
                                         {
                                             var list = new List<Node>() { Expression() };
                                             list.AddRange(ZeroOrMore(TokenCategory.COMMA, Expression, true));
                                             return list;
                                         }));
         Expect(TokenCategory.PARENTHESIS_CLOSE);
     }
     else if (Has(TokenCategory.BRACKET_OPEN) || Has(TokenCategory.COLON_EQUAL))
     {
         node = new Assignment_Statement();
         if (Has(TokenCategory.BRACKET_OPEN))
         {
             Expect(TokenCategory.BRACKET_OPEN);
             var expression_node = Expression();
             Expect(TokenCategory.BRACKET_CLOSE);
             node.Add(new ListIndexNode() { id_node, expression_node });
         }
         else
         {
             node.Add(id_node);
         }
         node.AnchorToken = Expect(TokenCategory.COLON_EQUAL);
         node.Add(Expression());
     }
     else
     {
         throw new SyntaxError(firstOfAssignmentOrCallStatement, tokenStream.Current);
     }
     Expect(TokenCategory.SEMICOLON);
     return node;
 }