Java解析器重命名变量

Java解析器重命名变量,java,parsing,grammar,context-free-grammar,Java,Parsing,Grammar,Context Free Grammar,我需要为Java编程语言编写一个解析器。我见过一些实现(JavaCC、SableCC),我认为我可以处理它 问题是我需要重命名变量。我可以用解析器来做这件事吗 如果是,怎么做?如果您只想全局重命名变量,则不需要解析器。您所需要的只是一个(孤岛)lexer,它可以挑出标识符,以便您可以替换它们。只要忽略解析器部分,就可以从任何具有Java语法的解析器生成器中获得这样的lexer。那会给你省去很多麻烦 如果您尝试为此使用一个解析器来构建一个AST,那么就很容易确定标识符(将有标识符树节点),甚至可能

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

问题是我需要重命名变量。我可以用解析器来做这件事吗


如果是,怎么做?

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

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


如果要根据作用域重命名变量,则需要解析器、全名和类型解析。这比单纯的解析器要困难得多;Java7中关于名称查找的规则非常复杂。同样,还有一些语法分析器生成器;但在这种情况下,它们不会帮助您,除非您想要实现名称和类型解析。你会发现这比你预期的要多得多。

许多IDE都有这样的重构功能:也许这是一种选择?嗯,像这样的事情我需要自己做,重构。但是为什么你不使用IDE来实现呢?我的意思是,对于Eclipse、IntelliJ或Netbeans可以轻松完成的事情,要找到一个合适的语法并生成一个解析器,或者自己编写解析器,会有很多麻烦。为此,我首先需要一个解析器,然后是一种在整个代码中重命名变量的方法。我的下一个问题是:为什么不使用现有的模糊器?这是家庭作业还是什么作业?坦率地说,如果你在这个早期阶段已经面临问题,我不建议你自己写这样的东西。没有冒犯的意思。