7

我建議使用解析器生成器爲我的域特定語言創建解析器。目標C的解析器生成器?

理想情況下,我希望它輸出一個Objective-C解析器,並採用BNF輸入來描述語言。

似乎有很少的選擇..是否有可能使用目標C更流行的解析器發生器之一?

謝謝!

回答

8

代碼生成不是像Objective-C這樣的動態語言中的「真正方法」。任何可以通過解析器生成器實現的功能都可以在運行時實現。所以,我建議你嘗試一下類似ParseKit的東西,它將採用類似BNF的語法,併爲您提供各種可用於構建解析器的代理鉤子。

查看this tutorial瞭解更多詳情。

+0

看起來非常感謝!你知道ParseKit的類BNF語法是否支持遞歸嗎?這只是我沒看到它提到.. – FBryant87

+0

我很確定它確實如此,但是如果您以這種方式對左遞歸語法進行編碼,除非您非常小心,否則最終會陷入無限循環。所以,我建議你試着將你的遞歸歸因於重複,這可能會更好地爲你服務。 –

4

如果您熟悉基於C的解析器生成器,您當然可以使用它們。另一個Objective-C運行時分析器是由不可壓縮的Rob Rix創建的Hammer

7

當然有(比如Bison或YACC等)的預期答案,但是如果你想要一個原生的Objective-C解決方案,那麼已經提到了這對夫婦。 (錘子和ParseKit)另一個我知道的是「CoreParse」:https://github.com/beelsebob/CoreParse