13. 功能:从左到右读入源程序的每个字符,对构成源程序的字符流进行扫描和分解,从而识别出一个个单词(逻辑上紧密相连的一组字符,具有集体含义。如:标识符、保留字(关键字)、算符、界符等)。
例. 某源程序片断如下:
begin
var sum , first , count : real ;
sum := first + count * 10
end.保留字 begin
保留字 var
标识符 sum
逗号 ,
标识符 first
逗号 ,
标识符 count
冒号 :
保留字 real
分号 ;
标识符 sum
赋值号 :=
标识符 first
加号 +
标识符 count
乘号 *
整数 10
保留字 end
界符 .2、词法分析
16. 语法规则的递归表示
如:表达式的表示
任何标识符是表达式。
任何常数(整常数、实常数)是表达式。
若表达式1和表达式2都是表达式,那么
表达式1+表达式2,表达式1*表达式2
(表达式1)都是表达式。
如:语句的表示
标识符:=表达式 是语句。
while (表达式) do 语句是语句
if (表达式) then 语句 else 语句是语句。
结合上述语法规则理解语法短语即语句:
sum := first + count * 10 的语法树的构成。
17. 4、语义分析功能:审查源程序是否有语义错误,为代码生成阶段收集类型信息。如:类型检查。:=id1+id2*id310inttoreal语句:sum := first + count * 10
内部形式:id1:=id2+id3*10