11計科編譯原理實驗報告11 41莊官學_第1頁
11計科編譯原理實驗報告11 41莊官學_第2頁
11計科編譯原理實驗報告11 41莊官學_第3頁
11計科編譯原理實驗報告11 41莊官學_第4頁
11計科編譯原理實驗報告11 41莊官學_第5頁
已閱讀5頁,還剩47頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

PL/O*********************IntIntIntintmain(void){inta,b,i;{return0;}}intmain(void){chara[10];inti;{}return}實驗二否否否否否否否#include<stdio.h>{inti;{{return}}return}{fprintf(fout,"1:基本字(保留字)2:運算符3:標識符4:常數 charintsym;//存放每個單詞的類別,1:基本字(保留字)2:運算符3:標識符4: chara[16];//臨時存數while((ch=fgetc(fin))!=-1讀入的字符是否存在{if(ch==||ch=='\t'||ch=='\n')//CH=空{}elseif(ch>='a'&&ch<='z'||ch>='A'&&ch<='Z')//CH是字母{intj;for(j=0;j<16;j++){//ID:=A}if(key(id))//ID{}{}}elseif(ch>='0'&&ch<='9')//CH是數字{int fsee(fprintf(fout,"%s\t\t%d\n",num,sym);/按指定格式寫入生成文件中去}elseif(ch=='+'||ch=='-'||ch=='*'||ch=='/'||ch=='=')//把該字符轉換成對應單詞,或拼復合單詞,將其類別送SYM中{fsee(}{{fprintf(fout,"%c%c\t\t%d\n",ch,ch1,sym);/}{}}{fsee(}{fsee(}}}intmain(void)主方法charfilein[10];charfileout[10];return0;} 詞法分析程序的構造—N濾空 是 將其類別送SYM中 N #include"stdio.h"#include"stdlib.h"#includeFILE*fp;charch; intstart=0;//起始狀態intflag=1;intsearch(char*{intp;for{if{}}

}intisletter(char{intif((ch>=97&&ch<=122||ch>=65&&ch<=90||ch=='_')//是字母return}intisdigit(char{intflag=0;if(ch>=48&&ch<=57)returnflag;}voidrecover(){}intfail(){inti;{casecasecasecasecasecasecase}return}voidnexttoken(){intj;{{case{}if(ch==''||ch=='\n'||ch=='\t'||{}else{}

case1:if(isletter(ch)||{}

case2:printf("(1,case{}{}case4:{}else{}{}

case5:{}{}

case6:{}else{}{}

case7:if(ch=='+'||ch=='-{}{}

case8:{}{}

case9:{}

case10:printf("(2,case{}

case12:{}else{}{

}case13:{}

case14:{}

case15:printf("(2,case{}case{}

case18:printf("(2,case19:{}

case20:{}{}case21:{}elseif(ch=='0'||ch=='t'||ch=='n'||ch=='r'||{}

casecase{}{}

case{}{}

case25:{}{}

casecase{}else{}elseif(ch=='-{}else{}else{}else{}else{}else{}else{}else{}else{}

case28:{}

case29:printf("(4,casecase{}case34:{}

case37:case{}else{{if(temp==EOF||ch==EOF)}while(temp!='*'||if(temp=='*'&&ch=='/')}

case42:caseif(ch=='='||{}

case47:{}

case{}

case54:{}

case57:{}

caseif(ch==':'||ch==','||ch==';'||ch=='('||ch==')'||ch=='{'||ch=='}'||ch=='['||ch==']'||ch=='#'){}{}

printf("sysnaxerror:case61:}}}int{{{}}return}實驗四給定某一文法,試構造其算符優先矩陣(或LL(1)矩陣或SLR(1)矩陣),并編制語法分例如:給定文法G:E→T給出句子i+i*i(i+i)*i上托棧頂符號放入若產生式為X→x1x2...xn按逆序即X∈VTX#include"stdio.h"#include"stdlib.h"#include"string.h"typedefstruct{char*de;//存儲產生式char*re;//要替換的表達式typedefstruct{char*elem;inttop;intsize;ET[7][6StackasEget(chara,charr){inti;intreturn}voidinitStack(Stack{}voidpush(Stack*S,char{{printf("StackOverflow!\n");}}charpop(Stack{char{return0;}returnx;}chartop(Stack*S){char{return0;}returnx;}voidprint(Stack*S){inti;unsignedintj;printf("}void{int{}}charch;intint{{}{chara;Eelem;if(elem.de!="WA&&{{}}}return}表示Q進α棧;POP(σ,B)表示從σ棧出棧;NEXT表示讀下一符號。名字()#PUSH(α,△輸入棧或結果棧是否有NY棧是否都是YN判斷輸入棧頂是否是字YN確定輸入串運算確定運算符棧中計算棧中的優先棧還是結果棧以#include<stdio.h>#include<string.h>typedefstructstack{charch[40];inttop;stack*push(stack*s,char{s->ch[s-returns;}charpop(stack{charch;s->top--returnch;}chartop(stack{}intpriority(char{{case'#':return-case'+':case'-':return1;case'*':case'/':returncase'@':returncase'(':returncase')':return}return}voidbegin(char{stackp

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論