繁体   English   中英

关于使用yacc解析器构建符号表的问题

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM