ANTLR:源语言到目标语言的转换

标签 antlr antlr4

我对 ANTLR 和语法有一定的了解。说 ANTLR 可以将源语言转换为目标语言(如 ASP 到 JSP 或 COBOL 到 JSP)是否正确?如果是,你能帮我提供一些信息/教程/链接来探索可能性吗?

想法是使用 ANTLR 务实地将大量代码从源代码翻译到目标代码。

谢谢

最佳答案

在 Antlr4 中构建翻译器的基本步骤是:

  1. 从源语言的输入文本生成解析树
  2. 重复遍历解析树以分析解析树的节点,添加和演化与各个解析树节点关联的属性(装饰器模式)——属性将描述表示节点内容所需的更改在目标语言中。
  3. 最后遍历分析树以收集和输出目标语言文本。

属性的形式和内容以及创建和演变的进程将完全取决于源语言和目标语言的性质以及架构师的转换策略。

由于 Antlr 解析树遍历在逻辑上可以相互独立,因此特定的转换方面可以在单独的遍历中解决。例如,一次行走可以评估(可能除其他外)单个 perform until 语句是否将转换为 ifwhile 语句。另一步可以专门分析变量名称,以确保它们在正确的范围内创建/访问,并确定任何目标语言所需的临时变量的命名和范围。等等

鉴于转换是一次性的事情,实现 5 次、10 次甚至更多次步行并没有根本性的惩罚。只是“只要对您的情况有意义”的实用性。

另一个 QA 中提出的(相关)警告是如何处理两种语言的语句之间没有简单或接近同一性的转换。要转换唯一的源语言语句,则需要创建目标语言运行时包以实现相应的功能。

GenPackage (我是作者)自动生成一个基本的转换项目。生成的项目仅代表一种可能的架构方法,并留下大量工作要做以对其进行定制以适应任何特定的最终用途。

关于ANTLR:源语言到目标语言的转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31511610/

相关文章:

antlr - 这个antlr语法有什么问题吗?通配符问题?

ANTLR4 力 LL(1)

antlr3 - 句法谓词 - 从 Antlr 3 升级到 Antlr 4

c# - C# 中的 antlr4 parser.prog

compiler-errors - ANTLR4.7 : rule XXX contains a closure with at least one alternative that can match an empty string'

antlr - 检查可选规则是否为空

java - 使用 ANTLR v3 编译 Java 源代码时出现问题

java - ANTLR4如何根据规则改变隐藏字符?

java - 使用 ANTLR4 检查嵌套函数中数组的最大出现次数

exception - 如何在第一次词法分析错误时退出ANTLR 4?