




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
本文格式為Word版,下載可任意編輯——算符優(yōu)先分析算法
設(shè)計(jì)一個(gè)算符優(yōu)先分析器,理解優(yōu)先分析方法的原理。重點(diǎn)和難點(diǎn):本試驗(yàn)的重點(diǎn)是理解優(yōu)先分析方法的原理;難點(diǎn)是如何構(gòu)造算符優(yōu)先關(guān)系。
數(shù)學(xué)與計(jì)算機(jī)學(xué)院編譯原理試驗(yàn)報(bào)告
年級(jí)09軟工學(xué)號(hào)姓名成績(jī)專業(yè)軟件工程試驗(yàn)地點(diǎn)主樓指導(dǎo)教師湛燕
試驗(yàn)項(xiàng)目算符優(yōu)先關(guān)系算法試驗(yàn)日期2023.6.6
一、試驗(yàn)?zāi)康暮鸵?/p>
設(shè)計(jì)一個(gè)算符優(yōu)先分析器,理解優(yōu)先分析方法的原理。
重點(diǎn)和難點(diǎn):本試驗(yàn)的重點(diǎn)是理解優(yōu)先分析方法的原理;難點(diǎn)是如何構(gòu)造算符優(yōu)先關(guān)系。
二、試驗(yàn)內(nèi)容
使用算符優(yōu)先分析算法分析下面的文法:
E’→#E#
E→E+T|T
T→T*F|F
F→P^F|P
P→(E)|i
其中i可以看作是一個(gè)終結(jié)符,無(wú)需作詞法分析。具體要求如下:
1、假使輸入符號(hào)串為正確句子,顯示分析步驟,包括分析棧中的內(nèi)容、優(yōu)先關(guān)系、輸入符號(hào)串的變化狀況;
2、假使輸入符號(hào)串不是正確句子,則指示出錯(cuò)位置。
三、程序設(shè)計(jì)
全局變量有一下幾個(gè):
staticstringinput;//記錄輸入串
chars[20];//棧
inttop=-1;//棧頂指針
有三個(gè)函數(shù):
intanalyze(stringinput);//分析輸入的串是否符合標(biāo)準(zhǔn)
voidprocess();//進(jìn)行歸約的函數(shù)
intmain()
input是一個(gè)全局變量,記錄輸入串,用analyze(input)分析輸入的是不是符合標(biāo)準(zhǔn)的字符串,(例如“i+i*i^(i+i)〞)假使不符合標(biāo)準(zhǔn),提醒用戶重新輸入。
進(jìn)行歸約的函數(shù)主要思想是:先構(gòu)造優(yōu)先關(guān)系矩陣,有“〞,“〞,“=〞和空格四種關(guān)系。Chara記錄棧中最高位的終結(jié)符,假使棧中是#E+E,則a的賦
設(shè)計(jì)一個(gè)算符優(yōu)先分析器,理解優(yōu)先分析方法的原理。重點(diǎn)和難點(diǎn):本試驗(yàn)的重點(diǎn)是理解優(yōu)先分析方法的原理;難點(diǎn)是如何構(gòu)造算符優(yōu)先關(guān)系。
值是“+〞,假使形如“#E+〞或“#E+i〞則a賦值“+〞或“i〞。charnowchar記錄當(dāng)前的字符。a與nowchar依照算符優(yōu)先關(guān)系矩陣找出優(yōu)先關(guān)系。假使優(yōu)先關(guān)系是“〞,則進(jìn)行移進(jìn);假使優(yōu)先關(guān)系是“〞,則進(jìn)行歸約;假使是“=〞,則去掉括號(hào)或分析成功。
五、代碼和截圖
自己編寫(xiě)代碼如下:
#includeiostream
#includestring
usingnamespacestd;
staticstringinput;//輸入串
chars[20];//棧
inttop=-1;//棧頂指針
charVT[7]={'+','*','^','i','(',')','#'};//終結(jié)符
staticcharmatrix[7][7]={
'','','','','','','',
'','','','','','','',
'','','','','','','',
'','','','','','','',
'','','','','','=','',
'','','','','','','',
'','','','','','','='};//優(yōu)先關(guān)系矩陣,不存在優(yōu)先關(guān)系時(shí)為空格
intanalyze(stringinput);//分析輸入的串是否符合標(biāo)準(zhǔn)
voidprocess();//規(guī)約
intmain()
{
//cout輸入一個(gè)符號(hào)串!endl;
intflag=1;
while(flag==1)
{
cout輸入一個(gè)符號(hào)串!endl;
cininput;
if(analyze(input)==0)
flag=1;
else
flag=0;
}
cout**********************************************************
設(shè)計(jì)一個(gè)算符優(yōu)先分析器,理解優(yōu)先分析方法的原理。重點(diǎn)和難點(diǎn):本試驗(yàn)的重點(diǎn)是理解優(yōu)先分析方法的原理;難點(diǎn)是如何構(gòu)造算符優(yōu)先關(guān)系。
*endl;
cout表達(dá)式文法算符優(yōu)先關(guān)系表endl;
coutendl;
for(inti=0;i8;i++)
{
coutVT[i];
}
coutendl;
coutendl;
for(i=0;i7;i++)
{
coutVT[i];
for(intj=0;j7;j++)
{
cout;
coutmatrix[i][j];
}
coutendl;
}
//coutendl;
cout***********************************************************endl;
cout對(duì)輸入串input的算符優(yōu)先分析過(guò)程如下:endl;process();
coutendl;
//cout棧優(yōu)先關(guān)系當(dāng)前符號(hào)剩余輸入串移進(jìn)或規(guī)約endl;
coutendl;
coutendl;
coutendl;
return1;
}
intanalyze(stringinput)//分析輸入的串是否符合標(biāo)準(zhǔn)
{
//coutinput[0]input[1]input[2]input[3]endl;intlen=input.length();//獲得輸入串長(zhǎng)度
//coutlenendl;
intflag=0;
//chart;//
//chartemp;
for(inti=0;ilen;i++)
{
設(shè)計(jì)一個(gè)算符優(yōu)先分析器,理解優(yōu)先分析方法的原理。重點(diǎn)和難點(diǎn):本試驗(yàn)的重點(diǎn)是理解優(yōu)先分析方法的原理;難點(diǎn)是如何構(gòu)造算符優(yōu)先關(guān)系。
if((input[len-1]!='i')(input[len-1]!=')')){flag=1;break;}//coutinput[len-1]endl;switch(input[i]){case'(':if(i==0){}elseif(input[i-1]=='^'||'+'||'*'){}elseflag=1;break;case')':if(input[i-1]=='i'){}elseflag=1;break;case'*':if(input[i-1]=='i'||')'){}//coutiflagendl;elseflag=1;break;case'^':if(input[i-1]=='i'||')'){}//coutiflagendl;elseflag=1;break;case'+':if(input[i-1]=='i'||')'){}//coutiflagendl;elseflag=1;break;case'i':{if(input[len-1]=='i')flag=1;else{}
設(shè)計(jì)一個(gè)算符優(yōu)先分析器,理解優(yōu)先分析方法的原理。重點(diǎn)和難點(diǎn):本試驗(yàn)的重點(diǎn)是理解優(yōu)先分析方法的原理;難點(diǎn)是如何構(gòu)造算符優(yōu)先關(guān)系。
}//coutiflag輸入的是正確的字符串!endl;break;
default:
//coutflagendl;
flag=1;
break;
}
}
//intflag=0;
if(flag==0)
{cout輸入的是正確的句子!endl;return1;}
else
{cout輸入的是錯(cuò)誤的句子!endl;return0;}
}
voidprocess()//規(guī)約
{
//coutsendl;
//couttop;
introw;//列
intline;//行
s[++top]='#';
//input=i+i*(i+i);//coutinputendl;
input=input+'#';//
//coutinputendl;
//chartemp;
inti=0;
intk=0;
intg;
chara;
//charnowchar;
//++top;
//s[top]=input[i];
//couts[top-1]endl;
//coutinput[i]endl;
//couts[top]endl;
intflag=0;
charnowchar;//記錄當(dāng)前字符
coutendl;
cout棧優(yōu)先關(guān)系當(dāng)前符號(hào)剩余輸入串進(jìn)或歸約endl;
nowchar=input[0];
while(flag==0)//s[2]!='#'移
設(shè)計(jì)一個(gè)算符優(yōu)先分析器,理解優(yōu)先分析方法的原理。重點(diǎn)和難點(diǎn):本試驗(yàn)的重點(diǎn)是理解優(yōu)先分析方法的原理;難點(diǎn)是如何構(gòu)造算符優(yōu)先關(guān)系。
{//k++;
if(s[top]=='E')
a=s[top-1];
else
a=s[top];
for(intn=0;n7;n++)//記錄行
{
if(a==VT[n])
line=n;
}
for(n=0;n7;n++)//記錄列
{
if(nowchar==VT[n])
row=n;
}
charcompare;
for(intm=0;m7;m++)
for(n=0;n7;n++)
{
if((line==m)(row==n))
compare=matrix[m][n];
}
intj;
//i=top;
///cout******compare******endl;
switch(compare)
{
case'':
{
//cout;
for(j=0;j=top;j++)
couts[j];//cout@a;//coutlinerow;couts[top]acompare;
//cout(棧);
cout;
coutinput[i];
for(j=strlen(s);jinput.length();j++)
coutinput[j];
cout移進(jìn);//10-strlen(s)
s[++top]=input[i];//移進(jìn)
if(nowchar=='#')
設(shè)計(jì)一個(gè)算符優(yōu)先分析器,理解優(yōu)先分析方法的原理。重點(diǎn)和難點(diǎn):本試驗(yàn)的重點(diǎn)是理解優(yōu)先分析方法的原理;難點(diǎn)是如何構(gòu)造算符優(yōu)先關(guān)系。
{}elsenowchar=input[strlen(s)-1];//coutnowchar;coutendl;//cout(剩余輸入串)endl;//coutendl;i++;break;}case''://cout;for(j=0;j=top;j++)couts[j];//cout@a;///couts[top]a;cout;coutinput[i];//cout;for(j=strlen(s);jinput.length();j++)coutinput[j];//coutendl;coutendl;if(s[top]=='E'){top=top-2;s[top]='E';}elseif(s[top]==')'){top=top-2;s[top]='E';}elses[top]='E';//歸約//couts[top];//if((s[top]=='E')||(s[top]==')'))//i++;if(nowchar=='#'){}elsenowchar=input[strlen(s)-1];cout歸約endl;break;case'=':if(s[top-1]=='('
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 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ì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 部編版一年級(jí)語(yǔ)文上冊(cè)開(kāi)學(xué)第一課
- 玻璃幕墻工程承包合同
- 黃藍(lán)扁平風(fēng)志愿者服務(wù)模板
- 領(lǐng)導(dǎo)力發(fā)展成為高效能領(lǐng)導(dǎo)者
- 革新理念開(kāi)啟新紀(jì)元-新能源車技術(shù)變革的研究與應(yīng)用展望
- 音樂(lè)產(chǎn)業(yè)中的數(shù)據(jù)挖掘與價(jià)值發(fā)現(xiàn)
- 顛覆傳統(tǒng)模式新零售技術(shù)推動(dòng)商業(yè)體驗(yàn)升級(jí)
- 顧客體驗(yàn)為核心的零售營(yíng)銷策略優(yōu)化
- 防災(zāi)減災(zāi)安全教育培訓(xùn)
- 青少年傳統(tǒng)文化與藝術(shù)培訓(xùn)的未來(lái)展望
- 2024年中國(guó)農(nóng)業(yè)銀行深圳市分行招聘筆試真題
- 配電柜維護(hù)保養(yǎng)施工方案范文
- 2025年山東東營(yíng)市事業(yè)單位上半年統(tǒng)考(7.26)歷年自考難、易點(diǎn)模擬試卷(共500題附帶答案詳解)
- 貿(mào)易安全意識(shí)培訓(xùn)
- 管理學(xué)基礎(chǔ)-形考任務(wù)二-國(guó)開(kāi)-參考資料
- 大數(shù)據(jù)分析在運(yùn)維中的應(yīng)用-第1篇-深度研究
- 投標(biāo)標(biāo)前協(xié)議書(shū)范本
- 2025年中國(guó)鱈魚(yú)行業(yè)市場(chǎng)全景評(píng)估及發(fā)展戰(zhàn)略規(guī)劃報(bào)告
- 交流激勵(lì)下的鋸齒環(huán)狀表面介質(zhì)阻擋放電特性
- 全面指南:2024年醫(yī)學(xué)整形美容醫(yī)院?jiǎn)T工手冊(cè)
- 2025年度食用菌產(chǎn)業(yè)園區(qū)公共設(shè)施運(yùn)營(yíng)管理合同3篇
評(píng)論
0/150
提交評(píng)論