我需要为Java编程语言编写一个解析器。我已经看到了一些实现(JavaCC、SableCC),我认为我可以处理它。
问题是我需要重命名变量。我可以使用解析器来做这件事吗?
如果是,是如何实现的?
发布于 2012-03-09 00:54:15
如果您只想全局重命名变量,则不需要解析器。您所需要的只是一个(孤立的) lexer,它可以挑选出标识符,这样您就可以替换它们。您可以从任何具有Java语法的解析器生成器中获得这样的词法分析器,只需忽略解析器部分。这应该会给你省去很多麻烦。
如果您尝试使用解析器来构建AST,那么将很容易确定标识符(将有标识符树节点),甚至可能通过粉碎树节点来替换它们。您的问题将是重新生成合法的源文本。大多数解析器生成器不提供文本到树到文本的功能。
如果你想根据作用域重命名变量,你需要一个解析器,以及全名和类型解析。这比单纯的解析器难得多;Java7中关于名称查找的规则相当复杂。同样,Java语法中也有解析器生成器;但在这种情况下,除非您想实现名称和类型解析,否则它们不会对您有所帮助。你会发现这比你预期的要多得多。
https://stackoverflow.com/questions/9621259
复制相似问题