static public (Statement, string) parseStatement(ref lexer.Lexer Lexer) { Lexer.LookAheadAndSkip(lexer.TOKEN_IGNORED); switch (Lexer.LookAhead()) { case lexer.TOKEN_PRINT: return(parsePrint(ref Lexer)); case lexer.TOKEN_VAR_PREFIX: return(parseAssignment(ref Lexer)); default: return(null, "parseStatement(): unknown Statement."); } }
//Statement ::= Print | Assignment static public (List <Statement>, string) parseStatements(ref lexer.Lexer Lexer) { List <Statement> statements = new List <Statement>(); while (!isSourceCodeEnd(Lexer.LookAhead())) { var(statement, error) = parseStatement(ref Lexer); if (error != null) { return(null, error); } statements.Add(statement); } return(statements, null); }
//String ::= '"' '"' Ignored | '"' StringCharacter '"' Ignored static public (string, string) parseString(ref lexer.Lexer Lexer) { string str = ""; switch (Lexer.LookAhead()) { case lexer.TOKEN_DUOQUOTE: Lexer.NextTokenIs(lexer.TOKEN_DUOQUOTE); Lexer.LookAheadAndSkip(lexer.TOKEN_IGNORED); return(str, null); case lexer.TOKEN_QUOTE: Lexer.NextTokenIs(lexer.TOKEN_QUOTE); str = Lexer.scanBeforeToken(lexer.tokenNameMap[lexer.TOKEN_QUOTE]); Lexer.NextTokenIs(lexer.TOKEN_QUOTE); Lexer.LookAheadAndSkip(lexer.TOKEN_IGNORED); return(str, null); default: return(null, "parseString(): not a string."); } }