Browse Source

test keep tokens in reconstructor works

tags/gm/2021-09-23T00Z/github.com--lark-parser-lark/0.10.0
julienmalard 5 years ago
parent
commit
5d01f0ae68
1 changed files with 10 additions and 3 deletions
  1. +10
    -3
      lark/load_grammar.py

+ 10
- 3
lark/load_grammar.py View File

@@ -307,6 +307,7 @@ class PrepareAnonTerminals(Transformer_InPlace):
self.term_set = {td.name for td in self.terminals}
self.term_reverse = {td.pattern: td for td in terminals}
self.i = 0
self.rule_options = None


@inline_args
@@ -351,7 +352,10 @@ class PrepareAnonTerminals(Transformer_InPlace):
self.term_reverse[p] = termdef
self.terminals.append(termdef)

return Terminal(term_name, filter_out=isinstance(p, PatternStr))
filter_out = False if self.rule_options and self.rule_options.keep_all_tokens else isinstance(p, PatternStr)

return Terminal(term_name, filter_out=filter_out)


class _ReplaceSymbols(Transformer_InPlace):
" Helper for ApplyTemplates "
@@ -527,7 +531,8 @@ class Grammar:
# =================

# 1. Pre-process terminals
transformer = PrepareLiterals() * PrepareSymbols() * PrepareAnonTerminals(terminals) # Adds to terminals
anon_tokens_transf = PrepareAnonTerminals(terminals)
transformer = PrepareLiterals() * PrepareSymbols() * anon_tokens_transf # Adds to terminals

# 2. Inline Templates

@@ -542,8 +547,10 @@ class Grammar:
i += 1
if len(params) != 0: # Dont transform templates
continue
ebnf_to_bnf.rule_options = RuleOptions(keep_all_tokens=True) if options.keep_all_tokens else None
rule_options = RuleOptions(keep_all_tokens=True) if options and options.keep_all_tokens else None
ebnf_to_bnf.rule_options = rule_options
ebnf_to_bnf.prefix = name
anon_tokens_transf.rule_options = rule_options
tree = transformer.transform(rule_tree)
res = ebnf_to_bnf.transform(tree)
rules.append((name, res, options))


Loading…
Cancel
Save