为C程序构建AST时的上下文条件

时间:2015-03-10 14:11:57

标签: c parsing interpreter abstract-syntax-tree jison

我在Javascript中为C(子集)编写解释器(我想在浏览器中提供程序的执行可视化)。

作为第一步,我想为用户程序创建一个AST树。我正在使用Jison,类似于flex / bizon组合。

现在我只是简单地对程序进行标记并解析以检查它是否符合标准给出的语法(让我们单独留下typedef引入的歧义问题)。

然而,符合C语法并不能保证程序有任何意义,例如

int main() {
    x = ("jklfds" || "jklgfd")(2, imlost);
}

符合语法,虽然未声明x,(" jklfds" ||" jklgfd")不是函数指针 - 不检查类型。通常,有许多情境条件未经检查。

我想知道在构建AST树时应该检查多少。例如,理论上在这一点上很容易完全计算和检查常量表达式。但是,许多其他检查需要上下文。 例如,在解析期间,是否有可能知道某些标识符引用了程序中早先声明的结构?

如何按原样构建AST树并通过多次分析/转换AST来检查上下文约束,证明越来越多的条件是正确的?在解析过程中检查会更容易/更难吗?

我正在寻找最友好的解决方案,我并不关心它的速度。

0 个答案:

没有答案