大约每年一次,我必须开发或至少设计一个语法和解析器——这似乎是我工作生活的常态。
每次我面临这项任务时,大约一年一次,我,一个相当喜欢 lex/yacc(flex/bison resp.)的人,考虑或重新考虑普通 lex/yacc 的替代品,经过一番沉思和尝试,我回到普通的 lex/yacc。
因为我在应用程序的中心有一个 CORBA 服务器,所以我可以从几乎用每种语言编写的解析器调用,所以这次我看了一下
- antlr4 (Java) 和 antlr3 (Java 但有其他语言的 RT),
- SableCC (Java),
- Parse::EBNF, Parse::Yapp 和 Marpa (Perl),
- 和 SimpleParse (Python),
对我来说,与 antlrworks 串联的 antlr4 看起来是最有希望的候选者,但我还不相信花在进入它上的时间最终会被摊销。
我必须开发的语法类似于 SQL DDL(在结构方面,而不是在主题方面)。
为什么任何替代方案都比使用普通的 lex/yacc 更容易?