Я пытался создать парсер с помощью 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]+)*
Теперь, если я попытаюсь разобрать строку
MOVE ABC-DEF TO ABC
MOVE DDD TO XXX
Второе утверждение интерпретируется как параметры первого ... Это отстой и, очевидно, не то, что я хочу. Я смог заставить это работать с использованием pyparsing, как это:
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