2

我正在编写一个静态分析器,包括特定语言程序的前端。

前端成功地从程序生成 AST,分析器在该程序上运行良好:它要么证明程序正确(对于某些特定属性),要么为语句或表达式引发错误。

如果出现错误,我想明确错误消息。因此,我想localisation源代码中为引发错误的语句或表达式添加确切的内容。展示line number已经很好,展示会row number更好......

谁能告诉我如何修改前端来做到这一点?或者有什么我可以研究的文件吗?

(我想首先我需要修改 AST 中的类型,但我必须添加loc到所有内容吗?)

4

1 回答 1

2

从概念上(以及我在实现上的偏好)将源代码位置(行、列、文件)添加到每个AST 节点。

从技术上讲,这在节点中应该不难,您可以在词法分析器中收集该信息,以便解析器处理的词位携带该信息。让解析器将该信息复制到解析树节点中应该很容易。我们已经为我们的程序分析工具做到了这一点,并且效果很好。

您会发现正确设置行号很烦人,因为人们使用不一致的行尾约定(0X0D、0X0A、Unicode NEL、Unicode 换行符……)。而且,您可能会发现您的行号约定必须遵循您未编写的工具的约定。(GCC 对增加行号有自己的想法)。

于 2014-04-16T23:16:56.677 回答