大約每年一次,我必須開發或至少設計一個語法和解析器 - 這似乎是我工作生活中的一個常量。每當我面對這項任務時,因此大概一年,我,相當一個lex/yacc(flex/bison resp。)的人,考慮或重新考慮lex/yacc的替代品,並且在一些思考和嘗試我回到普通的lex/yacc。使用lex/yacc替代品的原因是什麼?
因爲我已經在應用的樞紐CORBA服務器,我可以從寫在幾乎每一種語言解析器調用,所以這個時候我看了一下
- antlr4(JAVA)和antlr3(Java,但有RT其他語言),
- SableCC(渣),
- 解析:: EBNF,解析::亞普和馬爾巴(Perl的),
- 和SimpleParse是(蟒蛇),
對我來說,antlrworks的串聯antlr4看起來是最有希望的候選人,但我還不確信花在花費上的時間最終會被攤銷。
我要開發的語法類似於SQL DDL(在結構方面,而不是在主題方面)。
爲什麼任何替代方案都會使我的任務比使用普通的lex/yacc更容易?
我認爲這是一個像「我應該使用哪種編程語言」這樣的問題,這不太可能吸引SO促進的事實上的客觀答案。因此投票結束時不具有建設性。然而,你面臨的問題是:你覺得lex/flex/yacc/bison不能令你滿意嗎?那至少會給你一個關於要尋找什麼功能的線索。如果它只是「我想嘗試新的東西」,那麼翻轉一枚硬幣:) – rici 2013-05-13 16:02:48
它不具有可比性。如果所有的生成器都會生成相同的解析器,我會同意,但取決於解析器生成器,結果是完全不同的。 – 2013-05-14 12:42:51