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

正文內(nèi)容

編譯原理試驗(yàn)手冊(cè)-展示頁(yè)

2025-07-08 16:44本頁(yè)面
  

【正文】 */ %} %token NAME EQ AGE %%你可能會(huì)覺(jué)得 YYSTYPE 有點(diǎn)奇怪。 Age 是數(shù)字。在文件解析的例子中我們感興趣的是這些標(biāo)記:name, equal sign, 和 age。 lexer (Lex) 一般返回這些標(biāo)記。還可以包含頭文件。 在看 Yacc 程序的每一段時(shí),我們將為我們的例子編寫(xiě)一個(gè)語(yǔ)法文件。 我們將解析一個(gè)格式為 姓名 = 年齡的文件作為例子,來(lái)說(shuō)明語(yǔ)法規(guī)則。 用 Yacc 編寫(xiě)語(yǔ)法如同 Lex 一樣, 一個(gè) Yacc 程序也用雙百分號(hào)分為三段。 編譯 Yacc 生成的代碼以及其他相關(guān)的源文件。 編寫(xiě)一個(gè)函數(shù),通過(guò)調(diào)用 yyparse() 來(lái)開(kāi)始解析。 編寫(xiě)一個(gè)詞法分析器來(lái)處理輸入并將標(biāo)記傳遞給解析器。用 Yacc 來(lái)創(chuàng)建一個(gè)編譯器包括四個(gè)步驟:通過(guò)在語(yǔ)法文件上運(yùn)行 Yacc 生成一個(gè)解析器。按照慣例,它們都是小寫(xiě)。lexer 返回命名標(biāo)記。字符串標(biāo)記 : 寫(xiě)法與 C 的字符串常量相同。字符標(biāo)記: 字符常量的寫(xiě)法與 C 相同。終端符號(hào)有三種類型:命名標(biāo)記: 這些由 %token 標(biāo)識(shí)符來(lái)定義。(如 I care. See spot run.)所以在我們這里,標(biāo)記本身來(lái)自語(yǔ)言(Lex),并且標(biāo)記序列允許用 Yacc 來(lái)指定這些標(biāo)記(標(biāo)記序列也叫語(yǔ)法)。為了使用這些標(biāo)記造一個(gè)語(yǔ)法正確的句子,你的結(jié)構(gòu)必須符合一定的規(guī)則。為了更加說(shuō)清這一概念,讓我們以英語(yǔ)為例。Yacc 語(yǔ)法文件包括這一語(yǔ)法規(guī)范。如果你在查看標(biāo)記序列,你可能想在這一序列出現(xiàn)時(shí)執(zhí)行某一動(dòng)作。編譯行如下調(diào)用 Yacc 編譯器: Bison options filename ending with .y在進(jìn)一步闡述以前,讓我們復(fù)習(xí)一下什么是語(yǔ)法。它用巴科斯范式(BNF, Backus Naur Form)來(lái)書(shū)寫(xiě)。 Yacc 的 GNU 版叫做 Bison。 對(duì) Lex 的討論就到這里。 方法是使用 yyin 文件指針(見(jiàn)上表)指向不同的文件,直到所有的文件都被解析。 因此它可以用來(lái)解析多個(gè)文件。 yywrap() 這一函數(shù)在文件(或輸入)的末尾調(diào)用。) Lex 函數(shù)yylex() 這一函數(shù)開(kāi)始分析。 yylineno 提供當(dāng)前的行數(shù)信息。 yytext 匹配模式的文本存儲(chǔ)在這一變量中(char*)。 yyout FILE* 類型。Lex 變量yyin FILE* 類型。下表中列出了一些變量和函數(shù),以及它們的使用。 n 不打印 v 的匯總。 t 寫(xiě)入 程序來(lái)代替標(biāo)準(zhǔn)輸出。它還可以用解析器來(lái)生成可執(zhí)行程序,或者在鏈接步驟中通過(guò)選項(xiàng)杔l 包含 Lex 庫(kù)。將它們?nèi)拷Y(jié)合起來(lái).l 文件是 Lex 的掃描器。 }上一節(jié)我們討論了 Lex 編程的基本元素,它將幫助你編寫(xiě)簡(jiǎn)單的詞法分析程序。 /* start the analysis*/ printf( No of words: %d\n, wordCount)。我們將在 高級(jí) Lex 中探討這一問(wèn)題。 其中之一就是 yywrap。注意這一段必須包括 yywrap() 函數(shù)。字?jǐn)?shù)統(tǒng)計(jì)程序中的 Lex 規(guī)則 {words} { wordCount++。(我們將使用 C 來(lái)定義標(biāo)記匹配后的動(dòng)作。\.\] numbers ([09])+ delim [ \n\t] whitespace {delim}+ words {chars}+ %%兩個(gè)百分號(hào)標(biāo)記指出了 Lex 程序中這一段的結(jié)束和三段中第二段的開(kāi)始。字?jǐn)?shù)統(tǒng)計(jì)程序的聲明 %{ int wordCount = 0。這里我們將為字?jǐn)?shù)統(tǒng)計(jì)程序聲明一個(gè)整型變量,來(lái)保存程序統(tǒng)計(jì)出來(lái)的字?jǐn)?shù)。 那么,回到字?jǐn)?shù)統(tǒng)計(jì)的 Lex 程序,讓我們看一下程序不同段的構(gòu)成。 例如, 第三段中一般都有 main() 函數(shù)?,F(xiàn)在讓我們來(lái)看一看 Lex 可以理解的程序格式。 注意: 如果掃描器是用 Yacc 開(kāi)發(fā)的解析器的一部分,只需要進(jìn)行第一步和第二步。在這一文件上運(yùn)行 Lex,生成掃描器的 C 代碼。我們的第一個(gè)任務(wù)就是說(shuō)明如何聲明標(biāo)記。(下表中給出了標(biāo)記和表達(dá)式的例子。 Lex 中的標(biāo)記聲明類似 C 中的變量名。 A{1,2}shis+ 匹配 AAshis, Ashis, AAshi, Ashi。( ) 將一系列常規(guī)表達(dá)式分組。如果在匹配的模版中的“/”后跟有后續(xù)表達(dá)式,只匹配模版中“/”前面的部分。元字符具有。| 表達(dá)式間的邏輯或。同樣用來(lái)覆蓋字符在此表中定義的特殊意義,只取字符的本意。 例如: A{1,3} 表示 A 可能出現(xiàn)1次或3次。 $ 作為模式的最后一個(gè)字符匹配一行的結(jié)尾。+ 匹配1個(gè)或者多個(gè)上述模式。例如: [abC] 匹配 a, b, 和 C中的任何一個(gè)。匹配括號(hào)內(nèi)的任意 字符。例如:AZ 指從 A 到 Z 之間的所有字符。.匹配任意字符,除了 \n。 下面定義了 Lex 中使用的一些標(biāo)記并給出了幾個(gè)典型的例子。表達(dá)式由符號(hào)組成。這些文件被編譯為詞法分析器的可執(zhí)行版本。Lex 和 C 是強(qiáng)耦合的。如果能夠找到一個(gè)匹配的模式,Lex 就執(zhí)行相關(guān)的動(dòng)作(可能包括返回一個(gè)標(biāo)記)。當(dāng) Lex 接收到文件或文本形式的輸入時(shí),它試圖將文本與常規(guī)表達(dá)式進(jìn)行匹配。一種匹配的常規(guī)表達(dá)式可能會(huì)包含相關(guān)的動(dòng)作。掃描器是一種識(shí)別文本中的詞匯模式的程序。 基本知識(shí)在開(kāi)始我們的實(shí)驗(yàn)之前,.Lex 快速入門:Lex 代表 Lexical Analyzar。同時(shí),在平時(shí)小測(cè)和期末考試中,會(huì)考察與實(shí)驗(yàn)相關(guān)的內(nèi)容。擴(kuò)展部分在整個(gè)實(shí)驗(yàn)完成后酌情統(tǒng)一加分。2. 評(píng)分標(biāo)準(zhǔn)實(shí)驗(yàn)部分在總成績(jī)中占20%。此外,還請(qǐng)?zhí)峁┮粋€(gè)測(cè)試文檔test,說(shuō)明你的擴(kuò)展能夠處理的輸入,以便助教在測(cè)試時(shí)設(shè)計(jì)相應(yīng)的測(cè)試文件。其中的Source子目錄中是擴(kuò)展后的程序代碼。Extension目錄是可選的。Test目錄中應(yīng)包括我們給出的所有測(cè)試文件及其標(biāo)準(zhǔn)輸出。Base目錄中應(yīng)當(dāng)包含實(shí)現(xiàn)了基本要求的程序代碼。如果對(duì)實(shí)驗(yàn)做了擴(kuò)展,在文檔還要詳細(xì)說(shuō)明擴(kuò)展實(shí)現(xiàn)的功能及實(shí)現(xiàn)方法。在文檔中請(qǐng)寫(xiě)明姓名、班號(hào)、學(xué)號(hào)、Email等個(gè)人信息,以便遇到問(wèn)題時(shí)可以及時(shí)與你聯(lián)系。最后生成TINY語(yǔ)言的編譯器。這四部分分別稱之為PPPPPPPP4,: 編譯程序的流程匯編代碼(PP4)詞法分析(PP1)TINY源程序語(yǔ)義分析(PP3)語(yǔ)法分析(PP2)二、 實(shí)驗(yàn)環(huán)境Windows操作系統(tǒng),集成調(diào)試環(huán)境采用Microsoft Visual C++。TINY語(yǔ)言匯編程序 編譯程序的功能TINY源程序編譯程序整個(gè)編譯器又分為詞法分析、語(yǔ)法分析、語(yǔ)義分析、匯編代碼生成四部分。一、 實(shí)驗(yàn)內(nèi)容本學(xué)期的編譯實(shí)驗(yàn)內(nèi)容是實(shí)現(xiàn)一個(gè)簡(jiǎn)單的TINY語(yǔ)言的編譯器。編譯原理實(shí)驗(yàn)手冊(cè)編譯原理實(shí)驗(yàn)手冊(cè) 實(shí)驗(yàn)介紹本實(shí)驗(yàn)面向的是本科階段的編譯原理課程設(shè)計(jì),主要應(yīng)用lexamp。yacc來(lái)實(shí)現(xiàn)我們自定義的一種Tiny語(yǔ)言的編譯器。這個(gè)編譯器的輸入是TINY語(yǔ)言源代碼,輸出為自定義匯編語(yǔ)言。其中大家編碼實(shí)現(xiàn)這四部分。編程語(yǔ)言是Lex掃描程序生成器(Flex),Yacc分析生成器(Bison)。 三、 實(shí)驗(yàn)要求1. 提交實(shí)驗(yàn): 請(qǐng)大家按照如下目錄結(jié)構(gòu)整理自己的程序和文檔DocumentsSource[Extension][Test][Source]Base Documents目錄中應(yīng)當(dāng)有一個(gè)設(shè)計(jì)文檔readme。此外,文檔中還要寫(xiě)明程序?qū)崿F(xiàn)的功能,主要數(shù)據(jù)結(jié)構(gòu)的設(shè)計(jì),重要算法的流程,以及實(shí)驗(yàn)中遇到的問(wèn)題和解決方法。需要特別注意的是,如果在自己的實(shí)驗(yàn)程序中借用了別人的算法或代碼,必須在文檔中明確說(shuō)明,并在源程序中加以注釋,否則按照抄襲論處。其中的Source子目錄中是程序代碼,這個(gè)目錄中應(yīng)包括程序運(yùn)行需要的所有文件(包括那些不需要你修改的文件)。無(wú)論你是否對(duì)程序進(jìn)行擴(kuò)展,這個(gè)目錄的內(nèi)容都是必須要有的。如果你對(duì)程序進(jìn)行了擴(kuò)展,請(qǐng)將擴(kuò)展版本的源代碼和測(cè)試文件放在這個(gè)目錄中。Test子目錄中是你針對(duì)擴(kuò)展部分提供的測(cè)試文件及相應(yīng)的輸出。最后,請(qǐng)將上述所有的程序文件打包成zip文件,zip文件名為“”,例如“”,并上載到服務(wù)器目錄下或用郵件交上來(lái)。評(píng)分的主要標(biāo)準(zhǔn)是程序輸出與標(biāo)準(zhǔn)輸出相符合的程度。3. 檢查方式在大家提交實(shí)驗(yàn)后,我們將對(duì)提交的程序進(jìn)行測(cè)試。對(duì)于那些實(shí)驗(yàn)題目回答得很差的同學(xué),我們將下調(diào)其實(shí)驗(yàn)成績(jī)。Lex 是一種生成掃描器的工具。這些詞匯模式(或者常規(guī)表達(dá)式)在一種特殊的句子結(jié)構(gòu)中定義,這個(gè)我們一會(huì)兒就要討論。這一動(dòng)作可能還包括返回一個(gè)標(biāo)記。它一次讀入一個(gè)輸入字符,直到找到一個(gè)匹配的模式。另一方面,如果沒(méi)有可以匹配的常規(guī)表達(dá)式,將會(huì)停止進(jìn)一步的處理,Lex 將顯示一個(gè)錯(cuò)誤消息。一個(gè) .l 文件(Lex 文件具有 .l 的擴(kuò)展名)通過(guò) lex 公用程序來(lái)傳遞,并生成 C 的輸出文件。Lex 的常規(guī)表達(dá)式常規(guī)表達(dá)式是一種使用元語(yǔ)言的模式描述。符號(hào)一般是字符和數(shù)字,但是 Lex 中還有一些具有特殊含義的其他標(biāo)記。用 Lex 定義常規(guī)表達(dá)式字符含義AZ, 09, az構(gòu)成了部分模式的字符和數(shù)字。用來(lái)指定范圍。[ ]一個(gè)字符集合。如果第一個(gè)字符是 ^ 那么它表示否定模式。 * 匹配0個(gè)或者多個(gè)上述的模式。? 匹配0個(gè)或1個(gè)上述模式。{ }指出一個(gè)模式可能出現(xiàn)的次數(shù)。\用來(lái)轉(zhuǎn)義元字符。 ^否定。一些符號(hào)字符的字面含義。/向前匹配。如:如果輸入 A01,那么在模版 A0/1 中的 A0 是匹配的。常規(guī)表達(dá)式舉例:常規(guī)表達(dá)式 含義 joke[rs] 匹配 jokes 或 joker。 (A[be])+ 匹配在A出現(xiàn)位置后跟隨的從b到e的所有字符中的0個(gè)或1個(gè)。每個(gè)標(biāo)記都有一個(gè)相關(guān)的表達(dá)式。)使用這個(gè)表中的例子,我們就可以編一個(gè)字?jǐn)?shù)統(tǒng)計(jì)的程序了。標(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ù)字)* Lex 編程Lex 編程可以分為三步:以 Lex 可以理解的格式指定模式相關(guān)的動(dòng)作。編譯和鏈接 C 代碼,生成可執(zhí)行的掃描器。關(guān)于這一特殊問(wèn)題的幫助請(qǐng)閱讀 Yacc 和 將 Lex 和 Yacc 結(jié)合起來(lái)部分。一個(gè) Lex 程序分為三個(gè)段:第一段是 C 和 Lex 的全局聲明,第二段包括模式(C 代碼),第三段是補(bǔ)充的 C 函數(shù)。這些段以%%來(lái)分界。C 和 Lex 的全局聲明這一段中我們可以增加 C 變量聲明。我們還將進(jìn)行 Lex 的標(biāo)記聲明。 %} chars [Azaz\39。Lex 的模式匹配規(guī)則讓我們看一下 Lex 描述我們所要匹配的標(biāo)記的規(guī)則。)繼續(xù)看我們的字?jǐn)?shù)統(tǒng)計(jì)程序,下面是標(biāo)記匹配的規(guī)則。 /* increase the word count by one*/ } {whitespace} { /* do nothing*/ } {numbers} { /* one may want to add some processing here*/ } %%C 代碼Lex 編程的第三段,也就是最后一段覆蓋了 C 的函數(shù)聲明(有時(shí)是主函數(shù))。 Lex 有一套可供使用的函數(shù)和變量。一般來(lái)說(shuō),yywrap() 的定義如下例。字?jǐn)?shù)統(tǒng)計(jì)程序的 C 代碼段 void main() { yylex()。 } int yywrap() { return 1。 在高級(jí) Lex 這一節(jié)中我們將討論 Lex 提供的函數(shù),這樣你就能編寫(xiě)更加復(fù)雜的程序了。它在 Lex 程序中如下表示: flex file 這生成了 文件,它可以用 C 編譯器來(lái)進(jìn)行編譯。這里是一些 Lex 的標(biāo)志:c 表示 C 動(dòng)作,它是缺省的。 v 提供一個(gè)兩行的統(tǒng)計(jì)匯總。 高級(jí) LexLex 有幾個(gè)函數(shù)和變量提供了不同的信息,可以用來(lái)編譯實(shí)現(xiàn)復(fù)雜函數(shù)的程序。 詳盡的列表請(qǐng)參考 Lex 或 Flex 手冊(cè)(見(jiàn)Flex手冊(cè))。 它指向 lexer 正在解析的當(dāng)前文件。 它指向記錄 lexer ,yyin和yyout 都指向標(biāo)準(zhǔn)輸入和輸出。 yyleng 給出匹配模式的長(zhǎng)度。(lexer不一定支持。 它由 Lex 自動(dòng)生成。如果函數(shù)的返回值是1,就停止解析。代碼可以寫(xiě)在第三段,這就能夠解析多個(gè)文件。最后,yywrap() 可以返回 1 來(lái)表示解析的結(jié)束。Yacc快速入門:Yacc 代表 Yet Another Compiler Compiler。它是一種工具,將任何一種編程語(yǔ)言的所有語(yǔ)法翻譯成針對(duì)此種語(yǔ)言的 Yacc語(yǔ)法解析器。按照慣例,Yacc 文件有 .y 后綴。在上一節(jié)中,我們看到 Lex 從輸入序列中識(shí)別標(biāo)記(token)。這種情況下有效序列的規(guī)范稱為語(yǔ)法。它還包含
點(diǎn)擊復(fù)制文檔內(nèi)容
高考資料相關(guān)推薦
文庫(kù)吧 www.dybbs8.com
備案圖鄂ICP備17016276號(hào)-1