将源代码位置信息添加到前端

时间:2014-04-16 13:07:07

标签: compiler-construction frontend code-analysis ocamllex menhir

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

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

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

有谁能告诉我如何修改前端来做到这一点?还是有任何我可以研究的文件?

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

1 个答案:

答案 0 :(得分:2)

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

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

你会发现让行号正确是令人讨厌的,因为人们使用不一致的行尾约定(0X0D,0X0A,Unicode NEL,Unicode换行符......)。并且,您可能会发现您的行编号约定必须遵循您未编写的工具。 (海湾合作委员会对于行号增加的内容有自己的想法)。