所以我在python中使用Lark库来解析一些文本,我面临两个问题。我在文档中进行了搜索,但找不到从树中检索令牌的方法,第二个方法是,我期望一个具有多个令牌的树,但我得到的不是嵌套树,每个树只有一个令牌。
这是我的代码:
l = Lark('''start: EXPERT "arguments with" arg _NL
EXPERT : /[a-zA-Z0-9]+/
ARGUMENT : /[a-zA-Z0-9]+/
arg: ARGUMENT","arg | ARGUMENT
%import common.WORD // imports from terminal library
%ignore " " // Disregard spaces in text
%import common.NEWLINE -> _NL
''',parser='lalr', lexer='contextual')
我得到的结果是:
Tree(start, [Token(EXPERT, 'PC1'), Tree(arg, [Token(ARGUMENT, 'a'), Tree(arg, [Token(ARGUMENT, 'b'), Tree(arg, [Token(ARGUMENT, 'c')])])])])
我期待的结果是:
Tree(start, [Token(EXPERT, 'PC1'), Tree(arg, [Token(ARGUMENT, 'a'),Token(ARGUMENT, 'b'),Token(ARGUMENT, 'c')])])
将arg: ARGUMENT","arg | ARGUMENT
更改为等效的arg: ARGUMENT ("," arg)*
。
*
表示:匹配0个或多个实例。使用这种表示法,lark将把这些元素视为一个列表。