如何使用“动态”词法分析器在基于 Lark 的解析器中“捕获”终端

问题描述

这是我之前的后续问题:Why do we need to specify the standard Lark lexer to be able to catch comment terminals?

我需要在基于 Lark 的解析器解析的 DSL 中“捕获”并保存注释。使用 'standard' 词法分析器时它似乎运行良好,但语法无法解析 DSL 的其余部分。

相反,需要使用 'dynamic''dynamic_complete',但随后似乎无法“捕获”注释。

我一直在使用 Larks own recipes 中第二个示例的变体进行测试:

import lark

comments = []

grammar = r'''
start: INT*

COMMENT: "//" /[^\n]*/

%import common (INT,WS)
%ignore COMMENT
%ignore WS
'''

parser = lark.Lark(grammar,lexer='dynamic',lexer_callbacks={'COMMENT': comments.append})

source = r'''
1 2 3  // hello
// world
4 5 6
'''

parser.parse(source)

print(comments)

此程序会将评论打印为空列表 ([]),否则将忽略它们。

是否有其他方法可以“捕获”和保存否则需要忽略的终端?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)