Python 如何在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"+

我一直在尝试使用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"+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”是两条语句,或者是一条目的地名称不正确的语句,则无法解析

你有两个答案。你可能两个都不喜欢

  • 您明确地使您的字与任何保留字都不匹配。也就是说,您明确禁止匹配移动或移动。这相当于说“MOVE不是有效的参数名”。这使得“将TL移动到TM TN”成为一个错误

  • 您可以修改语法,以便可以知道语句的结尾。您可以添加逗号“将AA移动到BB,将CC移动到TM,将TN移动到TP”。您可以在语句末尾添加分号或空行。您可以要求移动的缩进最少,就像Python一样


  • 谢谢你的澄清,这对我帮助很大。解析器现在工作得非常好。