編譯原理讀書筆記
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
相關文章
- 《編譯原理》閱讀筆記:p18編譯原理筆記
- 《編譯原理》閱讀筆記:p1-p3編譯原理筆記
- 《編譯原理》閱讀筆記:p4-p17編譯原理筆記
- 《編譯原理》閱讀筆記:p19-p24編譯原理筆記
- 《編譯原理》閱讀筆記:p25-p32編譯原理筆記
- 讀書筆記筆記
- 《讀書與做人》讀書筆記筆記
- webpackDemo讀書筆記Web筆記
- Vue讀書筆記Vue筆記
- 散文讀書筆記筆記
- Cucumber讀書筆記筆記
- HTTP 讀書筆記HTTP筆記
- postgres 讀書筆記筆記
- 讀書筆記2筆記
- 讀書筆記3筆記
- 【閱讀筆記】Taro轉小程式編譯原始碼解析筆記編譯原始碼
- js高程讀書筆記JS筆記
- 《論語》讀書筆記筆記
- 《重構》讀書筆記筆記
- PMBook讀書筆記(一)筆記
- 人人都能讀懂的編譯器原理編譯
- 現代作業系統-原理與實現【讀書筆記】作業系統筆記
- [讀書筆記][effective C++]條款30-inline的原理筆記C++inline
- 【編譯openjdk學習筆記】編譯JDK筆記
- MySQL 8.0 Reference Manual(讀書筆記34節-- 字元編碼(1))MySql筆記字元
- MySQL 8.0 Reference Manual(讀書筆記35節-- 字元編碼(2))MySql筆記字元
- MySQL 8.0 Reference Manual(讀書筆記36節-- 字元編碼(3))MySql筆記字元
- MySQL 8.0 Reference Manual(讀書筆記38節-- 字元編碼(5))MySql筆記字元
- 《如何有效閱讀一本書》讀書筆記筆記
- 《將心注入》讀書筆記筆記
- Raft論文讀書筆記Raft筆記
- 讀書筆記-沒有空白筆記
- JVM讀書筆記之OOMJVM筆記OOM
- swift語法-讀書筆記Swift筆記
- 【GO】《GO HANDBOOK》讀書筆記Go筆記
- 讀書筆記(2)《微精通》筆記
- 《Effective C++》讀書筆記C++筆記
- 類載入讀書筆記筆記