Exemplo n.º 1
0
 private Node Variable()
 {
     // VARIABLE_DEF VARIABLE ASSIGN
     Token variable = Match(TokenType.VARIABLE);
     VariableNode varNode = new VariableNode(variable.Position, variable.Text);
     TokenType next = LookAhead(1);
     if (next == TokenType.LBRACKET)
     {
         SourcePosition pos = Match(TokenType.LBRACKET).Position;
         Node key = Expression();
         Match(TokenType.RBRACKET);
         return new LookupNode(pos, varNode, key);
     }
     else if (LookAhead(1) == TokenType.PERIOD)
     {
         Match(TokenType.PERIOD);
         PropertyTreeNode propertyTree = new PropertyTreeNode(varNode.Position, varNode, Property());
         if (LookAhead(1) == TokenType.END_STATEMENT)
         {
             Match(TokenType.END_STATEMENT);
         }
         return propertyTree;
     }
     else if (LookAhead(1) == TokenType.COLON)
     {
         PropertyNode property = new PropertyNode(variable.Position, variable.Text);
         Match(TokenType.COLON);
         Node value = Expression();
         if (LookAhead(1) == TokenType.COMMA)
             Match(TokenType.COMMA);
         return new AssignNode(property.Position, property, value, true);
     }
     else
     {
         return varNode;
     }
 }
Exemplo n.º 2
0
 private Node Property()
 {
     if (LookAhead(2) == TokenType.LPAREN)
     {
         return FunctionCall();
     }
     else
     {
         Token varToken = Match(TokenType.VARIABLE);
         if (LookAhead(1) == TokenType.PERIOD)
         {
             Match(TokenType.PERIOD);
             Node propNode = new PropertyNode(varToken.Position, varToken.Text);
             return new PropertyTreeNode(propNode.Position, propNode, Property());
         }
         else if (LookAhead(1) == TokenType.ASSIGN)
         {
             Match(TokenType.ASSIGN);
             Node value = Expression();
             PropertyNode propNode = new PropertyNode(varToken.Position, varToken.Text);
             return new AssignNode(propNode.Position, propNode, value, true);
         }
         else
         {
             return new PropertyNode(varToken.Position, varToken.Text);
         }
     }
 }