簡體   English   中英

如何使關鍵字在simpleparse中可識別?

[英]How to make the keywords recognizable in simpleparse?

我一直在嘗試使用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

該語法目前尚不清楚。 在紙上,您無法分析“將A移動到B並將C移動到D”是兩個語句,還是一個帶有特定錯誤命名目的地的語句。

你有兩個答案。 您可能都不喜歡。

  1. 您明確使WORD與任何保留字都不匹配。 也就是說,您明確不允許匹配MOVE或TO。 這等效於說“ MOVE不是有效的參數名稱”。 這將導致“ MOVE TL TO TM TN TO”錯誤。

  2. 您可以修改語法,以便知道語句的結尾。 您可以添加逗號“將AA移動到BB,將CC移動TM到TN,TO,TP”。 您可以在語句末尾添加分號或空白行。 您可能需要最小縮進,例如Python。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM