Beispiel #1
0
            public static Node.Sequence Parse()
            {
                Node.Sequence n;

                if (IsLookahead(1, Tokens.Operator, Lexemes.BraceClose) ||
                    IsLookahead(1, Tokens.Operator, Lexemes.ParenClose))
                {
                    n = null;
                }
                else
                {
                    Node.Expression e = Parser.Expression.Parse();

                    if (IsLookahead(1, Tokens.Operator, Lexemes.Comma))
                    {
                        Match(Tokens.Operator, Lexemes.Comma);
                    }

                    n = new Node.Sequence
                    {
                        E = e,
                        S = Parser.Sequence.Parse()
                    };
                }

                return(n);
            }
Beispiel #2
0
 private Types.List EvaluateSequence(Node.Sequence node)
 {
     Types.List    sequence = new Types.List();
     Node.Sequence next     = node;
     while (next != null)
     {
         sequence.AppendElement(Evaluate(next.E));
         next = next.S;
     }
     return(sequence);
 }
Beispiel #3
0
            public static Node.Continuation Parse()
            {
                Node.Continuation n;

                if (IsLookahead(1, Tokens.Operator, Lexemes.ParenOpen))
                {
                    Match(Tokens.Operator, Lexemes.ParenOpen);
                    Node.Sequence sequence = Parser.Sequence.Parse();
                    Match(Tokens.Operator, Lexemes.ParenClose);

                    n = new Node.Call
                    {
                        S = sequence,
                        C = Parser.Continuation.Parse()
                    };
                }
                else if (IsLookahead(1, Tokens.Operator, Lexemes.Dot))
                {
                    Match(Tokens.Operator, Lexemes.Dot);
                    Match(Tokens.Identifier);
                    Token identifier = Parser.Lexer.Current();

                    n = new Node.Access
                    {
                        Id = new Node.Identifier
                        {
                            id = (string)identifier.Attribute
                        },
                        C = Parser.Continuation.Parse()
                    };
                }
                else if (IsLookahead(1, Tokens.Operator, Lexemes.Assign))
                {
                    Match(Tokens.Operator, Lexemes.Assign);

                    n = new Node.Assign
                    {
                        E = Parser.Expression.Parse()
                    };
                }
                else
                {
                    n = null;
                }

                return(n);
            }