【发布时间】:2012-01-19 08:08:05
【问题描述】:
我今天在玩 flex 和 bison,但有些奇怪的东西引起了我的注意。
localhost:c math4tots$ lex c.l
localhost:c math4tots$ yacc -d c.y
localhost:c math4tots$ rm c.l c.y
localhost:c math4tots$ gcc c.c lex.yy.c y.tab.c
c.y: In function ‘opr’:
c.y:120: error: ‘nodeType’ has no member named ‘oper’
我只通过了 c.c lex.yy.c 和 y.tab.c(c.h 和 y.tab.h 也包含在标题中),但 gcc 不知何故知道 c.l 和 c.y。事实上,即使在我删除了 c.l 和 c.y 之后,gcc 也知道代码中的错误在 c.y 的哪个位置。它是怎么做到的?
我觉得我在过去使用过的一些不同工具中看到过类似的东西,但我不记得它们是什么了。
【问题讨论】:
-
您应该始终将
-Wall传递给您的 GCC 编译器,并改进您的代码,直到不再收到警告为止。
标签: gcc bison yacc lex flex-lexer