0

这是我之前的一个后续问题:为什么我们需要指定标准的 Lark 词法分析器才能捕获评论终端?

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

取而代之的是'dynamic'or'dynamic_complete'需要使用,但是评论似乎无法被“抓住”。

我一直在使用Larks 自己的测试配方中的第二个示例的变体:

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)

该程序会将注释打印为空列表 ( []),否则将忽略它们。

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

4

0 回答 0