999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

快速掌握編譯器設(shè)計(jì)方法

2018-06-14 07:15:14賈麗娟
軟件 2018年5期
關(guān)鍵詞:規(guī)則語言

劉 濤,賈麗娟,于 峰

(1. 哈爾濱理工大學(xué) 計(jì)算機(jī)學(xué)院,黑龍江 哈爾濱 150000;2. 哈爾濱理工大學(xué) 理學(xué)院,黑龍江 哈爾濱 150000)

0 引言

現(xiàn)實(shí)世界依賴著程序設(shè)計(jì)語言設(shè)計(jì)[3]開發(fā)各種軟件,解決各領(lǐng)域諸多問題。作為一名理工科院校學(xué)生,學(xué)會(huì)用高級(jí)語言編程是其應(yīng)該具備的最基本的能力,這就需要所用軟件平臺(tái)[8]要提供較好的編譯器[1]。軟件開發(fā)商為我們提供了各種平臺(tái)的不同語言[9]的編譯器,但有些設(shè)備(如手機(jī)或 PAD)的編譯器能力較弱,需要后期的開發(fā)者對(duì)其進(jìn)行改進(jìn)或重新編寫。

簡(jiǎn)單講,編譯器就是將"一種語言(通常為高級(jí)語言)"翻譯為"另一種語言(通常為低級(jí)語言)"的程序。其中主要涵蓋了最重要的詞法分析和語法分析過程,再之后進(jìn)行語義分析生成中間代碼及優(yōu)化,生成目標(biāo)代碼。

因此,寫好一個(gè)編譯器程序的前提是要了解編譯器的運(yùn)行原理[4],并掌握它的詞法分析技術(shù)與語法分析技術(shù)[5]。編譯的宗旨是在翻譯一個(gè)源程序的過程中,編譯器所做的所有翻譯工作都不能改變被翻譯的源程序的含義,這是我們需要遵循的根本原則。

通過對(duì)下面對(duì)編譯器的詞法分析器和語法分析器的分析,再寫編譯器編程就方便了許多。

1 詞法分析器[1]

詞法分析器的功能輸入源程序,按照構(gòu)詞規(guī)則分解成一系列單詞符號(hào)。單詞是語言中具有獨(dú)立意義的最小單位,包括關(guān)鍵字、標(biāo)識(shí)符、運(yùn)算符、界符和常量等。

首先介紹一下詞法分析器,詞法分析器讀入組成源程序的字符流,并且將它們組織成有意義的詞素序列。每組成一個(gè)詞法單元(Token)就將其傳給語法分詞器,例如:

int i=10;

那么詞法分析器所要做的就是將int ,i ,= ,10分別識(shí)別然后結(jié)合各詞素對(duì)應(yīng)的屬性(例如10,作為一個(gè)NUM,10就是它的屬性value)打包成詞法單元傳送給語法分析器。

圖1 編譯流程Fig.1 Compile process

詞法分析器需要和符號(hào)表進(jìn)行交互,當(dāng)詞法分析器發(fā)現(xiàn)一個(gè)標(biāo)識(shí)符的詞素‘a(chǎn)dan’時(shí),它會(huì)詢問符號(hào)表是否已經(jīng)存在這一詞素,如果沒有就創(chuàng)建新的詞法單元,并將其加入到符號(hào)表中,如果已經(jīng)存在就讀取標(biāo)識(shí)符的信息,以確定向語法分析器傳送哪個(gè)詞法單元。同時(shí)詞法分析器除了負(fù)責(zé)讀取源程序,它還會(huì)執(zhí)行另外兩大任務(wù):

(1)過濾空白和注釋

(2)將編譯器生成的錯(cuò)誤信息與源程序的位置聯(lián)系起來。

在詞法分析器中通常會(huì)用正則表達(dá)式倆描述一個(gè)標(biāo)識(shí)符,對(duì)于正則表達(dá)式的規(guī)則就不做過多的敘述,只在這列舉一下用正則表達(dá)式在表示的詞法單元的模式[1]:

表1 詞法單元的模式Tab.1 The pattern of the lexical unit

知道怎么去表達(dá)一個(gè)標(biāo)識(shí)符之后我們就借助狀態(tài)轉(zhuǎn)移[1]圖來模擬一下詞法分析器運(yùn)行的過程[1,5]:

getToken():查看對(duì)應(yīng)于剛找到的詞素的符號(hào)表?xiàng)l目,并且根據(jù)符號(hào)表中的信息返回該詞素所代表的詞法單元名字—要么是 id,要么是一個(gè)初始化時(shí)就加入到符號(hào)表的關(guān)鍵字。

圖2 r elop狀態(tài)轉(zhuǎn)移圖Fig.2 Relop state transition diagram

圖3 ID 和關(guān)鍵字的狀態(tài)轉(zhuǎn)移圖Fig.3 State transfer graph of ID and keywords

