【发布时间】:2018-09-15 11:57:25
【问题描述】:
我正在构建一个编译器是为了好玩,我目前陷入了当多个全局变量或函数定义在单个文件 f.e. 中时如何解析的问题
int a;
int b;
int main(){
int c;
}
我的野牛文件(简化)如下所示:
ROOT : GLOB { printf("%s\n", "ACCEPTED" }
;
VAR_DEC // Assume this matches correctly
FUNC_DEF // Assume this matches correctly
GLOB_STMNT : VAR_DEC { }
| FUNC_DEF { }
;
GLOB_LIST : GLOB_LIST GLOB_STMNT { }
| GLOB_STMNT { }
;
GLOB : GLOB_LIST { }
;
我的问题是,它总是只会减少 firstvar 声明,然后打印接受。关于如何改进最后 3 条规则以减少所有 3 条全局语句的任何想法?
【问题讨论】:
-
为什么不为所有的规则做广告打印声明?它可以显示正在发生的事情。您还可以显示它发生的脚本吗?我们可能还想查看词法分析器定义。
-
@PaulOgilvie 我确实有打印语句,根据它们,一切都得到了正确的词法分析,语法几乎也相应地得到了解释。真的只是那一点造成了麻烦。
-
@PaulOgilvie 对不起,我必须道歉,你说得对,我在不同的规则中有一个错误。我忘了检查分号lol
-
为什么你认为它只是减少了第一个声明?它将按顺序解析(并减少)所有
GLOB_STMNT(不打印任何内容),然后(仅)减少ROOT并打印您的消息。
标签: c parsing compiler-construction grammar bison