


下載本文檔
版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、數(shù)學(xué)與信息編譯原理實(shí)驗(yàn)報(bào)告三實(shí)驗(yàn)名稱(chēng):語(yǔ)法分析:5113班級(jí):132 班姓名:學(xué)號(hào):1329210045分?jǐn)?shù)A+96-100A90-95A-85-89B+80-84B75-79B-70-74C+67-69C63-66C-60-62D0-59語(yǔ)法分析一、實(shí)驗(yàn)?zāi)康乃阈g(shù)表的文法是(你可以根據(jù)需要適當(dāng)改變):EE+E|E-E|E*E|E/E|(E)|i根據(jù)算符優(yōu)先分析法,參照書(shū)本 107 頁(yè)表 6.4 算符優(yōu)先關(guān)系表,將表進(jìn)行語(yǔ)法分析,一個(gè)表是否正確。二、實(shí)驗(yàn)環(huán)境操作系統(tǒng):windows 編寫(xiě)環(huán)境:visual c+ 編寫(xiě)語(yǔ)言:c 語(yǔ)言三、實(shí)驗(yàn)內(nèi)容程序輸入/輸出示例:如參考 C 語(yǔ)言的運(yùn)算符。輸入如下
2、表(1)10; 輸出:正確(2)1+2;輸出:正確(3)(1+2)/3+4-(5+6/7);輸出:正確(4)(1-2)/3+4輸出:錯(cuò)誤(5)1+2-3+(*4/5)輸出:錯(cuò)誤實(shí)驗(yàn)步驟:1.簡(jiǎn)述你的程序?qū)崿F(xiàn)的功能是什么?(以分號(hào)為結(jié)束)和輸出結(jié)果:根據(jù)算符優(yōu)先分析法,參照書(shū)本 107 頁(yè)表 6.4 算符優(yōu)先關(guān)系表,將表斷一個(gè)表是否正確進(jìn)行語(yǔ)法分析,判算術(shù)表的文法:EE+E|E-E|E*E|E/E|(E)|i2.程序的模塊描述。優(yōu)先關(guān)系:可以對(duì)應(yīng)的左右推導(dǎo)關(guān)系以此歸約和句型是不是可推導(dǎo):是否非終結(jié)符:是否終結(jié)符:完成在文件中輸入輸出:四、實(shí)驗(yàn)結(jié)果文件建立輸入測(cè)試數(shù)據(jù)保存在同目錄的文本文件 tes
3、tin.txt 中,保存格式:表表.行;行;預(yù)期的輸出保存在同目錄的文本文件 testout.txt 中,保存格式:表行;正確/錯(cuò)誤表行;正確/錯(cuò)誤五、實(shí)驗(yàn)小結(jié)本次實(shí)驗(yàn)中將 C+代碼改成 C 語(yǔ)言代碼,需要用到大一學(xué)到的 C 語(yǔ)言,但是已經(jīng)一年多沒(méi)有使用 C 語(yǔ)言了,生疏了很多,而要將代碼轉(zhuǎn)變成 C 語(yǔ)言首先就要先看懂 C+的代碼,修改過(guò)也出現(xiàn)了挺多的難點(diǎn)和錯(cuò)誤,C+可以直接定義類(lèi)而 C 語(yǔ)言則沒(méi)有這個(gè)功能,要將 C+定義出的類(lèi)改成用 C 語(yǔ)言實(shí)現(xiàn),這個(gè)一開(kāi)始出現(xiàn)了挺多錯(cuò)誤之后查了附錄:源代碼#include<string.h> #include<stdio.h>有修改
4、了才正確。char result100;char table88='>','>','<','<','<','>','<','>','>','>','<','<','<','>','<','>','>','>
5、9;,'>','>','<','>','<','>','>','>','>','>','<','>','<','>','<','<','<','<','<','=',
6、'<','-','>','>','>','>','-','>','-','>','>','>','>','>','-','>','-','>','<','<','<',
7、'<','<','-','<','Y'char key64="E+E","E-E","E*E","E/E","(E)","i"char v6='E','E','E','E','E','E'int all;char search(char c,char d)/是否非終結(jié)符int m,n;
8、 if(c='+') m=0;else if(c='-') m=1; else if(c='*') m=2; else if(c='/') m=3; else if(c='(') m=4;else if(c=')') m=5; else if(c='i') m=6; else if(c='#') m=7; else return '-' if(d='+') n=0;else if(d='-') n=1; else if(
9、d='*') n=2; else if(d='/') n=3; else if(d='(') n=4;else if(d=')') n=5; else if(d='i') n=6; else if(d='#') n=7; else return '-' return tablemn;bool svt(char c)/是不是終結(jié)符bool b=true; if(c='+') ;else if(c='-');else if(c='*');e
10、lse if(c='/');else if(c='(');else if(c=')');else if(c='i');else if(c='#');else b=false; return b;void operatorp()char s100; char a,Q; int k,j,i,l;char input100,temp100; int len;strcpy(input,result); len=strlen(input); inputlen='#'inputlen+1='0'
11、printf("步驟t棧t優(yōu)先關(guān)系t當(dāng)前符號(hào)t剩余輸入串移進(jìn)或歸約n"); k=1;sk='#'i=1;do/若無(wú)#就繼續(xù)a=input0; len=0;for(l=1;inputl;l+)/從剩余字符中取頭上一個(gè)templen+=inputl;templen='0' strcpy(input,temp); if(svt(sk)j=k;else /不是終結(jié)符在往下找j=k-1;while (search(sj,a)='>')/while循環(huán)做歸約分析bool flag; printf("(%d)t",
12、i);len=0;for(l=1;l<k+1;l+)templen+=sl; templen='0'/棧printf("%st",temp);/優(yōu)先關(guān)系/當(dāng)前符號(hào)/剩余輸入串printf("%>t");printf("%ct",a); printf("%st",input); i+;for(;)Q=sj;if(svt(sj-1) j=j-1; else j=j-2; if(search(sj,Q)='<')printf("歸約tn");/歸約br
13、eak;len=0;for(l=j+1;l<k+1;l+) templen+=sl; templen='0'flag=false; for(l=0;l<6;l+)if(strcmp(temp,keyl)=0)k=j+1; sk=vl; flag=true; break;if (!flag)printf("(%d)t",i);printf("%s不是任何產(chǎn)生式的右部,不能進(jìn)行歸約!n",temp); return ;printf("(%d)t",i);len=0; for(l=1;l<k+1;l+) t
14、emplen+=sl;templen='0'printf("%st",temp); if(search(sj,a)='<')printf("<t");printf("%ct",a); printf("%st",input); puts("移進(jìn)");i+;k=k+1;sk=a;/移進(jìn)else if(search(sj,a)='=')printf("=t");printf("%ct",a); prin
15、tf("%st",input); puts("移進(jìn)");i+;k=k+1;sk=a;/移進(jìn)else if(search(sj,a)='Y')printf("=t");printf("%ct",a); printf("%st",input); puts("接受");i+;elseprintf("-t");printf("%ct",a); printf("%st",input); puts("出
16、錯(cuò)"); return ;/出錯(cuò)while(a!='#');/棧/優(yōu)先關(guān)系/當(dāng)前符號(hào)/剩余輸入串/優(yōu)先關(guān)系/當(dāng)前符號(hào)/剩余輸入串/優(yōu)先關(guān)系/當(dāng)前符號(hào)/剩余輸入串/優(yōu)先關(guān)系/當(dāng)前符號(hào)/剩余輸入串int main()freopen("d:/testin.in","r",stdin);/ 在D盤(pán)新建一個(gè)文件testin.infreopen("d:/testout.out","w",stdout);/在D盤(pán)新建一個(gè)輸出文件testout.out int t=5;while(t-)char inp100;bool sign = false;printf("請(qǐng)輸入字符:");scanf("%s",inp);puts("&
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 湘美版美術(shù)三年級(jí)上冊(cè)第3課 方方圓圓 課件
- 吉林省大安縣聯(lián)考2025屆七下英語(yǔ)期末監(jiān)測(cè)模擬試題含答案
- 中級(jí)老年護(hù)理睡眠照料
- 電力安全生產(chǎn)知識(shí)
- 大師書(shū)法培訓(xùn)
- 2025年兒童心理健康教育師考試題及答案
- 2025年電子商務(wù)專(zhuān)業(yè)畢業(yè)生實(shí)踐能力測(cè)評(píng)試題及答案
- 2025年博物館管理專(zhuān)業(yè)考研試題及答案
- 2025年安全工程及管理專(zhuān)業(yè)考核試題及答案
- 2025年創(chuàng)業(yè)管理與創(chuàng)新實(shí)踐考試試題及答案
- 兒童學(xué)習(xí)習(xí)慣養(yǎng)成與學(xué)習(xí)能力提升
- 水閘地基施工方案
- 《建立合適邊界:親子教育課件》
- 課件:《教育強(qiáng)國(guó)建設(shè)規(guī)劃綱要(2024-2035年)》學(xué)習(xí)宣講
- 2023年遺傳學(xué)考試題庫(kù)(含答案)
- 課題申報(bào)參考:基于多模態(tài)大數(shù)據(jù)的大學(xué)生心理危機(jī)預(yù)警機(jī)制研究
- 個(gè)人征信培訓(xùn)
- 2024光伏并網(wǎng)柜技術(shù)規(guī)范
- 基本藥物政策培訓(xùn)
- 安徽省宣城市皖東南初中六校2024-2025學(xué)年上學(xué)期七年級(jí)期中考試數(shù)學(xué)試卷
- 滬教版英語(yǔ)小學(xué)四年級(jí)上學(xué)期試卷與參考答案(2024-2025學(xué)年)
評(píng)論
0/150
提交評(píng)論