Kyp*_*paz 3 python grammar lark-parser
我的语法中有一个优先级问题,而且我没有其他解决方法。
我正在使用云雀
这是事情(我已尽力简化了问题):
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())
Run Code Online (Sandbox Code Playgroud)
输出为:
start
set_mul
set
nb 3
Run Code Online (Sandbox Code Playgroud)
但是我想要的是:
start
set_mul
nb 3
set
Run Code Online (Sandbox Code Playgroud)
我试图将优先权放在我的规则中,但是没有用。
您是否知道我需要进行哪些更改才能使其正常工作?
谢谢
一个简单的解决方案可能是重新编写语法以消除歧义。
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')
Run Code Online (Sandbox Code Playgroud)
这样,以下每个输入只有一种可能的解释:
input = "3xfoo"
p = parser.parse(input)
print(p.pretty())
input = "3x4xfoo"
p = parser.parse(input)
print(p.pretty())
Run Code Online (Sandbox Code Playgroud)
结果:
start
set_mul
nb 3
set
start
set_mul
nb 3
nb_set
nb 4
set
Run Code Online (Sandbox Code Playgroud)