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