예제 #1
0
파일: parse_lib.py 프로젝트: waldyrious/oil
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
예제 #2
0
파일: parse_lib.py 프로젝트: dotmpe/oil
 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
예제 #3
0
파일: parse_lib.py 프로젝트: bsa3/oil
 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
예제 #4
0
파일: parse_lib.py 프로젝트: yumaikas/oil
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
예제 #5
0
파일: parse_lib.py 프로젝트: waldyrious/oil
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
예제 #6
0
파일: parse_lib.py 프로젝트: bsa3/oil
  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
예제 #7
0
파일: parse_lib.py 프로젝트: waldyrious/oil
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
예제 #8
0
파일: parse_lib.py 프로젝트: mrshu/oil
 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
예제 #9
0
    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
예제 #10
0
 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
예제 #11
0
파일: parse_lib.py 프로젝트: yumaikas/oil
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