创建像DSL一样的Lisp语法 - 非常小的特定应用程序 - 但速度非常快 - 在C中生成代码,Antlr是一个不错的选择?
由于很多原因它必须非常快并且它将在内部调用许多C ++ API,因此我不能用C / C ++以外的语言编写它。
我最近一次在编译器中做了一些事情,大概是在5年前的学校里,在flex / bison中。
但是,这一次,我必须为此任务编写生产就绪可维护代码。我一直在研究Antlr很长一段时间,看起来不错。但我有以下问题: -
另外,如果你能让我知道Antlr我应该擅长哪些主题/部分,那就太棒了。
由于
答案 0 :(得分:3)
当语法很复杂时,ANTLR很好。
LISP语法在设计上并不复杂。一切都由两个语法规则处理:
sexp = identifier | number | string | '(' sexps ')' ;
sexps = empty | sexps sexp ;
它是一个简单的词法分析器和解析器,您可以轻松地将其实现为recursive descent parser(在C或 用其他语言;较旧的LISP在LISP中实现这一点,因此他们可以直接在LISP中实现LISP解释器和编译器。
你可以使用ANTLR,但我认为它有点过分。如果您的语言实际上比您建议的更复杂,那么ANTLR可能是一个不错的选择。
构建一个好的DSL通常需要的不仅仅是解析。有关详细信息,请参阅我的论文“解析后的生活”(通过bio)。