예제 #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
    def MakeWordParserForPlugin(self, code_str, arena):
        """FOr $PS1, etc.

    NOTE: Uses its own arena!  I think that does nothing though?
    """
        line_reader = reader.StringLineReader(code_str, arena)
        lx = self._MakeLexer(line_reader, arena=arena)
        return word_parse.WordParser(self, lx, line_reader)
예제 #6
0
 def MakeArithParser(self, code_str):
   # type: (str) -> TdopParser
   """Used for a[x+1]=foo in the CommandParser."""
   line_reader = reader.StringLineReader(code_str, self.arena)
   lx = self._MakeLexer(line_reader)
   w_parser = word_parse.WordParser(self, lx, line_reader)
   w_parser.Init(lex_mode_e.Arith)  # Special initialization
   a_parser = tdop.TdopParser(arith_parse.Spec(), w_parser, self.parse_opts)
   return a_parser
예제 #7
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
예제 #8
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
예제 #9
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
예제 #10
0
파일: parse_lib.py 프로젝트: roryokane/oil
 def MakeArithParser(self, code_str):
     # type: (str) -> TdopParser
     """Used for a[x+1]=foo in the CommandParser."""
     line_reader = reader.StringLineReader(code_str, self.arena)
     lx = self._MakeLexer(line_reader)
     w_parser = word_parse.WordParser(self,
                                      lx,
                                      line_reader,
                                      lex_mode=lex_mode_e.Arith)
     a_parser = tdop.TdopParser(arith_parse.SPEC, w_parser)
     return a_parser
예제 #11
0
파일: parse_lib.py 프로젝트: bsa3/oil
  def MakeArithParser(self, code_str, arena):
    """Used for a[x+1]=foo in the CommandParser.

    NOTE: We add tokens to a different arena, so we don't mess up the
    invariants for translation.
    """
    line_reader = reader.StringLineReader(code_str, arena)
    lx = self._MakeLexer(line_reader, arena=arena)
    w_parser = word_parse.WordParser(self, lx, line_reader,
                                     lex_mode=lex_mode_e.Arith)
    a_parser = tdop.TdopParser(arith_parse.SPEC, w_parser)
    return a_parser
예제 #12
0
 def MakeArithParser(self, code_str, arena):
     """
 NOTE: We want to add tokens to a different arena, so we don't mess up the
 translation.
 """
     line_reader = reader.StringLineReader(code_str, arena)
     line_lexer = lexer.LineLexer(match.MATCHER, '', arena)
     lx = lexer.Lexer(line_lexer, line_reader)
     w_parser = word_parse.WordParser(self,
                                      lx,
                                      line_reader,
                                      lex_mode=lex_mode_e.ARITH)
     a_parser = tdop.TdopParser(arith_parse.SPEC, w_parser)
     return a_parser
예제 #13
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
예제 #14
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
예제 #15
0
 def MakeWordParserForHereDoc(self, line_reader):
     line_lexer = lexer.LineLexer(match.MATCHER, '', self.arena)
     lx = lexer.Lexer(line_lexer, line_reader)
     return word_parse.WordParser(self, lx, line_reader)
예제 #16
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
예제 #17
0
파일: parse_lib.py 프로젝트: yumaikas/oil
def MakeWordParserForHereDoc(lines):
    line_reader = reader.VirtualLineReader(lines)
    line_lexer = lexer.LineLexer(lex.LEXER_DEF, '')
    lx = lexer.Lexer(line_lexer, line_reader)
    return word_parse.WordParser(lx, line_reader)
예제 #18
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
예제 #19
0
파일: parse_lib.py 프로젝트: roryokane/oil
 def MakeWordParserForHereDoc(self, line_reader):
     # type: (_Reader) -> WordParser
     lx = self._MakeLexer(line_reader)
     return word_parse.WordParser(self, lx, line_reader)
예제 #20
0
파일: parse_lib.py 프로젝트: roryokane/oil
 def MakeWordParser(self, lx, line_reader):
     # type: (Lexer, _Reader) -> WordParser
     return word_parse.WordParser(self, lx, line_reader)
예제 #21
0
파일: parse_lib.py 프로젝트: waldyrious/oil
def MakeWordParserForHereDoc(lines, arena):
    line_reader = reader.VirtualLineReader(lines, arena)
    line_lexer = lexer.LineLexer(_MakeMatcher(), '', arena)
    lx = lexer.Lexer(line_lexer, line_reader)
    return word_parse.WordParser(lx, line_reader)
예제 #22
0
파일: parse_lib.py 프로젝트: roryokane/oil
 def MakeWordParserForPlugin(self, code_str):
     # type: (str) -> WordParser
     """For $PS1, $PS4, etc."""
     line_reader = reader.StringLineReader(code_str, self.arena)
     lx = self._MakeLexer(line_reader)
     return word_parse.WordParser(self, lx, line_reader)
예제 #23
0
파일: parse_lib.py 프로젝트: waldyrious/oil
def MakeWordParserForPlugin(code_str, arena):
    line_reader = reader.StringLineReader(code_str, arena)
    line_lexer = lexer.LineLexer(_MakeMatcher(), '', arena)
    lx = lexer.Lexer(line_lexer, line_reader)
    return word_parse.WordParser(lx, line_reader)