圖4 無符號(hào)數(shù)字的狀態(tài)轉(zhuǎn)移圖Fig.4 S tate transition diagram of unsigned digits

2 語法分析器[1]

接下來就介紹一下語法分析器,在設(shè)計(jì)語言時(shí),每種程序設(shè)計(jì)語言都有一組精確地規(guī)則來描述良構(gòu)程序的語法結(jié)構(gòu),程序設(shè)計(jì)語言的語法可以用上上下文無關(guān)文法來描述,文法為語言設(shè)計(jì)者和編譯器的編寫者都提供了很大的便利,有很多很多的文法可以用來很好的描述程序設(shè)計(jì)語法,我們使用預(yù)測(cè)分析算法[1]來實(shí)現(xiàn)一個(gè)預(yù)測(cè)分析表[1]:

expression代表表達(dá)式,term代表項(xiàng)factor代表因子:

Expression ->expression + term | term;

term -> term* factor | factor

factor ->NUMBER | (expression)

以上這個(gè)文法指明了運(yùn)算符的結(jié)合性和優(yōu)先級(jí),該文法屬于LR(第一個(gè)L代表從左向右掃描輸入,第二個(gè)R代表出聲最左推導(dǎo))文法,適用于自底向上[1]語法分析,但是其為左遞歸[1,2],不能用于自頂向下[1]的語法分析,所以推出以上文法的非左遞歸版本(可用于自頂向下的語法分析):

expression代表表達(dá)式,term代表項(xiàng)factor代表因子;而expression'和term'是為了解決左遞歸的情況,所以以下給出非左遞歸的表達(dá)式文法:

(1)statements -> “空” | expression; statements

(2)expression-> term expression'

(3)expression'-> +term expression' | “空”

(4)term -> factor term'

(5)term' -> * factor term' | “空”

(6)factor -> number | (expression)

這組修改后的語法規(guī)則比修改前更加難以理解,但能保證,這組規(guī)則不會(huì)出現(xiàn)修改前那樣導(dǎo)致解析死循環(huán)[1,7]。語法規(guī)則中的“空”表示結(jié)束,什么都不做。例如如果我們輸入一個(gè)空字符串“”給語法解析器,那么規(guī)則 1中就以“空”來解析輸入的空字符串,其結(jié)果就是程序什么都不做,直接返回,在程序中“空”相當(dāng)于return語句。

我們用表達(dá)式:1 + 2 ; 看看語法規(guī)則形成的解析樹[1]是怎樣的:

我們以語句id+id*id為例子換一種方式運(yùn)用棧來通過每步移入歸約[2]實(shí)現(xiàn),如表2所示。

給出表驅(qū)動(dòng)的預(yù)測(cè)語法分析:

輸入:一個(gè)串W,文法G的預(yù)測(cè)分析表M。

輸出:W在L(G)中,輸出的W的第一個(gè)最左推導(dǎo),否則錯(cuò)誤提示。

方法:

最初,語法分析器格局:輸入緩沖區(qū)的是W$,而 G的開始符號(hào)S位于棧頂,他的下面是$。一下程序使用預(yù)測(cè)分析表M生成了處理這個(gè)輸入的預(yù)測(cè)分析過程:

設(shè)置ip是它指向W的第一個(gè)字符,其中ip是輸入的指針

while(x!= $){//棧非空

if(x等于ip所指向的符號(hào)a)指向棧彈出操作,將ip向前移動(dòng)一個(gè)位置

else if(x是終結(jié)符號(hào)) error();

else if(M[x,a]是一個(gè)報(bào)錯(cuò)條目) error();

else if(M[x,a]=x→Y1Y2……Yn){

輸出產(chǎn)生式x→Y1Y2……Yk);

輸出棧頂符號(hào);

將YkYk-1……Y1壓入棧,其中Y1位于棧頂;

}

令x=棧頂元素;

圖5 語法規(guī)則解析樹Fig.5 Parsing tree of syntax rules

表2 id+id*id行為流程Tab.2 The behavior process of Id+id*id

}[2]并且編譯器的好壞可以在很大程度上影響著這一門編程語言的使用頻率,一個(gè)好的編譯器可以極大的提高程序效率,反之,亦可加大程序的開銷,所以編譯器的設(shè)計(jì)和優(yōu)化[6]都顯得尤為重要,希望更多有能力的人投入進(jìn)來,開發(fā)出更為便捷,強(qiáng)大的編譯器!

3 結(jié)論

了解一個(gè)編譯器到底在干些什么事情對(duì)我們理解語言本身有很大的幫助,當(dāng)然編譯技術(shù)本身也有很大的應(yīng)用潛力。

[1] (美)Alfred V. Aho, Monica S.Lam,Ravi Sethi, Jeffrey D.Ullman, 編譯原理[M]. 機(jī)械工業(yè)出版社, 2008.

[2] 埃克爾, Java編程思想(第四版)[M]. 機(jī)械工業(yè)出版社, 2007.

