这是我之前的一个后续问题:为什么我们需要指定标准的 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)
该程序会将注释打印为空列表 ( []
),否则将忽略它们。
还有其他方法可以“捕获”和保存需要忽略的终端吗?