Example #1
0
        private SyntaxTree.AST ParseStatement()
        {
            while (lookahead.Head.Kind == TokenKind.EndOfLine)
            {
                NextToken();
            }
            SyntaxTree.AST expr = lookahead[0].Kind switch
            {
                TokenKind.Begin => ParseBeginBlock(),
                TokenKind.If => ParseIfElse(),
                TokenKind.For => ParseFor(),
                _ => lookahead[1].Kind == TokenKind.OpAssignment ? ParseAssignment() : ParseExpr(),
            };
            var eol = NextToken();

            if (!(eol.Kind == TokenKind.EndOfFile || eol.Kind == TokenKind.EndOfLine))
            {
                throw new SyntaxException(eol, string.Format(Properties.Resources.InvalidToken, TokenKind.EndOfLine, eol.Kind));
            }
            return(expr);
        }
Example #2
0
 private SyntaxTree.AST ParseFunctionCall(SyntaxTree.AST func)
 {
     return(new SyntaxTree.FunctionCall(lookahead.Head, func, ParseFunctionArgs()));
 }