1

所以我在 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')])])
4

1 回答 1

0

更改arg: ARGUMENT","arg | ARGUMENTarg: ARGUMENT ("," arg)*等效。

意思是*:匹配0个或多个实例。使用这种表示法,Lark 会将元素视为一个列表。

于 2020-05-11T11:17:38.497 回答