像DSL这样的小型lisp被编译成C / C ++代码 - Antlr是个不错的选择?

时间:2010-08-07 20:53:14

标签: c++ c antlr dsl

创建像DSL一样的Lisp语法 - 非常小的特定应用程序 - 但速度非常快 - 在C中生成代码,Antlr是一个不错的选择?

由于很多原因它必须非常快并且它将在内部调用许多C ++ API,因此我不能用C / C ++以外的语言编写它。

我最近一次在编译器中做了一些事情,大概是在5年前的学校里,在flex / bison中。

但是,这一次,我必须为此任务编写生产就绪可维护代码。我一直在研究Antlr很长一段时间,看起来不错。但我有以下问题: -

  • 对C / C ++目标的支持是否良好?
  • Antlr是否适合构建像DSL一样的Lisp语法?
  • 总的来说,这个特定的应用程序会比使用flex / bison更好吗?

另外,如果你能让我知道Antlr我应该擅长哪些主题/部分,那就太棒了。

由于

1 个答案:

答案 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)。