技術(shù)文章
如何讓yylex后的代碼運(yùn)行
閱讀:191 發(fā)布時(shí)間:2021-12-27下面是利用lex寫(xiě)的一段代碼,
%%
.* printf(hello\n)
quit exit(0)
%%
main()
{
yylex()
printf(bye\n)
}
在沒(méi)有*明白lex編譯以后的文件流程的情況下,如何在程序結(jié)束時(shí)讓yylex()后的printf()打印出結(jié)果呢?我們執(zhí)行編譯成的可執(zhí)行文件會(huì)發(fā)現(xiàn)倘若我們只是用ctrl+c或quit退出程序是直接在當(dāng)前位置退出程序,后面的printf根本不會(huì)執(zhí)行。解決這個(gè)小問(wèn)題,下面我用一種間接的方法實(shí)現(xiàn)了它:
%{
#Include
#Include
jmp_buf position
%}
%%
quit longjmp(position,1)
.* printf(hello\n)
%%
main()
{
extern int function()
if(setjmp(position)==1)
goto quit
signal(SIGINT, function)
yylex()
quit:
printf(bye\n)
exit(0)
}
function()
{
longjmp(position,1)
}
以上代碼在AIX下調(diào)試通過(guò)