def MakeParser(line_reader, arena): """Top level parser.""" line_lexer = lexer.LineLexer(_MakeMatcher(), '', arena) lx = lexer.Lexer(line_lexer, line_reader) w_parser = word_parse.WordParser(lx, line_reader) c_parser = cmd_parse.CommandParser(w_parser, lx, line_reader, arena) return w_parser, c_parser
def MakeParserForCommandSub(self, line_reader, lexer, eof_id): # type: (_Reader, Lexer, Id_t) -> CommandParser """To parse command sub, we want a fresh word parser state.""" w_parser = word_parse.WordParser(self, lexer, line_reader) c_parser = cmd_parse.CommandParser(self, w_parser, lexer, line_reader) c_parser.Init_EofId(eof_id) return c_parser
def MakeOshParser(self, line_reader, emit_comp_dummy=False): lx = self._MakeLexer(line_reader) if emit_comp_dummy: lx.EmitCompDummy() # A special token before EOF! w_parser = word_parse.WordParser(self, lx, line_reader) c_parser = cmd_parse.CommandParser(self, w_parser, lx, line_reader) return c_parser
def MakeParserForTop(line_reader, arena=None): """Top level parser.""" # AtEnd() is true line_lexer = lexer.LineLexer(lex.LEXER_DEF, '', arena=arena) lx = lexer.Lexer(line_lexer, line_reader) w_parser = word_parse.WordParser(lx, line_reader) c_parser = cmd_parse.CommandParser(w_parser, lx, line_reader) return w_parser, c_parser
def MakeParserForCommandSub(line_reader, lexer): """To parse command sub, we want a fresh word parser state. It's a new instance based on same lexer and arena. """ arena = line_reader.arena w_parser = word_parse.WordParser(lexer, line_reader) c_parser = cmd_parse.CommandParser(w_parser, lexer, line_reader, arena) return c_parser
def MakeParserForCommandSub(self, line_reader, lexer, eof_id): """To parse command sub, we want a fresh word parser state. It's a new instance based on same lexer and arena. """ w_parser = word_parse.WordParser(self, lexer, line_reader) c_parser = cmd_parse.CommandParser(self, w_parser, lexer, line_reader, eof_id=eof_id) return c_parser
def MakeParserForCompletion(code_str, arena): """Parser for partial lines.""" # NOTE: We don't need to use a arena here? Or we need a "scratch arena" that # doesn't interfere with the rest of the program. line_reader = reader.StringLineReader(code_str, arena) line_lexer = lexer.LineLexer(_MakeMatcher(), '', arena) # AtEnd() is true lx = lexer.Lexer(line_lexer, line_reader) w_parser = word_parse.WordParser(lx, line_reader) c_parser = cmd_parse.CommandParser(w_parser, lx, line_reader, arena) return w_parser, c_parser
def MakeOshParser(self, line_reader, emit_comp_dummy=False, aliases_in_flight=None): # type: (_Reader, bool, Optional[AliasesInFlight]) -> CommandParser lx = self._MakeLexer(line_reader) if emit_comp_dummy: lx.EmitCompDummy() # A special token before EOF! w_parser = word_parse.WordParser(self, lx, line_reader) c_parser = cmd_parse.CommandParser(self, w_parser, lx, line_reader, aliases_in_flight=aliases_in_flight) return c_parser
def MakeParserForCompletion(self, code_str, arena): """Parser for partial lines. NOTE: Uses its own arena! """ # NOTE: We don't need to use a arena here? Or we need a "scratch arena" # that doesn't interfere with the rest of the program. line_reader = reader.StringLineReader(code_str, arena) line_lexer = lexer.LineLexer(match.MATCHER, '', arena) # AtEnd() is true lx = lexer.Lexer(line_lexer, line_reader) w_parser = word_parse.WordParser(self, lx, line_reader) c_parser = cmd_parse.CommandParser(self, w_parser, lx, line_reader, arena=arena) return w_parser, c_parser
def MakeParser(self, line_reader): line_lexer = lexer.LineLexer(match.MATCHER, '', self.arena) lx = lexer.Lexer(line_lexer, line_reader) w_parser = word_parse.WordParser(self, lx, line_reader) c_parser = cmd_parse.CommandParser(self, w_parser, lx, line_reader) return w_parser, c_parser
def MakeParserForCommandSub(line_reader, lexer): """To parse command sub, we want a fresh word parser state.""" # new instance based on same lexer w_parser = word_parse.WordParser(lexer, line_reader) c_parser = cmd_parse.CommandParser(w_parser, lexer, line_reader) return c_parser