第二章一个微小的编译器 1.小语言 Micro的定义 2. Micro程序的编译过程 3.表达式的处理
第二章 一个微小的编译器 1. 小语言Micro的定义 2. Micro程序的编译过程 3. 表达式的处理
小语言 Micro的定义 P>begin VDL, SL end VDL >VDVD; VDL ●VD→ var id:T SL→S|s;SL s>id: = E write(E) read(id) o T>integer real E → id num E+ E E米E (∈E)
小语言Micro的定义 ⚫ P → begin VDL;SL end. ⚫ VDL → VD | VD ; VDL ⚫ VD → var id : T ⚫ SL → S | S ; SL ⚫ S → id:= E | write(E) | read(id) ⚫ T → integer | real ⚫ E → id | num | E + E | E * E |(E)
程序例: begin var xl: real var z1: real X1:=0.5 z1:三x1+55 write( z1 +5.5) read( x1) z1:=z1+x1 end
程序例: begin var x1:real ; var z1:real ; x1 := 0.5 ; z1 := x1 + 55 ; write( z1 +5.5 ); read( x1 ) ; z1 :=z1 + x1 end
Micro的词法分析 单词的种类 Token定义 词法分析过程
Micro的词法分析 ⚫ 单词的种类 ⚫ Token定义 ⚫ 词法分析过程
小co的词法分析 Micro语言中单词的分类: ●标识符:字母开头的字母/数字串 ●整常数:数字开头的数字串 ●实常数:整数整数 保留字: begin end var read write integer real ●符号词:+*():: ●控制词:d(换行符)
Micro的词法分析 Micro语言中单词的分类: ⚫ 标识符:字母开头的字母/数字串 ⚫ 整常数:数字开头的数字串 ⚫ 实常数:整数.整数 ⚫ 保留字:begin end var read write integer real ⚫ 符号词:+ * ( ) : := ; . ⚫ 控制词: (换行符)
小c的词摆分析 TKEN定义 二元组(单词种类,单词自身值) ●标识符的 Token:(Sid,标识符)如(Sid,x) ●整常数的 Token:(SinC,整常数)如( Into,5) ●实常数的 Token:( Srealo,实常数)如( SrealC,0.5) ●保留字的 Token:( Begin,),(Send,),(Svar,) ●符号词的 Token:( Splus, Smut,-),( SLParen,) ●● ●换行符的 Token:( Sline,)
Micro的词法分析 TOKEN定义: 二元组(单词种类,单词自身值) ⚫ 标识符的Token: ($id,标识符)如($id,x) ⚫ 整常数的Token: ($intC,整常数)如($intC,5) ⚫ 实常数的Token: ($realC,实常数)如($realC,0.5) ⚫ 保留字的Token: ($begin,-),($end,-),($var,-) … ⚫ 符号词的Token: ($plus,-),($mult,-),($LParen,-)… ⚫ 换行符的Token: ($line,-)
小cc的词法分析 词法分析过程: 读当前字符流,直至文件结東。如果是: (1)标识符时判断是保留字还是变量标识 符,构造 Token表示 (2)数字时判断是整型还是实型,构造 Token表示 (3)构造其它合法的符号的 Token表示 (4)遇到非法符号则报错
Micro的词法分析 ⚫ 词法分析过程: 读当前字符流,直至文件结束。如果是: (1)标识符时判断是保留字还是变量标识 符,构造Token表示 (2)数字时判断是整型还是实型,构造 Token表示 (3)构造其它合法的符号的Token表示 (4)遇到非法符号则报错
Micro的词法分析 bE国四回园囚区国 rea vIa e a X 0 5 Z x1+515 wak区团图EE aa园v国E园国园国区 图2.2.1源程序在文件中的表示
Micro的词法分析 ; ; l l a a e z 1 e a △ x 1 a r b i n △ w r i t e z 1 : = x 1 + 5 5 ; x = 0 . 5 1 e a d ( 1 ) ; z = ( z 1 5 . ) ; r 1 n d . # z 1 x 图2.2.1 源程序在文件中的表示 e g v r r v △ : r : : ; + 5 V 1 + e :
小co的词法分析 (Begin(Svar,(Sid, x1)(Scolon(Sreal($semi($I ine,(Svar. ($id,z1)($ colon (Sreal(semi(I ine,(sid,x1)Sassig (RealtY 0.5) (Semi($I ine,(id, z1)(Sassig(Sid, x1)(Sp lus(Into seml y (S I ine,(SwriteSLparen(sid, z1)(Sp lus(SrealCSRparen(Ssem i 5.5) (SI ine,(Sread SLparen(sid, x1)$Rparen($semi($I ine,(Sid, z1) (Sassig(Sid, z1)(Sp lus(id, x1)(Send($stop # 图2.2.2词法分析后的T0KEN表示
Micro的词法分析 ($id,z1) ($begin ,-) ($line, -) ($line, -) ($semi ,-) ($assig ,-) ($id,x1) ($semi ,-) ($semi ,-) ($real ,-) ($real ,-) ($colon ,-) ($line, -) ($line, -) ($var, -) ($var, -) $assig ($realC, 0.5) ($colon ,-) ($id,x1) ($line, -) ($line, -) ($semi, -) ($intC, 55) ($plus ,-) ($assig ,-) ($id,z1) ($id,x1) $Lparen ,-) ($read ,-) ($semi, -) ($realC ,5.5) $Rparen ,-) ($plus ,-) ($write ($id,z1) ,-) $Lparen ,-) ($stop # ,-) ($end ,-) ($plus ($id,x1) ,-) ($id,z1) ($semi ($id,z1) ,-) ($id,x1) $Rparen ,-) 图2.2.2 词法分析后的TOKEN表示
Micro的语法分析 ●输入:是词法分析后所得的 Token序列。 ●功能:进行语法检查。构造语法短语的 表示形式(语法树 ●说明:语法分析只用到单词的 Token表 示,并不改变单词的T。ken表示
Micro的语法分析 ⚫ 输入:是词法分析后所得的Token序列。 ⚫ 功能:进行语法检查。构造语法短语的 表示形式(语法树) ⚫ 说明:语法分析只用到单词的Token表 示,并不改变单词的Token表示