[英]What is wrong with this ParseKit BNF?
我正在為 objective-C 使用 ParseKit,它采用類似 BNF 的語法來指定語法:
@start = command+;
command = new;
new = 'new' object ';';
object = 'house' | other;
包含最后一行會導致錯誤。 基本上我想說一個 object 可以是房子或其他東西。 非終結元素“other”應該能捕捉到任何不是房子的詞。
我是否以錯誤的方式談論“這里的任何東西”的想法?
謝謝!
ParseKit 的開發者在這里。 Carmine 的上述回答非常好,您應該聽取他的建議。 一個小的附加說明:
如果您想讓您的 Parser 代表更容易注意到“house”與任何其他隨機單詞匹配的時間,我會將上面語法的最后一行更改為:
object = house | other;
house = 'house';
other = Word;
然后,您應該在 Parser 委托中實現以下兩個回調方法:
- (void)parser:(PKParser *)p didMatchHouse:(PKAssembly *)a;
- (void)parser:(PKParser *)p didMatchOther:(PKAssembly *)a;
如果你想允許other
匹配任何標記(不僅僅是單詞,還有數字、符號、帶引號的字符串等),你可以使用內置的Any
類型。 在這種情況下,您可以將上面示例的最后一行更改為:
other = Any;
正如評論中所建議的,您應該將other
替換為Word
或添加新規則:
other = Word;
由於'house'
是一個Word
,您也可以直接將object
規則替換為:
object = Word;
ParseKit 中的Word
是字符 ( [a-zA-Z]
)、數字 ( [0-9]
) 和符號-
、 _
和'
的連續序列,它們以字符開頭。 您可以在文檔中找到有關 ParseKit 令牌的更多信息。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.