日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

编译原理 - 实验三 - 递归下降语法分析器的调试及扩展

發布時間:2025/3/20 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 编译原理 - 实验三 - 递归下降语法分析器的调试及扩展 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

.?語法分析介紹

語法分析是編譯過程的核心部分,它的主要任務是按照程序語言的語法規則,從由詞法分析輸出的源程序符號串中識別出各類語法成分,同時進行語法檢查,為語義分析和代碼生成做準備。執行語法分析任務的程序叫語法分析程序或語法分析器。

.?所實現的語義分析和代碼生成程序能處理什么語句

(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年技術見證,附贈技術全景圖

總結

以上是生活随笔為你收集整理的编译原理 - 实验三 - 递归下降语法分析器的调试及扩展的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。