main()之前的flex / bison分段错误

时间:2010-11-06 19:25:35

标签: c bison flex-lexer

我使用flex和bison写了一个简单的汇编程序。它做得很好,直到我做了一个小改动。在lex和yacc规范中是一个无害的附加规则。之后,每次运行它时都会抛出一个分段错误。我试图追踪这个seg错误的来源,但事实证明它发生在执行lex文件中的main之前。然后我删除了我做的添加并重新编译它,它仍然显示相同的错误。

怎么了?

我做了类似的事

  • 查找表,符号表,代码 生成器在单独的文件中
  • 导入上述文件的“.y”文件中的解析器
  • 导入“* .tab.h”文件的“.l”文件中的词法扫描程序
  • 链接lex.yy.c和parser.tab.c以生成可执行文件

先谢谢

2 个答案:

答案 0 :(得分:3)

$ cc -g whatever...
$ gdb a.out
(gdb) run
<boom>
(gdb)bt

如果答案不明显,请选择上面的整个序列并更新上面的问题。

顺便说一句,我的猜测是你已经改变了你构建它的方式。也许您应该只是将程序切换回hello,world,然后开始逐个添加其他组件。

答案 1 :(得分:1)

请提供更多信息,例如GDB回溯以及相应的弹性和野牛规则的代码。

我的一个调试技巧是将printf()语句放在flex规则中。例如,假设您希望新规则与THISLOOP: LWU R2, 0(R3)匹配。然后在flex中,将printf()放在与该bison规则匹配的任何规则中。但同样,没有任何代码,就无法进行调试。