Browse Source

Still working

tags/gm/2021-09-23T00Z/github.com--lark-parser-lark/0.7.1
Erez Shinan 5 years ago
parent
commit
6efa6b4fa0
1 changed files with 36 additions and 36 deletions
  1. +36
    -36
      lark/parser_frontends.py

+ 36
- 36
lark/parser_frontends.py View File

@@ -11,6 +11,40 @@ from .tree import Tree


###{standalone ###{standalone


def get_frontend(parser, lexer):
if parser=='lalr':
if lexer is None:
raise ValueError('The LALR parser requires use of a lexer')
elif lexer == 'standard':
return LALR_TraditionalLexer
elif lexer == 'contextual':
return LALR_ContextualLexer
elif issubclass(lexer, Lexer):
return partial(LALR_CustomLexer, lexer)
else:
raise ValueError('Unknown lexer: %s' % lexer)
elif parser=='earley':
if lexer=='standard':
return Earley
elif lexer=='dynamic':
return XEarley
elif lexer=='dynamic_complete':
return XEarley_CompleteLex
elif lexer=='contextual':
raise ValueError('The Earley parser does not support the contextual parser')
else:
raise ValueError('Unknown lexer: %s' % lexer)
elif parser == 'cyk':
if lexer == 'standard':
return CYK
else:
raise ValueError('CYK parser requires using standard parser.')
else:
raise ValueError('Unknown parser: %s' % parser)




class WithLexer(Serialize): class WithLexer(Serialize):
lexer = None lexer = None
parser = None parser = None
@@ -66,6 +100,8 @@ class LALR_ContextualLexer(WithLexer):
self.parser = LALR_Parser(parser_conf, debug=debug) self.parser = LALR_Parser(parser_conf, debug=debug)
self.init_contextual_lexer(lexer_conf) self.init_contextual_lexer(lexer_conf)


###}

class LALR_CustomLexer(WithLexer): class LALR_CustomLexer(WithLexer):
def __init__(self, lexer_cls, lexer_conf, parser_conf, options=None): def __init__(self, lexer_cls, lexer_conf, parser_conf, options=None):
self.parser = LALR_Parser(parser_conf) self.parser = LALR_Parser(parser_conf)
@@ -159,39 +195,3 @@ class CYK(WithLexer):
def _apply_callback(self, tree): def _apply_callback(self, tree):
return self.callbacks[tree.rule](tree.children) return self.callbacks[tree.rule](tree.children)



def get_frontend(parser, lexer):
if parser=='lalr':
if lexer is None:
raise ValueError('The LALR parser requires use of a lexer')
elif lexer == 'standard':
return LALR_TraditionalLexer
elif lexer == 'contextual':
return LALR_ContextualLexer
elif issubclass(lexer, Lexer):
return partial(LALR_CustomLexer, lexer)
else:
raise ValueError('Unknown lexer: %s' % lexer)
elif parser=='earley':
if lexer=='standard':
return Earley
elif lexer=='dynamic':
return XEarley
elif lexer=='dynamic_complete':
return XEarley_CompleteLex
elif lexer=='contextual':
raise ValueError('The Earley parser does not support the contextual parser')
else:
raise ValueError('Unknown lexer: %s' % lexer)
elif parser == 'cyk':
if lexer == 'standard':
return CYK
else:
raise ValueError('CYK parser requires using standard parser.')
else:
raise ValueError('Unknown parser: %s' % parser)




###}

Loading…
Cancel
Save