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

基于編譯原理的四則混合運算器的實現

2008-12-31 00:00:00秦飛舟
電腦知識與技術 2008年15期

摘要:計算機只能執行機器代碼,只有專業程序人員才能較好地使用此類語言。因此編譯程序已成為計算機系統的最重要的系統程序之一。本文主要通過對四則混合計算器的軟件的設計分析講述了編譯程序的工作過程及具體實現。

關鍵詞:四則混合計算器;詞法分析;語法分析;LR分析;語義分析

中圖分類號:TP312 文獻標識碼:A文章編號:1009-3044(2008)15-2pppp-0c

Four Items of Commixture Arithmetic Device Realization

QIN Fei-zhou

(Academy of Physics and Electricity Information,University of Ningxia,Yinchuan 750021,China)

Abstract:The computer can only carry out the machine code,only specialized procedure personnel could use this kind of language well.So the compiler has already become one of the most important systematic procedures of the computer system. Mainly through mix to four fundamental rules design of software of calculator is it tell working course and concrete to realize of compiler to analyse this text.

Key words:The four fundamental operations of arithmetic blends a calculator;Lexical analysis;Grammatical analysis;LR analysis;Semantic analysis

我們每個人都使用過計算器,專用的計算器都是一個現成的器件,是由運算芯片完成運算功能的。而且只能進行單純的加、減、乘、除運算,不能進行四則混合運算。那么如何用計算機來實現一個四則混合計算器呢?用計算機來實現一個四則混合計算器,也就是用編寫程序(即軟件)的方法來實現。

1 編寫四則混合計算器的意義

所謂的編譯程序是指這樣的一種程序,它能夠把某一種語言程序(稱為源語言程序)轉換成另一種語言程序(稱為目標語言程序),而后者與前者在邏輯上是等價的。四則混合計算器的輸入是一個由字符組成的表達式(源程序),如果這個表達式是合法的,則輸出是這個表達式的計算結果(目標代碼);否則輸出錯誤信息。因此四則混合計算器是一個典型的編譯程序。

編譯原理是計算機軟件專業的一門重要的專業必修課。盡管編譯過程與外文書刊的翻譯工作過程比較類似,但由于編譯程序所翻譯的畢竟不是自然語言,必然有其自身特性,因而學生普遍認為這門課程是專業課中比較難于學習的。即使學習了編譯原理這門課,大多數學生也不可能就開發出一個編譯程序。事實上,許多從事計算機專業的人士也未能編寫出一個完整的編譯系統。而編制四則混合運算的計算器,就等價于編寫一個小的編譯系統,而且又具有可實現性,因此,把這個題目作為編譯原理學習的一個測驗題目是非常適合的。

2 現有編譯程序的類型及特點

現有的編譯程序通常有兩大類:一類是翻譯,另一類是解釋。所謂翻譯,是指在計算機中放置一個能為計算機直接執行的翻譯程序,它以某一種程序設計語言(源語言)所編寫的程序(源程序)作為翻譯或加工的對象,當計算機執行翻譯程序時,就將它翻譯為與之等價的另一種語言目標語言的程序(目標程序)。如C編譯程序就是一種翻譯程序,它的源語言和目標語言分別是相應的C語言和機器語言。解釋程序也是以源程序作為它的輸入,它與編譯的主要區別是在解釋程序的執行過程中不產生目標程序,而是邊解釋邊執行源程序本身,例如FoxPro語言。

3 四則混合計算器程序的邏輯結構

編譯程序完成從源程序到目標程序的翻譯工作,是一個復雜的過程。典型的編譯過程可包括詞法分析、語法分析、語義分析、中間代碼生成、代碼優化、目標代碼生成六個階段和表格管理與出錯處理兩部分。從概念上來講,一個編譯程序的整個工作過程是劃分成階段進行的,每個階段將源程序的一種表示形式轉換成另一種表示形式,各個階段進行的操作在邏輯上是緊密連接在一起的。

由于四則混合計算主要目標是計算出表達式結果,因此編譯階段可以設計為下圖所示:

3.1 詞法分析程序

詞法分析程序又可稱為掃描器,它掃描源程序,并進行分析,將源程序轉換為便于編譯程序其余部分進行處理的內部格式。對于四則混合運算而言,可以將詞法分析程序的預定形式設計為形如(字符,值)的二元式。

3.2 語法分析程序

