怎么了
因此,我在解析器正确接受多行时遇到了麻烦。
from lark import Lark
class SetLanguageLarkParser():
def __init__(self):
self.setParser = Lark(r"""
start: statement+
statement : "DISP" expr ";"-> display
| name "=" expr ";"-> assign
expr : expr "+" rest -> union
| expr "-" rest -> differnce
| expr "*" rest -> cross
| expr "|" rest -> intersection
| rest
rest : expr
| content | name
content : "{" [ [NUMBER|WORD] ("," [NUMBER|WORD])*] "}"
name : WORD
%import common.WORD
%import common.NUMBER
%import common.WS
%ignore WS
""", start='start')
def main():
data = """
x = {0};
S = {1,2,3};
"""
setLangP = SetLanguageLarkParser()
print(setLangP.setParser.parse(data).pretty())
main()
最终,如果我向解析器提供一个像"S={1,2,3};"它工作得很好,但我给它提供了多个字符串,如
"S={1,2,3};
X={0};">
无法正确解析。我收到的错误是UnexpectedCharacters: No terminal matches 'S' in the current parser context
提前感谢。
看起来我转向Stackoverflow太快了。我把开头改成了"statement"。时,"在解析器初始化🤦♂️。谢谢看了一眼的人。