微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决如何使用“动态”词法分析器在基于 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 举报,一经查实,本站将立刻删除。