freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

編譯原理報告(5)(編輯修改稿)

2025-04-19 12:06 本頁面
 

【文章內(nèi)容簡介】 hile(over1000amp。amp。over!=1) /*對原程序進行分析,直至結(jié)束符 */ { oneword=scaner()。 /*獲得一個新單詞*/ if(onewordsyn1000) printf((%d,%s),onewordsyn,onewordword)。 /*打印種別碼和單詞本身的值*/ over=onewordsyn。 } printf(\npress to exit:)。 scanf(%[^]s,input)。 /*按 退出程序*/ return 0。}實驗?zāi)康?) 設(shè)計并編制一個語法分析程序,加深對語法分析程序中遞歸下降分析方法的理解;2) 鞏固對代碼生成及報錯處理等理論的認識;3) 培養(yǎng)對完整系統(tǒng)獨立分析和設(shè)計的能力;4) 培養(yǎng)學(xué)生獨立編程的能力;實驗要求利用C語言編制遞歸下降分析程序,并對簡單語言進行語法分析。 待分析的簡單語法的語法用擴充的BNF表示如下:(1) 程序::=begin 語句串 end(2) 語句串::=語句{:語句}(3) 語句::= 賦值語句(4) 賦值語句::=ID := 表達式(5) 表達死::=項{+項|項}(6) 項::=因子{*因子|/因子}(7) 因子::=ID | NUM | ( 表達式 ) 語法分析程序的功能輸入單詞串,以””結(jié)束,如果是文法正確的句子,則輸出成功信息,打印“success”,否則輸出”error”例如: 輸入: begin a:=9。b:=0 end 輸出: success輸入: begin a=9 end 輸出: error語法分析程序的算法思想算法的基本任務(wù)是從字符串中表示的源程序中識別出具有獨立意義的單詞符號,并通過其基本文法,正確規(guī)約到開始符號。 全局變量的設(shè)置 在此程序中,需要設(shè)置兩個個全局變量: 關(guān)鍵字表retab[6]、當(dāng)前識別的種別號syn。 其中retab中元素為 “begin” “if” “then” “while” “do” “end”,在程序會掃描出標識符時,首先查關(guān)鍵字表。如果能找到匹配的單詞,則該單詞為關(guān)鍵字,否則為一般標識符。syn用于每一步掃描中scanner 的返回值。在整個語法分析程序中均需要使用該全局變量。 主程序main算法流程圖 掃描子程序scanner()的算法流程圖 遞歸下降分析程序示意圖 語句串分析程序yucu()的算法流程圖 statement語句分析算法流程圖 expression表達式分析算法流程圖 term分析函數(shù)算法流程圖 factor分析函數(shù)算法流程圖實驗結(jié)果3. 輸入begin a:=9。 x:= 2*3 end 結(jié)果如下4. 輸入begin a=9 end 結(jié)果如下實驗感想及總結(jié)本次實驗是進行語法分析實驗,編制了一個遞歸下降分析程序,實現(xiàn)了對語法分析程序所提供的單詞序列的語法檢查和結(jié)構(gòu)分析。通過本次實驗深刻了解了語法分析程序的功能是以詞法分析器生成的單詞符號序列作為輸入,根據(jù)語言的語法規(guī)則,識別出各種語法成分,并在分析過程中進行語法檢查,檢查所給單詞符號序列是否是該語言的文法的一個句子。若是,則以該句子的某種形式的語法樹作為輸出;若不是,則表明有錯誤,并指出錯誤的性質(zhì)和位置。在實驗中,只是按照課本所給的程序框架來進行代碼編寫是不能深刻理解語法分析的,對此我深有體會,所以一定要理解其真正的思想,才能夠明白具體實現(xiàn)的目的以及意義,在實驗中海油可以改進的地方,比如,可以使用yacc語法分析器來進行語法分析,這種方式比直接編寫程序更加簡潔方便,并且能夠處理不同的生成的單詞符號。源代碼include includeincludeincludechar GetChar(char *input,int *index,int length)。int ClearBlank(char *input,int (*index),int length)。int reserve(char *s)。void lrparser(char *input,int inputLength,int *index)。void yucu(char *input,int inputLength,int *index)。void factor(char *input,int inputLength,int *index)。void statement(char *input,int inputLength,int *index)。void expression(char *input,int inputLength,int *index)。void term(char *input,int inputLength,int *index)。const char *retab[6]= {begin,if,then,while,do,end}。 //關(guān)鍵字int syn=0。int myIsAlpha(char ch){ if(islower(ch)==2 || isupper(ch)==1) { return 1。 } else { return 0。 }}void scaner(char *input,int inputLength,int *index){ char s[256]=。 //保存當(dāng)前的字符 char ch=GetChar(input,index,inputLength)。 int nowPosition=0。 int j=0。 if(myIsAlpha(ch)==1) //如果是字母 { while(((ch=39。039。 amp。amp。 ch=39。939。) || (myIsAlpha(ch)==1 ) )amp。amp。 *index =inputLength) { s[nowPosition]=ch。 //添加到當(dāng)前字符串中 nowPosition++。 ch=GetChar(input,index,inputLength)。 } if((ch 39。039。 || ch39。939。) amp。amp。(myIsAlpha(ch)==0 ) )//進行回退操作,并輸出結(jié)果 { s[nowPosition]=39。\039。//添加結(jié)束標志 j=reserve(s)。 if(j==0) { syn=10。 } else { syn=j。 } (*index)。 return。 } else //超過范圍 { s[nowPosition++]=ch。 s[nowPosition]=39。\039。//添加結(jié)束標志 j=reserve(s)。 if(j==0) { syn=10。 } else { syn=j。 } getchar()。 exit(0)。 return。 } } else if(ch=39。039。 amp。amp。 ch=39。939。) //如果是數(shù)字 { while(ch=39。039。 amp。amp。 ch=39。939。amp。amp。 *index =inputLength) { s[nowPosition]=ch。 //添加到當(dāng)前字符串中 nowPosition++。
點擊復(fù)制文檔內(nèi)容
環(huán)評公示相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖片鄂ICP備17016276號-1