語法分析是編譯程序的核心部分,語法分析的作用是識別由詞法分析所給出的單詞符號序列是否是給定文法的正確句子(程序)。目前語法分析常用的方法的有自頂向下分析和自底向上的分析兩大類。我對四則混合運算的語法分析采用了自底向上的分析法中的LR(1)分析法。自頂向上分析法的關鍵問題是在分析過程中如何確定句柄。LR(K)分析法正是給出一種能根據當前分析棧中的符號串(通常以狀態表示)和向右順序查看輸入串的K個(K ≥0)符號就能唯一地確定分析器的動作是移進還是歸約。LR語法分析器是由三部分組成:

(1)總控程序,也可以稱為驅動程序,對于所有的LR分析器的總控程序都是相同的。功能就是自左至右地依次掃描輸入符號串的各個符號,并根據當前分析棧中所存放的符號的狀態及當前正在掃描的輸入符號,檢索分析表并按其指示完成相應的分析動作。

(2)分析棧,包括符號棧和狀態棧兩個棧。

(3)分析表,不同的文法分析表將不同,同一個文法采用的LR分析器不同時,分析表將也不同。分析又表由狀態轉換表(GOTO)和動作表(ACTION)兩個部分組成,它們都可用二維數組表示。GOTO(S,A)=j,A為非終結符,表明前一動作是用關于A的產生式歸約的,當前面臨非終結符A應移入符號棧,j移入狀態棧。ACTION(Si,a)規定了棧頂狀態為Si時遇到輸入符號a應執行的動作,動作有4種可能:

移入:讀入下一個輸入符號并把它入符號棧。

歸約:當棧頂的部分連續符號串形成一個句柄時,對此句柄進行歸約,把形成句柄的符號串替換為相應的非終結符號。

接受:當總控程序發現棧頂除了棧底標志符號#之外僅有識別符號,而輸入也已達到右端標志符號#時,因而識別出輸入符號串是一個句子時,執行接受動作而結束識別工作。

報錯:當識別程序察覺一個錯誤,因此輸入符號串不是句子而無法繼續識別工作時,調用一個出錯處理子程序進行處理或停止。

為了簡化工作,只考慮整數的四則混合計算,表達式構造文法如下:

G=(VN,VT,P,E),其中VN={E,T,F},VT={+,-,*,/,(,),d},

P={E→E+T|E-T|E*T|E/T|T,T→T*F|F,F→Fd|d}

對文法進行擴展并編號如下:

構造分析表是一個難度很大的工作,是由手工完成的,這里不再描述它的構造過程,直接給出構造好的分析表。

分析表中元素(狀態i,符號a)=Rj, 表示狀態棧的棧頂狀態i遇到終結符號a,則用編號為j產生式進行歸約;元素(狀態i,符號a)=Sj,表示狀態棧的棧頂狀態i遇到終結符號a,,轉移到狀態j;

元素(狀態i,A)=j,表示表明前一動作是用關于A的產生式歸約的,當前面臨非終結符A應移入符號棧,

j移入狀態棧;表格中空白為出錯處理。

3.3 語法分析程序

在語法分析過程中,隨著分析的步步進展,根據每個產生式所對應的語義子程序進行翻譯的方法進行翻譯的辦法叫作語法制導翻譯。語法制導翻譯的具體實現途徑可以與語法分析結合起來,擴充LR的分析棧,增加一個語義棧,用于存放分析過程中每個符號的語義。同時把LR分析的能力擴大,使它不僅執行語法分析任務,且能在用某個產生式進行歸約的同時調用相應的語義子程序,完成相應的語義動作。

四則混合計算文法所對應的語義動作如下:

產生式語義動作

(0)S→E print(E.val)

(1)E→T E.val=T.val

(2)E→E+T E.val=E.val+T.val

(3)E→E-T E.val=E.val-T.val

(4)T→F T.val=F.val

(5)T→T*F T.val=T.val*F.val

(6)T→T/F T.val=T.val/F.val

(7)F→d F.val=d.val

(8)F2→F1dF2.val=F1.val*10+d

(9)F→(E)F.val=E.val

以表達式(13+2)*4/2-5為例說明語法分析的同時結合語義分析,語法分析是判斷該表達是否合法,如果合法則在語法分析結束時得出語義,即得出該表達式的運算結果。表中狀態加下劃線的表示一個狀態,如10表示狀態10。

3.4 表格管理程序

在編譯過程中,需要經常收集、記錄或查詢源程序中所出現的各種量的有關信息。為此,編譯程序需要建立或持有一批不同用途的表格。四則混合計算器的表格有語義表,LR(1)分析表,這兩張表是事先設計好,并存儲在計算機中的,所以只需要編制查表的程序。

3.5 出錯處理程序

