#include#include#include#include#include#include">
簡單c語言編譯器(編譯原理)

簡單c語言編譯器(編譯原理)

ID:19680321

大小:95.00 KB

頁數(shù):26頁

時間:2018-10-05

簡單c語言編譯器(編譯原理)_第1頁
簡單c語言編譯器(編譯原理)_第2頁
簡單c語言編譯器(編譯原理)_第3頁
簡單c語言編譯器(編譯原理)_第4頁
簡單c語言編譯器(編譯原理)_第5頁
資源描述:

《簡單c語言編譯器(編譯原理)》由會員上傳分享,免費在線閱讀,更多相關(guān)內(nèi)容在工程資料-天天文庫

1、專業(yè)資料#include#include#include#include#include#include#include#include#defineNULL0structStack//棧結(jié)構(gòu)體:序號、內(nèi)容、連接下一結(jié)點指針{intnum;charname;structStack*next;};structGuiyue//規(guī)則集結(jié)構(gòu)體:序號、規(guī)則長

2、度、符號、連接下一結(jié)點指針{intnum;intcount;charname;structGuiyue*next;};structRelation//分析表結(jié)構(gòu)體:狀態(tài)序號、對應(yīng)符號列、操作類型的對應(yīng)序號、操作類型、連接下一結(jié)點指針{intline_States;charrank_Letter;intrelationship;charname;structRelation*next;};structSign//符號表結(jié)構(gòu)體:自變量名、標(biāo)識類型、連接下一結(jié)點指針{charname[20];charkind;s

3、tructSign*next;};structWord//單詞表結(jié)構(gòu)體:單詞名字、標(biāo)識類型、狀態(tài)、序號、行號、連接符號表指針、連接下一結(jié)點指針{charname[20];學(xué)習(xí)資料專業(yè)資料charmark_name;intstate;intnum;intline;structSign*link;structWord*next;};FILE*fp1;//文件指針introw=1,line[10000],Lin[300],w_num;//字符行變量、字符行、單詞所在行、字符數(shù)charbuffer[10000];/

4、/字符串緩沖區(qū)Stack*MarkPush(Stack*ip,charmark,intI_i)//壓棧{Stack*s;s=(Stack*)malloc(sizeof(Stack));s->name=mark;s->num=I_i;s->next=ip;ip=s;returnip;}voidMarkPop(Stack*ip)//出棧{Stack*q;charname;name=ip->name;q=ip->next;if(ip->next!=NULL){ip->name=ip->next->name;ip-

5、>num=ip->next->num;ip->next=ip->next->next;free(q);}}intjudge(charch)//接收ch判斷字符,變量flag返回字符類別{intflag;if(ch=='!'

6、

7、ch=='$'

8、

9、ch=='&'

10、

11、ch=='*'

12、

13、ch=='('

14、

15、ch==')'

16、

17、ch=='-'

18、

19、ch=='_'

20、

21、ch=='+'

22、

23、ch=='='

24、

25、ch=='

26、'

27、

28、ch=='{'

29、

30、ch=='}'

31、

32、ch=='['

33、

34、ch==']'

35、

36、ch==';'

37、

38、ch==':'

39、

40、

41、ch=='"'

42、

43、ch=='<'

44、

45、ch==','

46、

47、ch=='>'

48、

49、ch=='.'

50、

51、ch=='/'

52、

53、ch==''')flag=1;elseif('0'<=ch&&ch<='9')學(xué)習(xí)資料專業(yè)資料flag=2;elseif(('a'<=ch&&ch<='z')

54、

55、('A'<=ch&&ch<='Z'))flag=3;elseif(ch=='')flag=4;elseif(ch=='')flag=5;elseif(ch=='?')flag=6;elseif(feof(fp1))flag=7;//結(jié)

56、束elseflag=0;//illegalcharacterreturn(flag);}//======================================================================================================//詞法分析函數(shù):voidscan()//數(shù)據(jù)傳遞:形參fp接收指向文本文件頭的文件指針;//全局變量buffer與line對應(yīng)保存源文件字符及其行號,char_num保存字符總數(shù)。voidscan(){charch

57、;intflag,j=0,i=-1;while(!feof(fp1)){ch=fgetc(fp1);flag=judge(ch);printf("%c",ch);//顯示打開的文件if(flag==1

58、

59、flag==2

60、

61、flag==3){i++;buffer[i]=ch;line[i]=row;}elseif(flag==4){i++;buffer[i]='?';line[i]=row;}elseif(flag

當(dāng)前文檔最多預(yù)覽五頁,下載文檔查看全文

此文檔下載收益歸作者所有

當(dāng)前文檔最多預(yù)覽五頁,下載文檔查看全文
溫馨提示:
1. 部分包含數(shù)學(xué)公式或PPT動畫的文件,查看預(yù)覽時可能會顯示錯亂或異常,文件下載后無此問題,請放心下載。
2. 本文檔由用戶上傳,版權(quán)歸屬用戶,天天文庫負(fù)責(zé)整理代發(fā)布。如果您對本文檔版權(quán)有爭議請及時聯(lián)系客服。
3. 下載前請仔細(xì)閱讀文檔內(nèi)容,確認(rèn)文檔內(nèi)容符合您的需求后進行下載,若出現(xiàn)內(nèi)容與標(biāo)題不符可向本站投訴處理。
4. 下載文檔時可能由于網(wǎng)絡(luò)波動等原因無法下載或下載錯誤,付費完成后未能成功下載的用戶請聯(lián)系客服處理。