編譯原理 - 實驗四 - yacc基本使用(bison)


一、介紹

只要在Unix環境中寫過程序,必定會邂逅神秘的Lex&YACC,就如GNU/Linux用戶所熟知的Flex&Bison,這里的Flex就是由Vern Paxon實現的一個Lex,Bison則是GNU版本的YACC,在此我們將統一稱呼這些程序為Lex和YACC,所以我們將用Flex和Bison來嘗試下我們的實例。

二、准備工作(win7)

①  下載flex和bison並安裝到D:\GnuWin32(盡量是根目錄)

②    由於我們使用的flex和bison都是GNU的工具,所以為了方便,采用的C/C++

編譯器也 采用GNU的編譯器GCC,當然我們需要的也是Windows版本的GCC了。所以選用了CodeBlocks編譯器

三、課本實例

①  按課本代碼輸入,並保存為yac1.y,並將其放到bison所在目錄

②  打開cmd命令行,然后進入D盤中bison所在目錄下,然后輸入命令行bison yac1.y對文件進行解析,生成yac1.tab.c文件

③  用CodeBlocks編譯器打開yac1.tab.c文件,進行編譯運行

④  測試結果:

   

四、遇到問題

①int yylex(void)函數中改為int yylex(),因為后面需要返回數值,void為空,則得不到結果

②void yyerror(char *s)改為int yyerror(char *s),必須和前面的類型統一

③mian()中的if(i=0)改為if(i!=1),不然無論對錯都一直會是提示錯誤


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM