示例#1
0
 def genpython(self):
     return trim('''
         self.closureplus(
             lambda: (
         {exp}
             )
         )''').format(exp=indent(self.exp.genpython(), 2))
示例#2
0
 def genpython(self):
     options = ',\n'.join(f'lambda: {o.genpython()}' for o in self.options)
     return trim('''
         self.oneof(
         {options},
         )
         ''').format(options=indent(options))
示例#3
0
    def __repr__(self):
        return trim(r'''
            @@grammar :: Python
            @@whitespace :: /(?:(?!\n)\s)+/
            @@left_recursion :: False
            @@parseinfo :: True

            {rules}
            ''').format(rules='\n\n'.join(repr(r) for r in self.rules))
示例#4
0
 def __repr__(self):
     return trim(r'''
         {name}
             =
         {exp}
             ;
         ''').format(
         name=self.name,
         exp=indent(repr(self.exp)),
     )
示例#5
0
 def genpython(self):
     return trim('''
         def parse_{name}(self):
             print('{name}', '>>>', '"%s"' % self.text[self.pos: self.pos + 20])
             self.spaces()
         {exp}
             print('{name}', result, '"%s"' % self.text[self.pos: self.pos + 20])
             return result
     ''').format(name=self.name,
                 exp=indent(f'result = {self.exp.genpython()}'))
示例#6
0
    def genpython(self):
        rules = '\n\n'.join(trim(r.genpython()) for r in self.rules)
        result = trim('''
            import argparse
            from pygl.context import ParseContext

            class PythonParser(ParseContext):
            {rules}


            if __name__ == '__main__':
                argp = argparse.ArgumentParser(description="Simple parser for Python")
                addarg = argp.add_argument

                addarg('file',
                       metavar="FILE",
                       help="the input file to parse or '-' for standard input",
                       nargs='?',
                       # default='-',
                )
                addarg('startrule',
                       metavar="STARTRULE",
                       nargs='?',
                       help="the start rule for parsing",
                       default=None,
                )
                args = argp.parse_args()

                if args.file:
                    with open(args.file) as f:
                        text = f.read()

                    parser = PythonParser(text)
                    ast = parser.parse(args.startrule)
                    print(type(ast), ast)


        ''').format(rules=indent(rules))

        # compile(result, '<text>', mode='exec')
        return result
示例#7
0
 def genpython(self):
     return trim(f'{self.exp.genpython()} or self.void()')
示例#8
0
 def genpython(self):
     return trim(f'({self.exp.genpython()})')
示例#9
0
 def genpython(self):
     seq = ',\n'.join(f'lambda: {e.genpython()}' for e in self.seq)
     return trim('''
         self.allof(
         {seq}
         )''').format(seq=indent(seq))