编译原理 - 实验三 - 递归下降语法分析器的调试及扩展
一.?語法分析介紹
語法分析是編譯過程的核心部分,它的主要任務是按照程序語言的語法規則,從由詞法分析輸出的源程序符號串中識別出各類語法成分,同時進行語法檢查,為語義分析和代碼生成做準備。執行語法分析任務的程序叫語法分析程序或語法分析器。
二.?所實現的語義分析和代碼生成程序能處理什么語句
(1)簡單變量的聲明語句
(2)表達式語句
(3)if語句.
(4)while語句
(5)for語句
(6)write語句
(7)read語句
(8)do語句.
(9)處理過程調用和返回
三.實驗過程
①用VC6.0建立一個Win32 Console Application得空項目,然后輸入附錄C 語法分析程序的代碼(TESTparse)及主程序代碼(main)
②在建立一個文件將附錄B中的TESTscan()函數加到項目分析中
③編譯運行
?
④對do的修改:
int do_stat()
??? {
???? int es=0;
???? fscanf(fp,"%s%s/n",&token,&token1);
???? printf("%s%s/n",token,token1);
???? if(strcmp(token,"(")) return(es=5);
???? fscanf(fp,"%s%s/n",&token,&token1);
???? printf("%s%s/n",token,token1);
???? es=expression();
???? if(es>0) return(es);
???? if(strcmp(token,")")) return(es=6);
???? fscanf(fp,"%s%s/n",&token,&token1);
???? printf("%s%s/n",token,token1);
???? es=statement();
???? if(es>0)return(es);
??????? if(strcmp(token,"while")==0)
??????? {
??????? fscanf(fp,"%s%s/n",&token,&token1);
??????? printf("%s%s/n",token,token1);
???????? es=statement();
??????? if(es>0)return(es);
???????? }
? ???return(es);
????
???? }
⑤log_expr修改
char singleword[50]="+-*(){};,:!";???
?
char doubleword[10]="><=&&||";???
?
int log_expr(){
?????? int es=0;
?????? es=bool_expr();
?????? if(es>0) return(es);
?????? if(strcmp(token,"&&")==0 || strcmp(token,"||")==0
?????? )
?????? {
????????????? fscanf(fp,"%s%s\n",&token,&token1);
????????????? printf("%s%s\n",token,token1);
????????????? es=bool_expr();
????????????? if(es>0) return(es);
?????? }
?????? return(es);
}
四.遇到問題:
Link出錯
Linking...
LIBCD.lib(wincrt0.obj) : error LNK2001: unresolved external symbol _WinMain@16
Debug/test.exe : fatal error LNK1120: 1 unresolved externals
Error executing link.exe.
?
test.exe - 2 error(s), 0 warning(s)
?
這個文件中使用了WinMian而不是main作為入口函數。vc這時的默認設置是針對控制臺程序的。
解決方法:
1.進入project->setting->c/c++, 在category(第一行)中選擇preprocessor,在processor definitions中刪除_WINDOWS, 添加_CONSOLE
?
2.進入project->setting->Link, 在Project options中將/subsystem:windows.改為/subsystem:console
3.保存設置,Rebuild All.
簡單來說就是在建立項目時創建成了Win32 Application的,所以建議直接建立Win32 Console Application項目
?
轉載于:https://www.cnblogs.com/zzhili/p/4490617.html
與50位技術專家面對面20年技術見證,附贈技術全景圖總結
以上是生活随笔為你收集整理的编译原理 - 实验三 - 递归下降语法分析器的调试及扩展的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: websocket之一:websocke
- 下一篇: 比较全的 POM.xml