我是ANTLR的新手,我正在为一个项目深入研究它。我的工作要求我从源代码文件生成一个解析树,将解析树转换为一个字符串,该字符串以某种"人类可读"的形式保存有关解析树的所有信息。然后,此字符串的一部分(表示解析树(将被修改,并且修改后的字符串必须转换为更改的源代码。
我发现.toStringTree(tree(方法可以在ANTLR中以LISP格式打印出树。有没有更好的方法将解析树表示为包含所有信息的字符串?
是否可以使用 ANTLR 将字符串解析树恢复为原始源代码(使用相同的语言(?如果没有,是否有任何工具可以做到这一点?
是否可以使用 ANTLR 将字符串解析树恢复为原始源代码(使用相同的语言(?
该字符串不包含令牌类型,仅包含匹配的文本。换句话说:您不能从ToStringTree
的输出创建解析树。此外,许多 ANTLR 语法都有跳过某些输入(例如空格和换行符(的词法分析器规则,因此将解析树转换回原始输入源并不总是可能的。
如果没有,是否有任何工具可以做到这一点?
毫无疑问,我建议您在GitHub上进行搜索。但是,当您拥有解析树时,创建自定义树结构并将其转换为 JSON 是很简单的。