编译原理 - 实验三 - 递归下降语法分析器的调试及扩展
一.?語法分析介紹
語法分析是編譯過程的核心部分,它的主要任務(wù)是按照程序語言的語法規(guī)則,從由詞法分析輸出的源程序符號串中識別出各類語法成分,同時進(jìn)行語法檢查,為語義分析和代碼生成做準(zhǔn)備。執(zhí)行語法分析任務(wù)的程序叫語法分析程序或語法分析器。
二.?所實(shí)現(xiàn)的語義分析和代碼生成程序能處理什么語句
(1)簡單變量的聲明語句
(2)表達(dá)式語句
(3)if語句.
(4)while語句
(5)for語句
(6)write語句
(7)read語句
(8)do語句.
(9)處理過程調(diào)用和返回
三.實(shí)驗(yàn)過程
①用VC6.0建立一個Win32 Console Application得空項(xiàng)目,然后輸入附錄C 語法分析程序的代碼(TESTparse)及主程序代碼(main)
②在建立一個文件將附錄B中的TESTscan()函數(shù)加到項(xiàng)目分析中
③編譯運(yùn)行
?
④對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作為入口函數(shù)。vc這時的默認(rèn)設(shè)置是針對控制臺程序的。
解決方法:
1.進(jìn)入project->setting->c/c++, 在category(第一行)中選擇preprocessor,在processor definitions中刪除_WINDOWS, 添加_CONSOLE
?
2.進(jìn)入project->setting->Link, 在Project options中將/subsystem:windows.改為/subsystem:console
3.保存設(shè)置,Rebuild All.
簡單來說就是在建立項(xiàng)目時創(chuàng)建成了Win32 Application的,所以建議直接建立Win32 Console Application項(xiàng)目
?
轉(zhuǎn)載于:https://www.cnblogs.com/zzhili/p/4490617.html
與50位技術(shù)專家面對面20年技術(shù)見證,附贈技術(shù)全景圖總結(jié)
以上是生活随笔為你收集整理的编译原理 - 实验三 - 递归下降语法分析器的调试及扩展的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: websocket之一:websocke
- 下一篇: 比较全的 POM.xml