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); }
private SyntaxTree.AST ParseFunctionCall(SyntaxTree.AST func) { return(new SyntaxTree.FunctionCall(lookahead.Head, func, ParseFunctionArgs())); }