Java解析器重命名变量

标签 java parsing grammar context-free-grammar

我需要为Java编程语言编写一个解析器。我已经看到了一些实现(JavaCC、SableCC),我想我可以处理它。

问题是我需要重命名变量。我可以使用解析器来做到这一点吗?

如果是,怎么做?

最佳答案

如果您只想全局重命名变量,则不需要解析器。您所需要的只是一个(岛)词法分析器,它可以挑选出标识符,以便您可以替换它们。您可以从任何具有 Java 语法的解析器生成器中获取这样的词法分析器,只需忽略解析器部分即可。这应该会帮你省去很多麻烦。

如果您尝试为此使用解析器来构建 AST,那么将很容易确定标识符(将有 IDENTIFIER 树节点),甚至可能通过粉碎树节点来替换它们。您的问题将是重新生成合法的源文本。大多数解析器生成器不提供文本到树到文本的功能。

如果您想根据范围重命名变量,您需要一个解析器以及全名和类型解析。这比单纯的解析器要困难得多; Java 7 中的名称查找规则非常复杂。同样,也有带有 Java 语法的解析器生成器;但在这种情况下,除非您想实现该名称和类型解析,否则它们不会帮助您。您会发现工作量比您预期的要多。

关于Java解析器重命名变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9621259/

相关文章:

c# - 更改整数的默认 NumberStyles?

c++ - 二进制解析器还是序列化?

java - ANTLR4 重复 AND

JavaScript 语法 : indexing object literals syntactically forbidden?

java - Antlr 删除左递归,同时分别保留数学表达式和 boolean 表达式

java - 解析相对于基本 URI 的子 URI

java - 在jlist中添加图片

java - 无法使用 sqljdbc4.jar 连接到 MSSQL Server 2012

java - 运行jdbc程序而不每次都设置类路径

node.js - 从nodeJS中的字符串中解析一些值