Java解析器重命名变量

时间:2012-03-08 16:35:37

标签: java parsing grammar context-free-grammar

我需要为Java编程语言编写一个解析器。我见过一些实现(JavaCC,SableCC),我想我可以处理它。

问题是我需要重命名变量。我可以使用解析器吗?

如果是,怎么样?

1 个答案:

答案 0 :(得分:1)

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

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

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