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

正文內(nèi)容

[工學(xué)]編譯原理實(shí)驗(yàn)指導(dǎo)書(shū)-資料下載頁(yè)

2025-08-17 01:31本頁(yè)面
  

【正文】 strcpy(strTemp,)。 Scaner()。 Match(_SYN_ASSIGN,=)。 strcpy(eplace,Expression())。 Match(_SYN_SEMICOLON,。)。 gen(=,eplace,strTemp)。 *nChain=0。 break。 //處理if語(yǔ)句 case _SYN_IF: Match(_SYN_IF,if)。 Match(_SYN_LPAREN,()。 Condition(amp。ntc,amp。nfc)。 bp(ntc,nNXQ)。 Match(_SYN_RPAREN,))。 Statement_Block(amp。nChainTemp)。 *nChain=merg(nChainTemp,nfc)。 break。 //處理while語(yǔ)句 case _SYN_WHILE: Match(_SYN_WHILE,while)。 nWQUAD=nNXQ。 Match(_SYN_LPAREN,()。 Condition(amp。ntc,amp。nfc)。 bp(ntc,nNXQ)。 Match(_SYN_RPAREN,))。 Statement_Block(amp。nChainTemp)。 bp(nChainTemp,nWQUAD)。 sprintf(strTemp,%d,nWQUAD)。 gen(j,strTemp)。 *nChain=nfc。 break。 } return。}void Statement_Sequence(int *nChain)//語(yǔ)句序列分析函數(shù){ Statement(nChain)。 while(==_SYN_ID ||==_SYN_IF ||==_SYN_WHILE) { bp(*nChain,nNXQ)。 Statement(nChain)。 } bp(*nChain,nNXQ)。 return。}void Statement_Block(int *nChain)//分析語(yǔ)句塊函數(shù),語(yǔ)名塊是{……}語(yǔ)句{ Match(_SYN_LEFTBRACKET2,{)。 Statement_Sequence(nChain)。 //上行分析語(yǔ)句塊中語(yǔ)句序列,即花括號(hào)中的部分 Match(_SYN_RIGHTBRACKET2,})。}void Parse(void)//語(yǔ)法語(yǔ)義分析函數(shù){ int nChain。 Scaner()。 Match(_SYN_MAIN,main)。 Match(_SYN_LPAREN,()。 Match(_SYN_RPAREN,))。 Statement_Block(amp。nChain)。 if(!=_SYN_END) fprintf(fw,源程序非正常結(jié)束)。 PrintQuaternion()。}void lrparse(void)//語(yǔ)法語(yǔ)義分析函數(shù),主要是先處理準(zhǔn)備和收尾工作,//中間調(diào)用parse()進(jìn)行語(yǔ)法語(yǔ)義工作{ pQuad=(QUATERNION *)malloc(strlen(strSource)*sizeof(QUATERNION))。 nSuffix=0。 nfc=ntc=nNXQ=1。 fw=fopen(strFileName,w)。 Parse()。 fclose(fw)。}void main(){ char str[]=main(){i=2*3+4。if(i10) {j=3。}while (j0) {k=1。}}。 //注:上行為待編譯源程序 char filename[200]。 //以下為全局變量賦初值 gnColumn=gnRow=1。 gnLocate=gnLocateStart=0。 nNXQ=0。 strSource=str。 //打開(kāi)輸出即單詞、四元組存放的文件 strcpy(filename,d:\\c\\piler\\)。 strFileName=filename。 //注意只要將文件名傳給strFileName,文件實(shí)際在 //函數(shù)lrparse中打開(kāi)。 lrparse()。}實(shí)驗(yàn)二 LEX詞法分析程序生成器一、實(shí)驗(yàn)?zāi)康牧私獠⒄莆帐褂肔EX詞法分析程序生成器,加深對(duì)詞法分析原理的理解。二、實(shí)驗(yàn)要求、內(nèi)容及學(xué)時(shí)通過(guò)對(duì)詞法分析程序LEX的實(shí)驗(yàn),能夠編寫(xiě)并生成編譯程序,學(xué)會(huì)正確運(yùn)用語(yǔ)法規(guī)則,實(shí)驗(yàn)報(bào)告要求給出EBNF形式的語(yǔ)法表示、測(cè)試程序的源程序、目標(biāo)程序和運(yùn)行結(jié)果。學(xué)時(shí):2三、實(shí)驗(yàn)環(huán)境DOS或Windows操作系統(tǒng) TURBO C C++四、實(shí)驗(yàn)參考參考實(shí)例詳見(jiàn)教材第十三章。下面補(bǔ)充一點(diǎn)資料:Lex 編程可以分為三步:1、以 Lex 可以理解的格式指定模式相關(guān)的動(dòng)作。 2、在這一文件上運(yùn)行 fLex,生成掃描器的 C 代碼。 3、編譯和鏈接 C 代碼,生成可執(zhí)行的掃描器。 注意: 如果掃描器是用 Yacc 開(kāi)發(fā)的解析器的一部分,只需要進(jìn)行第一步和第二步。關(guān)于這一特殊問(wèn)題的幫助請(qǐng)閱讀 Yacc和 將 Lex 和 Yacc 結(jié)合起來(lái)部分。 Lex 的常規(guī)表達(dá)式常規(guī)表達(dá)式是一種使用元語(yǔ)言的模式描述。表達(dá)式由符號(hào)組成。符號(hào)一般是字符和數(shù)字,但是 Lex 中還有一些具有特殊含義的其他標(biāo)記。 下面給出定義了 Lex 中使用的一些標(biāo)記。用 Lex 定義常規(guī)表達(dá)式字符 含義 AZ, 09, az 構(gòu)成了部分模式的字符和數(shù)字。 . 匹配任意字符,除了 \n。 用來(lái)指定范圍。例如:AZ 指從 A 到 Z 之間的所有字符。 [ ] 一個(gè)字符集合。匹配括號(hào)內(nèi)的 任意 字符。如果第一個(gè)字符是 ^ 那么它表示否定模式。例如: [abC] 匹配 a, b, 和 C中的任何一個(gè)。 * 匹配 0個(gè)或者多個(gè)上述的模式。 + 匹配 1個(gè)或者多個(gè)上述模式。 ? 匹配 0個(gè)或1個(gè)上述模式。 $ 作為模式的最后一個(gè)字符匹配一行的結(jié)尾。 { } 指出一個(gè)模式可能出現(xiàn)的次數(shù)。 例如: A{1,3} 表示 A 可能出現(xiàn)1次或3次。 \ 用來(lái)轉(zhuǎn)義元字符。同樣用來(lái)覆蓋字符在此表中定義的特殊意義,只取字符的本意。 ^ 否定。 | 表達(dá)式間的邏輯或。 一些符號(hào) 字符的字面含義。元字符具有。 / 向前匹配。如果在匹配的模版中的“/”后跟有后續(xù)表達(dá)式,只匹配模版中“/”前面的部分。如:如果輸入 A01,那么在模版 A0/1 中的 A0 是匹配的。 ( ) 將一系列常規(guī)表達(dá)式分組。 常規(guī)表達(dá)式 含義 joke[rs] 匹配 jokes 或 joker。 A{1,2}shis+ 匹配 AAshis, Ashis, AAshi, Ashi。 (A[be])+ 匹配在 A 出現(xiàn)位置后跟隨的從 b 到 e 的所有字符中的 0 個(gè)或 1個(gè)。 Lex 中的標(biāo)記聲明類(lèi)似 C 中的變量名。每個(gè)標(biāo)記都有一個(gè)相關(guān)的表達(dá)式。(下表中給出了標(biāo)記和表達(dá)式的例子。)使用這個(gè)表中的例子,我們就可以編一個(gè)字?jǐn)?shù)統(tǒng)計(jì)的程序了。我們的第一個(gè)任務(wù)就是說(shuō)明如何聲明標(biāo)記。標(biāo)記聲明舉例標(biāo)記 相關(guān)表達(dá)式 含義 數(shù)字(number) ([09])+ 1個(gè)或多個(gè)數(shù)字 字符(chars) [AZaz] 任意字符 空格(blank) 一個(gè)空格 字(word) (chars)+ 1個(gè)或多個(gè) chars 變量(variable) (字符)+(數(shù)字)*(字符)*(數(shù)字)* 現(xiàn)在讓我們來(lái)看一看 Lex 可以理解的程序格式。一個(gè) Lex 程序分為三個(gè)段:第一段是 C 和 Lex 的全局聲明,第二段包括模式(C 代碼),第三段是補(bǔ)充的 C 函數(shù)。 例如, 第三段中一般都有 main() 函數(shù)。這些段以%%來(lái)分界。 實(shí)驗(yàn)三 YACC語(yǔ)法分析程序生成器一、實(shí)驗(yàn)?zāi)康牧私獠⒄莆帐褂肶ACC詞法分析程序生成器,加深對(duì)詞法分析原理的理解。二、實(shí)驗(yàn)要求、內(nèi)容及學(xué)時(shí)1.通過(guò)對(duì)語(yǔ)法分析程序YACC的實(shí)驗(yàn),能夠編寫(xiě)并生成編譯程序,學(xué)會(huì)正確運(yùn)用語(yǔ)法規(guī)則,實(shí)驗(yàn)報(bào)告要求給出測(cè)試程序的源程序、目標(biāo)程序和運(yùn)行結(jié)果。2.能應(yīng)用優(yōu)先關(guān)系和結(jié)合性解決二義性和沖突問(wèn)題,合理使用出錯(cuò)處理程序?qū)W時(shí):2三、實(shí)驗(yàn)環(huán)境DOS或Windows操作系統(tǒng)TURBO C C++四、實(shí)驗(yàn)參考:參考實(shí)例詳見(jiàn)教材第十四單,下面補(bǔ)充一點(diǎn)資料:將 Lex 與 Yacc 結(jié)合起來(lái)一個(gè)程序通常在每次返回一個(gè)標(biāo)記時(shí)都要調(diào)用 yylex() 函數(shù)。只有在文件結(jié)束或者出現(xiàn)錯(cuò)誤標(biāo)記時(shí)才會(huì)終止。 一個(gè)由 Yacc 生成的解析器調(diào)用 yylex() 函數(shù)來(lái)獲得標(biāo)記。 yylex() 可以由 Lex 來(lái)生成或完全由自己來(lái)編寫(xiě)。 對(duì)于由 Lex 生成的 lexer 來(lái)說(shuō),要和 Yacc 結(jié)合使用,每當(dāng) Lex 中匹配一個(gè)模式時(shí)都必須返回一個(gè)標(biāo)記。 因此 Lex 中匹配模式時(shí)的動(dòng)作一般格式為: {pattern} { /* do smthg*/ return TOKEN_NAME。 } 于是 Yacc 就會(huì)獲得返回的標(biāo)記。當(dāng) Yacc 編譯一個(gè)帶有 _d 標(biāo)記的 .y文件時(shí),會(huì)生成一個(gè)頭文件,它對(duì)每個(gè)標(biāo)記都有 define 的定義。 如果 Lex 和 Yacc 一起使用的話,頭文件必須在相應(yīng)的 Lex 文件 .lex中的 C 聲明段中包括。
點(diǎn)擊復(fù)制文檔內(nèi)容
教學(xué)課件相關(guān)推薦
文庫(kù)吧 www.dybbs8.com
備案圖鄂ICP備17016276號(hào)-1