程序人員在編寫程序時,錯誤是難免的。四則混合計算器的出錯主要是所輸入表達式的非法,也就是上面LR分析表中空白元素的地方。如果分析到空白處,則給用戶提供“表達式輸入錯誤”的信息。

4 四則混合計算器軟件的具體實現

(1)對于分析棧,可用順序棧這一數據結構,并相應編寫置空棧、判棧空、入棧、出棧的功能函數。其中的三個棧可以申請三個全局變量進行存儲。

(2)表格的建立和查找

由于四則混合計算程序的兩張表格都是事先設計好的,因此可用兩個全局常量來進行存儲。可用結構化數組作為數據結構。對于查找可以設計一個函數完成該功能。

(3)對于輸入串用一字符串變量進行存儲。設計一個界面用于接收表達式的輸入及計算結果的輸出。

(4)語法分析及語義分析可以編寫在一起,用一個主函數完成。歸約和移入也可以用功能功能模塊分別完成,由于語義分析只是在歸約時進行,因此語義分析可以設計與產生式編號相一致的語義子程序完成。

參考文獻:

[1]陳火旺,錢家驊,孫永強.程序設計語言編譯原理.國防工業出版社,1983.

[2]杜淑敏,王永寧.編譯程序設計原理.北京大學出版社,1986.

[3]鄭茂松.編譯程序中代碼生成研究的現狀.計算機工程與應用,1982.1.

[4]呂映芝,張素琴,蔣維杜.編譯原理.清華大學出版社,1988.2.

[5]蔣立源,編譯原理.西北大學出版社,1984.4.

[6]唐策善,李龍澍,黃劉生.數據結構.高等教育出版社,1985.1.

[7]譚浩強.C程序設計(第2版).清華大學出版社,2003.

收稿日期:2008-02-19

作者簡介:秦飛舟(1972-),女,江蘇泰興人,講師,學士,主要研究領域為:數據庫和網絡方向的教學及軟件開發。

注:“本文中所涉及到的圖表、注解、公式等內容請以PDF格式閱讀原文。”

主站蜘蛛池模板: 国产精品亚洲天堂| 中文字幕中文字字幕码一二区| 91美女在线| 狠狠综合久久久久综| 国产成人精品视频一区视频二区| 成人日韩精品| 国产在线精品香蕉麻豆| 青青草国产在线视频| 激情综合图区| 伊人国产无码高清视频| 国产无码精品在线| 久久综合九九亚洲一区| 日韩无码视频网站| 日韩天堂视频| 在线看片免费人成视久网下载| 国产色网站| 色成人亚洲| 亚洲伊人电影| 成人免费黄色小视频| 亚洲浓毛av| 色丁丁毛片在线观看| 亚洲日韩Av中文字幕无码| 国产精品护士| 综合色88| 亚洲国产成人在线| 香蕉国产精品视频| 欧美一道本| 一本无码在线观看| 久久99精品久久久久纯品| 亚洲综合一区国产精品| 久久青青草原亚洲av无码| AV在线麻免费观看网站| www.91在线播放| 91精品免费高清在线| 日韩AV无码一区| 狠狠色丁香婷婷综合| 国产精品毛片一区视频播| 久一在线视频| 国产91无码福利在线| 国产精品视频白浆免费视频| 亚洲第一在线播放| 色偷偷综合网| 高清国产va日韩亚洲免费午夜电影| 国禁国产you女视频网站| 中文字幕欧美成人免费| 香蕉久久国产超碰青草| 国内精品视频| 国产亚洲精品97AA片在线播放| 免费A级毛片无码免费视频| 日韩国产综合精选| 呦视频在线一区二区三区| 毛片在线播放网址| 手机看片1024久久精品你懂的| 久久久精品久久久久三级| 99精品国产自在现线观看| 午夜福利视频一区| 婷婷色一二三区波多野衣| 亚洲无码不卡网| 在线精品自拍| 国产精品人莉莉成在线播放| 中文国产成人精品久久| 动漫精品中文字幕无码| 欧美日韩高清在线| 国产精品久久久精品三级| 蜜臀AV在线播放| 久久精品电影| 亚洲精品国产精品乱码不卞| 福利国产微拍广场一区视频在线| 三上悠亚一区二区| 中国美女**毛片录像在线| 亚洲福利一区二区三区| AV老司机AV天堂| 国产精品视频白浆免费视频| 99热这里只有精品2| 成人免费午夜视频| 极品av一区二区| 亚洲一区波多野结衣二区三区| 啪啪永久免费av| 日韩国产一区二区三区无码| 亚洲一区无码在线| 黄色污网站在线观看| 欧美另类精品一区二区三区|