編譯原理讀書筆記
position := initial + rate * 60
詞法分析
- 識別符號
position
- 賦值符號
:=
- 識別符號
initial
- 加號
+
- 識別符號
rate
- 乘號
*
- 數字
60
語法分析
規則
- 任何一個識別符號都是表示式
- 任何一個數都是表示式
- 如果
expression1
和expression2
是表示式,那麼expression1 + expression2
expression1 * expression2
也是表示式
rate\*60
是一個表示式,initial+rate\*60
也是一個表示式
定義語句的規則
- 如果
identifier1
是一個識別符號,expression2
是一個表示式,則
identifier1 := expression2
是一個語句
- 如果
expression1
是一個表示式,statement2
是一個語句,則
while(expression1) do statement2
if(expression1) then statement2
也是一個語句
如果給出一段原始碼,掃描輸入流就可以完成識別符號的識別,直到掃描到符號(加號 減號 乘號等)為止,之前掃描的字母和數字都可以當成是一個識別符號,然後把這個識別符號儲存到符號表中,再再輸入流中把這個識別符號和那個符號刪掉之後,再繼續向後掃描
語義分析
編譯器的個階段
源程式 -> 詞法分析器 -> 語法分析器 -> 語義分析器 -> 中間程式碼生成器 -> 程式碼優化器 -> 程式碼生成器 -> 目標程式
還是這個例子:position := initial + rate * 60
詞法分析
id1 := id2 + id3 * 60
中間程式碼生成器
temp1 := inttoreal(60)
temp2 := id3 * temp1
temp3 := id2 * temp2
id1 := temp3
程式碼優化器
temp1 := id3 * 60.0
id1 := id2 * temp1
程式碼生成器
MOVF id3, R2
MULF #60.0, R2
MOVF id2, R1
ADDF R2, R1
MOVF R1, id1
相關文章
- CAS實現單點登入SSO執行原理探究
- CSS基礎——浮動(float)【學習筆記】
- Go踩坑筆記(十九)
- 蟻劍原理與魔改
- com.alibaba.fastjson學習筆記
- React學習筆記之雙向資料繫結
- 用 React.js+Egg.js 造輪子 全棧開發旅遊電商應用學習筆記和心得
- CSS技術筆記
- Java動態代理—框架中的應用場景和基本原理
- React基礎與原理實現
- Python 字典實現原理
- 《吳恩達機器學習》學習筆記007_支援向量機
- 六、Alibaba sentinel之限流原理分析
- Head First Java學習筆記(7):繼承與多型
- 計網 應用層筆記(個人學習用, 如有錯誤萬分感謝指出 (( 看到哪更到哪 )
- 現代作業系統-原理與實現【讀書筆記】
- Android10_原理機制系列_Activity視窗新增到WMS過程
- JavaScript正則學習筆記
- 檔案上傳踩坑記及檔案清理原理探究
- 計算機組成原理期末考試題