首页 文章

Antlr用于多语言生成

提问于
浏览
0

这个post about the antlr simple example显示了如何为java创建和使用语法 .

但是,这会混合Exp.g源中的语法和Java源代码 .

我的问题是,是否可以将语法文件与目标语言分离,以便一个语法文件可用于生成多个Java,Scala,C等Lexer / Parsers?

1 回答

  • 1

    这主要取决于目标代码在语法中使用的原因 . 是否仅使用找到的令牌执行某些操作代码(例如,构建符号表或替代树表示),确实没有问题请删除此类本机代码并在之后进行处理(使用解析树助手或访问者) .

    但是,谓词是不同的 . 它们用于指导解析器并且还需要本机代码 . 您可以做的是将所有本机代码移动到生成的解析器派生的基类中 . 然后,您只需要用目标语言重写这个基类,并保持语法大部分没有本机代码(除了调用本机代码的单个函数调用) .

    这种方法的优点是不需要额外的库引用(#include in C / C,import in other languages),这也是本机代码阻止用于多个目标 .

相关问题