導航:首頁 > 源碼編譯 > 編譯原理前綴後綴集合

編譯原理前綴後綴集合

發布時間:2022-08-08 00:15:53

A. 編譯原理轉化為後綴表達式怎麼計算

比如a+b*(c+d/e)怎麼轉化為後綴表達式就成了abcde/+*+?
1:d/e -> de/
2: c + de/ -> cde/+
3: b * (cde/+) -> bcde/+*
4: a + bcde/+* -> abcde/+*+
其實就一個原則:先輸出符號左邊的, 然後輸出符號右邊的, 最後輸出符號。

B. 表達式求值 (棧的應用)前中後綴

表達式的分析與求值是編譯原理課程中極其重要的部分,主要用於最初的詞法分析。其表示方式有:前綴、中綴、後綴表示法。其數據結構可以使用一個堆棧來表示。具體的實現代碼,我以前使用的書籍是《C語言大全》,那上面就有完整的代碼,你可以參考。但是由於我已經很久沒有編寫編譯原理方面的程序了,所以我也無法親自給你編寫一個完整表達式分析求值的程序。只能夠給你提供一些思路和線索。

C. 為什麼要採用中間代碼中間代碼有哪幾種形式(編譯原理)

採用中間代碼是把源程序映射成中間代碼表示,再映射成目標代碼的工作分在幾個階段進行,使編譯演算法更加清晰。中間代碼有四種形式:

1、逆波蘭表示

逆波蘭表示又稱後綴表示法,它是最簡單的一種中間代碼表示形式,早在編譯程序出現之前,它就用於表示算術表達式。

2、四元式

四元式也是一種比較普遍採用的中間代碼形式,

其形式為:(OP,ARG1,ARG2,RESULT)

3、三元式

三元式表示是與四元式類似的一種表示法,所不同的僅是三元式中沒有表示運算結果的部分,凡要涉及到運算結果的均用三元式的位置或序號來代替。

4、樹表示

樹形表示是三元式的翻版。在樹的表示中,樹葉均為運算對象,即常量或變數,其他結點表示運算符。表達式的樹形表示很容易實現:簡單變數或常量的樹就是該變數或常量自身。

(3)編譯原理前綴後綴集合擴展閱讀

中間語言的優點:

1、中間語言與具體機器特性無關,一種中間語言可以為生成多種不同型號的目標機的目標代碼服務。

2、可對中間語言進行與機器無關的優化,有利於提高目標代碼的質量。

對於中間語言,要求其不但與機器無關,而且有利於代碼生成。

D. 編譯原理寫出表達式-a-(b*c/(c-d)+(-b)*a)的前綴式和後綴式。

abcde/+*+ 畫一個運算樹 先算的d/e根為"/",子結點為d,e 然後算c+d/e,根為「+」,左右子結點為e和上面的子樹 b*(c+d/e)根為"*",作子樹為b,右子樹為(c+d/e)的樹 最後a為右結點,"+"為根,左子樹為剛才得到的樹。 該樹後序遍歷即得。

E. 編譯原理:構造表示「標識符」的正則表達式標識符定義:以字母開頭的字母數字串,標識符可以有後綴,

^([A-Za-z]\w*)([.]([A-Za-z]\w*))*$

不知理解得對不對
比如
(java).(util).(Locale)
java util Locale三組都是以字母開頭,後接單詞字元(即[A-Za-z0-9_]的縮寫\w)的表達式

F. 編譯原理描述文法所有可行前綴

空 •0s1 0•s1 0s•1 0s1• •01 0•1 01•

G. 什麼叫活前綴,用通俗的話解答下,或者簡單的例子。 這個題是編譯原理的。

活前綴:右句型的前綴,而且其右端不會超過該句型的最右邊句柄的末端。
右句型:最右推導可得到的句型。
最右推導:每步推導都替代最右非終結符的推導。
推導:我們說αBγ推導出αβγ,是說存在產生式B->β。
產生式:左邊為非終結符,右邊為終結符與非終結符組合成的串。
非終結符:是字元串的集合。
終結符:組成語言的詞。如c語言中的2,a,int,if等。
句型:開始符經過若干步推導後得到的串。
前綴:如abc的前綴為a、ab、abc。
開始符:開始符是整個語言的集合。
句柄:非形式的,句柄是和某個產生式右部匹配的字元串,把句柄歸約成產生式左部的非終結符,可以得到最右推導的逆過程的一步。形式的定義為:開始符s經過若干步最右推導得到αBγ,αBγ經過一步最右推導得到αβγ,若γ為終結符的集合,則β為句柄。舉例:
E->E+E|E*E|-E|(E)|id,對於id+id*id,其中一個最右推導為E->E+E->E+E*E->E+E*id->E+id*id->id+id*id。在id+id*id歸約成E+id*id的過程中,最左邊的id是句柄。E+id*id歸約成E+E*id時,最左邊的id是句柄,把E+E*id歸約成E+E*E時,id是句柄。把E+E*E歸約成E+E時E*E是句柄。E+E歸約成E時,E+E是句柄。
歸約:可理解為把產生式右邊的串用產生式左邊的非終結符代替。
注1:再說一下活前綴,舉個例子,比如E+E*E歸約成E+E,句柄是E*E,那麼它的活前綴就是E、E+、E+E、E+E*、E+E*E。又比如id+id*id歸約成E+id*id,句柄是最左邊的id,那麼它的活前綴是id,因為不能超過句柄。
注2:至於為什麼要給出活前綴的定義和如何用歸約的方法實現語法分析,還要進一步學習。

H. 數據結構後綴表達式

提醒一下樓主,這個是問題編譯原理的范疇。a/(b-c)+d*e

I. 編譯原理 活前綴問題

不含句柄之後字元的前綴都是活前綴,a在句柄之前,當然是。

J. 編譯原理 後綴式與中綴式的轉換

程序求的話,當然是設棧,可是「棧」這玩意是計算機的思維模式,咱們人類要在腦子里維護個棧,那個智商要求是比較高的,以本人比較低的智商來說是相當的困難。
所以,曲線救國:把前、後綴式轉換成中綴式,中綴式求值參照上面一條。

閱讀全文

與編譯原理前綴後綴集合相關的資料

熱點內容
pythonimportsys作用 瀏覽:276
騰訊雲拼團雲伺服器 瀏覽:364
海南離島將加貼溯源碼銷售嗎 瀏覽:244
linux分區讀取 瀏覽:794
單片機液晶顯示屏出現雪花 瀏覽:890
解壓器用哪個好一點 瀏覽:771
什麼app看小說全免費 瀏覽:503
sha和ras加密 瀏覽:823
韓順平php視頻筆記 瀏覽:636
阿里雲ecs伺服器如何設置自動重啟 瀏覽:596
三星電視怎麼卸掉app 瀏覽:317
如何將pdf轉換成docx文件 瀏覽:32
dos命令批量改名 瀏覽:376
centosphp環境包 瀏覽:603
mfipdf 瀏覽:534
電腦解壓後電腦藍屏 瀏覽:295
外網訪問內網伺服器如何在路由器設置 瀏覽:856
2014統計年鑒pdf 瀏覽:434
linuxoracle用戶密碼 瀏覽:757
股票交易pdf 瀏覽:898