簡體   English   中英

這個 ParseKit BNF 有什么問題?

[英]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.

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