我一直在尝试百灵鸟,但遇到了一个小问题。假设我有以下语法。
parser = Lark('''
?start: value
| start "or" value -> or
?value: DIGIT -> digit
| ID -> id
DIGIT: /[1-9]\d*/
%import common.CNAME -> ID
%import common.WS
%ignore WS
''', parser='lalr')
假设我要解析1orfoo
:
print(parser.parse("1orfoo").pretty())
我希望 lark 将其视为数字1
后跟标识符orfoo
(因此抛出错误,因为语法不接受这种表达式)。
但是,解析器运行没有错误并输出:
or
digit 1
id foo
如您所见,Lark 将标识符拆分,并将表达式视为or
语句。
为什么会这样?我错过了什么吗?我怎样才能防止这种行为?
先感谢您。