gpt4 book ai didi

python - 使用 Lark 语法优先

转载 作者:太空宇宙 更新时间:2023-11-03 12:54:09 40 4
gpt4 key购买 nike

我的语法有一个优先级问题,我没有更多的想法来解决它。

我正在使用 Lark

事情是这样的(我已经尽可能地简化了问题):

from lark import Lark

parser = Lark(r"""
start: set | set_mul

set_mul: [nb] set
set: [nb] "foo"
nb: INT "x"

%import common.INT
%import common.WS
%ignore WS

""", start='start')

input = "3xfoo"
p = parser.parse(input)
print(p.pretty())

输出是:

  start
set_mul
set
nb 3

但我想要的是:

start
set_mul
nb 3
set

我试图在我的规则中设置优先级,但它不起作用。

您是否知道我需要更改什么才能使其正常工作?

谢谢

最佳答案

一个简单的解决方案可能是重写语法以消除歧义。

parser = Lark(r"""
start: set | set_mul

set_mul: nb | nb set | nb nb_set
set: "foo"
nb_set: nb set
nb: INT "x"

%import common.INT
%import common.WS
%ignore WS

""", start='start')

这样,以下每个输入都只有一种可能的解释:

input = "3xfoo"
p = parser.parse(input)
print(p.pretty())

input = "3x4xfoo"
p = parser.parse(input)
print(p.pretty())

结果:

start
set_mul
nb 3
set

start
set_mul
nb 3
nb_set
nb 4
set

关于python - 使用 Lark 语法优先,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49671691/

40 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com