|
@@ -63,8 +63,6 @@ class LarkOptions(object): |
|
|
if self.parser == 'earley' and self.transformer: |
|
|
if self.parser == 'earley' and self.transformer: |
|
|
raise ValueError('Cannot specify an auto-transformer when using the Earley algorithm.' |
|
|
raise ValueError('Cannot specify an auto-transformer when using the Earley algorithm.' |
|
|
'Please use your transformer on the resulting parse tree, or use a different algorithm (i.e. lalr)') |
|
|
'Please use your transformer on the resulting parse tree, or use a different algorithm (i.e. lalr)') |
|
|
if self.keep_all_tokens: |
|
|
|
|
|
raise NotImplementedError("keep_all_tokens: Not implemented yet!") |
|
|
|
|
|
|
|
|
|
|
|
if o: |
|
|
if o: |
|
|
raise ValueError("Unknown options: %s" % o.keys()) |
|
|
raise ValueError("Unknown options: %s" % o.keys()) |
|
@@ -121,7 +119,7 @@ class Lark: |
|
|
|
|
|
|
|
|
assert isinstance(grammar, STRING_TYPE) |
|
|
assert isinstance(grammar, STRING_TYPE) |
|
|
|
|
|
|
|
|
if self.options.cache_grammar or self.options.keep_all_tokens: |
|
|
|
|
|
|
|
|
if self.options.cache_grammar: |
|
|
raise NotImplementedError("Not available yet") |
|
|
raise NotImplementedError("Not available yet") |
|
|
|
|
|
|
|
|
assert not self.options.profile, "Feature temporarily disabled" |
|
|
assert not self.options.profile, "Feature temporarily disabled" |
|
@@ -142,8 +140,12 @@ class Lark: |
|
|
assert self.options.parser == 'earley' |
|
|
assert self.options.parser == 'earley' |
|
|
assert self.options.ambiguity in ('resolve', 'explicit', 'auto') |
|
|
assert self.options.ambiguity in ('resolve', 'explicit', 'auto') |
|
|
|
|
|
|
|
|
|
|
|
# Parse the grammar file and compose the grammars (TODO) |
|
|
self.grammar = load_grammar(grammar, source) |
|
|
self.grammar = load_grammar(grammar, source) |
|
|
|
|
|
|
|
|
|
|
|
# Compile the EBNF grammar into BNF |
|
|
tokens, self.rules, self.grammar_extra = self.grammar.compile(lexer=bool(lexer), start=self.options.start) |
|
|
tokens, self.rules, self.grammar_extra = self.grammar.compile(lexer=bool(lexer), start=self.options.start) |
|
|
|
|
|
|
|
|
self.ignore_tokens = self.grammar.extra['ignore'] |
|
|
self.ignore_tokens = self.grammar.extra['ignore'] |
|
|
|
|
|
|
|
|
self.lexer_conf = LexerConf(tokens, self.ignore_tokens, self.options.postlex) |
|
|
self.lexer_conf = LexerConf(tokens, self.ignore_tokens, self.options.postlex) |
|
@@ -162,7 +164,7 @@ class Lark: |
|
|
|
|
|
|
|
|
def _build_parser(self): |
|
|
def _build_parser(self): |
|
|
self.parser_class = get_frontend(self.options.parser, self.options.lexer) |
|
|
self.parser_class = get_frontend(self.options.parser, self.options.lexer) |
|
|
self.parse_tree_builder = ParseTreeBuilder(self.options.tree_class, self.options.propagate_positions) |
|
|
|
|
|
|
|
|
self.parse_tree_builder = ParseTreeBuilder(self.options.tree_class, self.options.propagate_positions, self.options.keep_all_tokens) |
|
|
rules, callback = self.parse_tree_builder.create_tree_builder(self.rules, self.options.transformer) |
|
|
rules, callback = self.parse_tree_builder.create_tree_builder(self.rules, self.options.transformer) |
|
|
if self.profiler: |
|
|
if self.profiler: |
|
|
for f in dir(callback): |
|
|
for f in dir(callback): |
|
|