[英]Question about building a symbol table with a yacc parser
如果我的yacc解析器遇到以下代码:
int foo(int a, int b)
它应该添加int a和int b作为foo的属性吗? 现在,我将其输入a和b作为单独的表条目。
我会将符号表添加为单独的条目,但在foo节点上具有作用域子句。 这将使您能够报告变量的阴影/掩盖。 因此,对于C语言,您可以在顶部定义一个模块全局int ,然后使用a作为参数将掩盖全局。 这是一个有用的提示,可以警告用户,不要在同一范围内重新声明该符号。
在其他情况下,范围规则可能需要阻止重新声明的同一符号,例如嵌套的for循环,其中迭代器具有相同的名称。
正如Ivan所说,您需要根据想要/需要检测的内容以及最简单的检查方法进行此调用。
您的问题很模糊。 这完全取决于您以后使用什么以及如何使用数据。
您可以将它们用作AST中的单独节点,或者,如上所述,可以将它们添加为foo()
属性。 我相信,这件事的选择是您的。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.