[3] Steve McConnell, 代碼大全(第2版)[M]. 電子工業(yè)出版社出版, 2006.

[4] 高伸儀. 編譯原理及編譯程序構(gòu)造[M]. 北京: 北京航空航天大學(xué)出版社, 1990.

[5] DavidR. Hanson, ChristopherW.F.可變目標(biāo)C編譯器——設(shè)計(jì)與實(shí)現(xiàn)[M]. 北京: 電子工業(yè)出版社, 2005.

[6] 王鳳英. C++編譯器應(yīng)用研究與評(píng)析[J]. 計(jì)算機(jī)工程與應(yīng)用, 2002(15): 121-123.

[7] 吳元斌. C/C++運(yùn)算求值順序的缺陷分析[J]. 現(xiàn)代計(jì)算機(jī)(專業(yè)版), 2003(07): 60-62.

[8] C++語言開發(fā)跨平臺(tái)程序的研究與實(shí)現(xiàn)[J]. 熊凱, 高茂庭,于仁師. 電腦知識(shí)與技術(shù). 2006(05).

[9] Platform-independent code conversion within the C++locale framework. Lars Engebretsen. Software. 2006.

[10] Developing platform independent designs:Model-based design is used to develop source code for multiple compilers,languages and platforms,. Colin Holland. Embedded Systems Europe. 2006.

猜你喜歡
規(guī)則語言
撐竿跳規(guī)則的制定
數(shù)獨(dú)的規(guī)則和演變
語言是刀
文苑(2020年4期)2020-05-30 12:35:30
規(guī)則的正確打開方式
幸福(2018年33期)2018-12-05 05:22:42
讓語言描寫搖曳多姿
讓規(guī)則不規(guī)則
Coco薇(2017年11期)2018-01-03 20:59:57
多向度交往對(duì)語言磨蝕的補(bǔ)正之道
TPP反腐敗規(guī)則對(duì)我國的啟示
累積動(dòng)態(tài)分析下的同聲傳譯語言壓縮
搜索新規(guī)則
主站蜘蛛池模板: 东京热一区二区三区无码视频| 毛片在线看网站| 玖玖免费视频在线观看| 欧美日韩国产综合视频在线观看| A级毛片高清免费视频就| 97超碰精品成人国产| 国产又色又爽又黄| 日韩欧美91| 欧美另类第一页| 亚洲AV永久无码精品古装片| 波多野结衣一区二区三视频| 国产全黄a一级毛片| 亚洲爱婷婷色69堂| 狠狠躁天天躁夜夜躁婷婷| 免费在线成人网| 中文字幕亚洲乱码熟女1区2区| 亚洲成网777777国产精品| 精品国产成人高清在线| 午夜啪啪福利| 亚洲欧美另类色图| 国产欧美日韩另类| 国产91丝袜在线播放动漫 | 成人精品免费视频| 色偷偷综合网| 久久久久亚洲av成人网人人软件| 国产无套粉嫩白浆| 亚洲无线国产观看| 亚洲精品爱草草视频在线| 日韩天堂视频| 免费人成视网站在线不卡| 亚洲日韩国产精品综合在线观看| 欧美日韩国产精品综合| 国产裸舞福利在线视频合集| 狠狠色噜噜狠狠狠狠奇米777 | 精品久久久久成人码免费动漫| 女人一级毛片| 亚洲日韩在线满18点击进入| 亚洲自偷自拍另类小说| 国产流白浆视频| 国产黄在线免费观看| 2020精品极品国产色在线观看 | 精品一区二区三区中文字幕| 久久人妻系列无码一区| 激情乱人伦| 一级毛片高清| 91青青草视频在线观看的| 色窝窝免费一区二区三区 | 一本综合久久| 久久精品国产精品一区二区| 国产理论精品| 亚洲天堂成人在线观看| 亚洲国产精品日韩专区AV| 久久综合九九亚洲一区| 久久一级电影| 影音先锋亚洲无码| 免费欧美一级| 国产在线精彩视频二区| 在线精品亚洲一区二区古装| 中文字幕亚洲另类天堂| 91久久偷偷做嫩草影院免费看| 午夜毛片免费观看视频 | 国产不卡国语在线| 看你懂的巨臀中文字幕一区二区 | 区国产精品搜索视频| 人妻精品全国免费视频| 婷婷六月色| 色婷婷视频在线| 亚洲成a人片77777在线播放| 亚洲国产黄色| 国产小视频免费| 亚洲精品手机在线| 欧美精品成人一区二区在线观看| 亚洲精品制服丝袜二区| 91福利一区二区三区| 国产免费好大好硬视频| 久久semm亚洲国产| 好吊妞欧美视频免费| 四虎免费视频网站| 四虎永久免费地址| 国产成人高清亚洲一区久久| 91精品国产情侣高潮露脸| 亚洲中字无码AV电影在线观看|