Exemple #1
0
        private SyntaxTree.AST ParseFor()
        {
            var token = NextToken();

            AssertTokenKind(TokenKind.For, token);

            if (lookahead[1].Kind == TokenKind.OpAssignment)
            {
                var ident = NextToken();
                if (ident.Kind != TokenKind.Identifier)
                {
                    throw new SyntaxException(ident, Properties.Resources.InvalidLeftOfAssignment);
                }
                AssertTokenKind(TokenKind.OpAssignment, NextToken());
                var list = ParseExpr();
                AssertTokenKind(TokenKind.EndOfLine, NextToken());

                var block = new SyntaxTree.Block(token, ParseUntilTokenKind(TokenKind.End));
                AssertTokenKind(TokenKind.End, NextToken());
                return(new SyntaxTree.ForEach(token, ident, list, block));
            }
            else
            {
                var cond = ParseExpr();
                AssertTokenKind(TokenKind.EndOfLine, NextToken());
                var block = new SyntaxTree.Block(token, ParseUntilTokenKind(TokenKind.End));
                AssertTokenKind(TokenKind.End, NextToken());
                return(new SyntaxTree.For(token, cond, block));
            }
        }
Exemple #2
0
        private SyntaxTree.If ParseIfOrElif(TokenKind ifOrElif)
        {
            var token = NextToken();

            AssertTokenKind(ifOrElif, token);
            var test = ParseExpr();

            AssertTokenKind(TokenKind.EndOfLine, NextToken());
            var block = new SyntaxTree.Block(token, ParseUntilTokenKind(TokenKind.End, TokenKind.Elif, TokenKind.Else));

            return(new SyntaxTree.If(token, test, block, null));
        }
Exemple #3
0
        private SyntaxTree.AST ParseBeginBlock()
        {
            var begin = NextToken();

            AssertTokenKind(TokenKind.Begin, begin);
            AssertTokenKind(TokenKind.EndOfLine, NextToken());

            var ast = new SyntaxTree.Block(begin, ParseUntilTokenKind(TokenKind.End));

            AssertTokenKind(TokenKind.End, NextToken());

            return(ast);
        }