Python 如何在simpleparse中识别关键字?
我一直在尝试使用simpleparse创建解析器。我对语法的定义如下:Python 如何在simpleparse中识别关键字?,python,parsing,Python,Parsing,我一直在尝试使用simpleparse创建解析器。我对语法的定义如下: <w> := [ \n]* statement_list := statement,(w,statement)? statement := "MOVE",w,word,w,"TO",w,(word,w)+ word := [A-Za-z],[A-Za-z0-9]*,([-]+,[A-Za-z0-9]+)* word = Word(alphas,alphanums+'-') statement = "MOVE"+
<w> := [ \n]*
statement_list := statement,(w,statement)?
statement := "MOVE",w,word,w,"TO",w,(word,w)+
word := [A-Za-z],[A-Za-z0-9]*,([-]+,[A-Za-z0-9]+)*
word = Word(alphas,alphanums+'-')
statement = "MOVE"+word+"TO"+word
statement_list = OneOrMore(statement.setResultsName('statement',True))
第二条语句被解释为第一条语句的参数。。。这很糟糕,显然不是我想要的。我已经能够使用pyparsing实现这一点,如下所示:
<w> := [ \n]*
statement_list := statement,(w,statement)?
statement := "MOVE",w,word,w,"TO",w,(word,w)+
word := [A-Za-z],[A-Za-z0-9]*,([-]+,[A-Za-z0-9]+)*
word = Word(alphas,alphanums+'-')
statement = "MOVE"+word+"TO"+word
statement_list = OneOrMore(statement.setResultsName('statement',True))
有什么方法可以让simpleparse也能工作吗
编辑:澄清如下
我并不是在试图实现基于行的语法。我希望看到被解析的是:
简单案例
MOVE AA TO BB
更复杂的案件
MOVE AA TO BB
CC DD
EE FF
上述几点
MOVE AA TO BB
CC
MOVE CC TO EE
MOVE EE TO FF
GG
HH IIJJK
语法目前模棱两可。在纸面上,如果“movea-TO-B-movec-TO-D”是两条语句,或者是一条目的地名称不正确的语句,则无法解析 你有两个答案。你可能两个都不喜欢
谢谢你的澄清,这对我帮助很大。解析器现在工作得非常好。