8 3 sum sum i Lexer Parser sum
- Slides: 64
圖 8. 3 編譯器的六大階段 高階語言 sum = sum + i 掃描器 (Lexer) 剖析器 (Parser) 詞彙串列 sum = sum + i id = id + id STMT 語法樹 sum: id: int 語意分析 (Semantic Analysis) = EXP: int ITEM: int 語意樹 + i: id: int sum: id: int 中間碼產生 (P-code Generator) 中間碼 最佳化 (Optimization) 組合語言產生 (ASM generator) 組合語言 ITEM: int + = sum T 0 i ADD R 1, R 2, R 1 T 0 sum
圖 8. 10 <範例 8. 1> 剖析到 sum=0 時 的語法樹與堆疊結構 堆疊 (Stack) PROG Base. List BASE STMT EXP STMT sum: id ITEM = EXP ITEM 0: number 成 長 方 向
語意分析的範例 STMT sum: id = ITEM EXP + sum: id STMT 語意分析 sum: id: int ITEM i: id (a) 語法樹 圖 8. 11 語意分析:將語法樹標註上節點型態 = ITEM: int EXP: int + sum: id: int (b) 語意樹 ITEM: int i: id: int
圖 8. 15 GNU 編譯器的流程 C C++ GENERIC (剖析樹) … Parsing Generic converter Gimplify GIMPLE (中間碼) Tree SSA optimizer RTL generator RTL (中間碼) RTL optimizer ASM generator 組合語言
Gimple
圖 8. 3 編譯器的三大階段 – 掃描、剖析、程式碼產生 高階語言程式 (Source code) sum = sum + i * i 掃描器 (Lexer) sum = sum + i * i id = id + id * id 一連串的詞彙 stmt (A sequence of tokens) 剖析器 (Parser) sum: id = Exp Term + Term * 剖析樹 (Parsing tree) Factor Item 程式產生 (Code Generation) sum: id i: id 目的程式碼 (Target code) * + = i sum t 2 i t 1 t 2 sum Factor
圖 8. 4 編譯器的六階段模型 高階語言程式 (Source code) 1. 掃描器 (Lexer) (A sequence of tokens) 一連串的詞彙 2. 剖析器 (Parser) 抽象語法樹 (Abstract Syntax Tree) 3. 語意分析 (Semantic Analysis) 具型態標記的抽象語法 樹 (Annotated Abstract Syntax Tree) 4. 中間碼產生 (Intermediate Code Generator) 中間碼 (Intermediate Code ) 5. 最佳化 (Optimizer) 經過最佳化的碼 (Optimized Code ) 6. 程式碼產生 (Code Generation) 目的程式碼 (Target code) (A sequence of tokens) 一連串的詞彙
語意分析的過程示意圖 stmt sum: id int 設定型態 = Term Exp + Term * Factor Item sum: id i: id int int
中間碼產生過程的示意圖 stmt sum: id Exp = Term + * Factor Item sum: id i: id 中間碼產生 * + = i sum t 2 i t 1 t 2 sum
程式剖析到 i=1 完成時的語法樹與堆 疊結構 堆疊 (Stack) <PROG> <Base. List> <BASE> <STMT> sum: id ; = for <EXP> <Base. List> <BASE> <FOR> ( i: id <STMT> = <EXP> <TERM> <FACTOR> <ITEM> 0: number 1: number 成 長 方 向
使用gcc跨平台編譯的範例圖 arm-elf-gcc array_sum_ARM. s arm-elf-gcc array_sum_ARM. o gcc array_sum_IA 32. s gcc array_sum_IA 32. o array_sum. c
- Lexer parser
- Flex lexical analyser
- Error recovery in top down parsing
- A javacup specification defines which of the following?
- Kong lingpeng
- Cobol xml generate example
- Eliminate left recursion calculator
- C# parser combinator
- Rd parser
- Jslinux
- Recursive descent parser left recursion
- Lr parsing example
- Bottom up parser
- Bison %left
- Lalr bottom up parser
- Sax and dom difference
- Common log formats
- Recursive descent parser
- Irony man token
- Recursive descent parser
- Dns analytical logging
- Https news yandex yandsearch
- Parser generator python
- Ll1 parser
- State machine parser
- Streaming xml parser
- Julia parser
- Windows xml parser
- Parsery
- Jon parser
- Layout parser
- Log parser studio
- Slk parser
- Recursive descent parser
- Nltk recursive descent parser
- Conflicts in slr parser
- Recursive descent parsing
- Sllgen
- Nbu parser 7 1
- Left corner parsing
- Slr
- Left recursion
- Earley parser
- +a parser
- Gsi parser
- Predictive parsing
- Limitations of recursive descent parser
- Enju parser
- Lr algorithm
- Sum0
- šum
- Verbi regolari latino
- Sum and differnce formula
- Sum esse fui imperfekat
- Cogito ergo sum dekart
- Sum of minterms
- The sum of two irrational numbers is always
- “zero sum” voltage loop rule
- What is sum
- Left hand riemann sum formula
- Simple interest in a sentence
- Factus sum
- Market equilibrium
- Subset sum problem
- Telescoping series