2012-05-04 29 views
2

我正在使用C,flex,bison编写有趣的汇编程序。我想添加宏,包含和重复块,并正在考虑使用单独的预处理阶段解析器来完成此操作。通过宏扩展跟踪原始行数

我的问题是,我如何跟踪原始源代码行号(和文件名)?这是为了产生有用的错误消息,漂亮的打印和生成调试信息。

预处理完成后,第二个解析器中的yylineno大概会在宏扩展等之后被偏移。

回答

5

您可以添加

;#file filename.asm 
;#line 5 

到预处理汇编所以

foo: 
PUSHREG(A,B,C) 
;--10 lines of code 
POPREG(A,B,C) 
set PC,POP 

变成

foo: 
;#file functionmacros.asm 
;#line 10 
set push,A 
set push,B 
set push,C 
;#file yourfile.asm 
;#line 5 
;--10 lines of code 
;#file functionmacros.asm 
;#line 30 
set C,pop 
set B,POP 
set C,POP 
;#file yourfile.asm 
;#line 16 
set PC,POP 
+1

这,顺便提一句,GCC的预处理器是怎么做的。 – unwind

+0

我明白了,加上当我倾倒它时,我可以得到一些合理的人类可读的东西。很好,谢谢。 – blueshift