Exemplo n.º 1
0
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
Exemplo n.º 2
0
 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
Exemplo n.º 3
0
 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
Exemplo n.º 4
0
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
Exemplo n.º 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)
Exemplo n.º 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
Exemplo n.º 7
0
  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
Exemplo n.º 8
0
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
Exemplo n.º 9
0
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
Exemplo n.º 10
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,
                                      lex_mode=lex_mode_e.Arith)
     a_parser = tdop.TdopParser(arith_parse.SPEC, w_parser)
     return a_parser
Exemplo n.º 11
0
  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
Exemplo n.º 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
Exemplo n.º 13
0
 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
Exemplo n.º 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
Exemplo n.º 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)
Exemplo n.º 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
Exemplo n.º 17
0
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)
Exemplo n.º 18
0
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
Exemplo n.º 19
0
 def MakeWordParserForHereDoc(self, line_reader):
     # type: (_Reader) -> WordParser
     lx = self._MakeLexer(line_reader)
     return word_parse.WordParser(self, lx, line_reader)
Exemplo n.º 20
0
 def MakeWordParser(self, lx, line_reader):
     # type: (Lexer, _Reader) -> WordParser
     return word_parse.WordParser(self, lx, line_reader)
Exemplo n.º 21
0
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)
Exemplo n.º 22
0
 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)
Exemplo n.º 23
0
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)