def finish_for_in_stat(lexer, name): name_list = StatParser.finish_name_list(lexer, name) lexer.get_next_token_of_kind(TokenKind.KW_IN) exp_list = ExpParser.parse_exp_list(lexer) line_of_do, _ = lexer.get_next_token_of_kind(TokenKind.KW_DO) block = Parser.parse_block(lexer) lexer.get_next_token_of_kind(TokenKind.KW_END) return lua_stat.ForInStat(line_of_do, name_list, exp_list, block)
def finish_local_var_decl_stat(lexer): _, name0 = lexer.get_next_identifier() name_list = StatParser.finish_name_list(lexer, name0) exp_list = [] if lexer.look_ahead() == TokenKind.OP_ASSIGN: lexer.get_next_token() exp_list = ExpParser.parse_exp_list(lexer) last_line = lexer.get_line() return lua_stat.LocalVarDeclStat(last_line, name_list, exp_list)
def parse_ret_exps(lexer): if lexer.look_ahead() != TokenKind.KW_RETURN: return None lexer.get_next_token() kind = lexer.look_ahead() if kind in (TokenKind.EOF, TokenKind.KW_END, TokenKind.KW_ELSE, TokenKind.KW_ELSEIF, TokenKind.KW_UNTIL): return [] if kind == TokenKind.SEP_SEMI: lexer.get_next_token() return [] exps = ExpParser.parse_exp_list(lexer) if lexer.look_ahead() == TokenKind.SEP_SEMI: lexer.get_next_token() return exps
def parse_assign_stat(lexer, var0): var_list = StatParser.finish_var_list(lexer, var0) lexer.get_next_token_of_kind(TokenKind.OP_ASSIGN) exp_list = ExpParser.parse_exp_list(lexer) last_line = lexer.get_line() return lua_stat.AssignStat(last_line, var_list, exp_list)