【編譯器】
<P align=center><STRONG><FONT size=5>【<FONT color=red>編譯器</FONT>】</FONT></STRONG></P> <P><STRONG>Compiler</STRONG></P><P><STRONG></STRONG> </P>
<P><STRONG>【辭書名稱】教育大辭書</STRONG></P>
<P><STRONG></STRONG> </P>
<P><STRONG>「編譯器」是一種系統軟體,其功能是將以高階語言(如C,COBOL,FORTRAN等)寫成的程式翻譯成低階的機器語言程式,以方便機器執行。</STRONG></P>
<P><STRONG></STRONG> </P>
<P><STRONG>由於處理器只能執行數位化的機器語言,而使用者又不太可能用機器語言去撰寫大型程式;</STRONG></P>
<P><STRONG></STRONG> </P>
<P><STRONG>因此,電腦工程師設計出接近人類語言的高階程式語言,用來撰寫電腦程式,故需要編譯器這種軟體將高階的程式語言轉成低階的機器語言。</STRONG></P>
<P><STRONG></STRONG> </P>
<P><STRONG>幾乎所有的編譯器都是文法導向的(syntax-directed),也就是說根據原始程式的文法結構來導引整個編譯的過程,而這個過程可粗分為兩個階段:第一個階段是原始程式的文法結構分析(Lexicalanalysis),這部分的作業由編譯器中的標記掃描器(tokenscanner)與剖析器(parser)來處理;</STRONG></P>
<P><STRONG></STRONG> </P>
<P><STRONG>第二階段則是機器語言程式的合成,從分析文法結構的結果,來辨認其語意,進而產生相對應的機器碼,這些工作由編譯器中的語意程序(semanticroutine)、最佳化處理器(optimizer)、機器碼產生器(codegenerator)來執行。</STRONG></P>
<P><STRONG></STRONG> </P>
<P><STRONG>一般的編譯器都是由掃描器、剖析器、語意程序、最佳化處理器、機器碼產生器等所組成的。</STRONG></P>
<P><STRONG></STRONG> </P>
<P><STRONG>標記掃描器的工作是將原始程式以一個字母接著一個字母的方式讀入,然後將這些個別的字母組成標記(tokens),然後將這些標記傳送到剖析器。</STRONG></P>
<P><STRONG></STRONG> </P>
<P><STRONG>標記掃描器的工作是編譯過程的第一個步驟,其分析出的標記是構成文法結構的符號(symbols),像是明認字(identifiers)、常數(constants)、以及保留字(reservedwords)等。</STRONG></P>
<P><STRONG></STRONG> </P>
<P><STRONG>一般常用正規語法(regularexpression)的規則來建出標記。</STRONG></P>
<P><STRONG></STRONG> </P>
<P><STRONG>剖析器接著根據所讀到的標記,循文法規範中的句型產生規則(constructproductionrule),以剖析原始程式的文法結構。</STRONG></P>
<P><STRONG></STRONG> </P>
<P><STRONG>常用來描述現代程式語言的文法規則是一種與上下文無關的文法(context-freegrammar)。</STRONG></P>
<P><STRONG></STRONG> </P>
<P><STRONG>一旦文法結構被辨識出來,剖析器就直接呼叫語意程序,或者是建立一個代表整個程式文法結構的剖析樹,然後再交給語意程序,以驅動語意的處理。</STRONG></P>
<P><STRONG></STRONG> </P>
<P><STRONG>語意程序實現兩項功能:首先會檢查句型的靜態語意是否合法且有意義;</STRONG></P>
<P><STRONG></STRONG> </P>
<P><STRONG>例如,檢查參考到的變數是否曾宣告,資料型別是否相容等。</STRONG></P>
<P><STRONG></STRONG> </P>
<P><STRONG>如果句型的語意是正確的,語意程序將句型轉換成相對應的中間碼(intermediaterepresentation)而不是機器碼。</STRONG></P>
<P><STRONG></STRONG> </P>
<P><STRONG>不直接翻譯成機器碼的原因有幾項:第一,模組化及移植性的考慮,可以使得此編譯器很容易翻譯出不同的機器碼,因為只需要修改將中間碼翻成機器碼的機器碼產生器就可以。</STRONG></P>
<P><STRONG></STRONG> </P>
<P><STRONG>第二,比較容易針對中間碼作最佳化的處理。</STRONG></P>
<P><STRONG></STRONG> </P>
<P><STRONG>最佳化處理器,其任務是改進語意程序產生的中間碼,改進後的中間碼執行結果是相同的,但依照它所翻譯出的機器碼,其執行速度或程式大小會比原來的好。</STRONG></P>
<P><STRONG></STRONG> </P>
<P><STRONG>這個處理器是編譯器中最複雜且最花時間的部分,一般如果不是有特別的需求,通常是不會作最佳化的處理。</STRONG></P>
<P><STRONG></STRONG> </P>
<P><STRONG>機器碼產生器就是將中間碼翻譯成機器碼,在翻譯過程中通常會做一些機器相關的最佳化處理,以期產生的程式可充分利用中央處理單元的功能,而使得執行的效能更好。</STRONG></P>
<P><STRONG></STRONG> </P>
<P><STRONG></STRONG> </P>轉自:http://edic.nict.gov.tw/cgi-bin/tudic/gsweb.cgi?o=ddictionary
頁:
[1]