12源程序“分析 121词法分析(线性分析) 输入字符串: po 1t 1 o n ff· 了·孟 1 a a 米*60,得到下述词( Token) 标识符 e pOSition, initial, rate 赋值运算 加法运算 乘法运算符: 空格? 数
1.2 源程序 “分析” 输入字符串:‘ p ’ ‘ o ’ ‘ s ’ ‘i’ ‘ t ’ ‘i’ ‘ o ’ ‘ n ’ ‘ ‘ ‘ = ‘ ‘ ‘ ‘ ‘ ‘i’ ‘ n ’ ‘i’ ‘ t ’ ‘i’ ‘ a ’ ‘l’ ‘ ‘ ‘+’ ‘ r ’ ‘ a ’ ‘ t ’ ‘ e ’ ‘*’ ‘6’ ‘0’,得到下述词(Token): 标识符:position, initial, rate 赋值运算符:= 加法运算符:+ 乘法运算符:* 数:60 空格? 1.2.1 词法分析 (线性分析)
12源程序“分析 122语法分析(层次分析) poSition=itlt+rate,60的语法树识符 <标识符,rate> 赋值语句 rate 标识符 表达式 表达式 表达式 oSition 标识符表达式*表达式 与1.1.3 标识符 数 initia 不同的 语法树 rate 60
1.2 源程序 “分析” 赋值语句 标识符 = 表达式 表达式 + 表达式 标识符 表达式 * 表达式 position initial 标识符 rate 数 60 position = initial + rate * 60 的语法树 标识符 | => <标识符, rate> rate 1.2.2 语法分析 (层次分析) 与1.1.3 不同的 语法树
2源程序“分析 122语法分析(层次分析) 程序的层次结构通常由递归规则定义: 规则1:任何<标识符>是<表达式 规则2:任何<数>是<表达式> 给定<表达式1>和<表达式2>,则下述也是表 达式 规则3:<表达式1>+<表达式2 规则4:<表达式1>*<表达式2> 规则5:(<表达式1>) 那些是更 基本的规 则呢
1.2 源程序 “分析” ◼ 程序的层次结构通常由递归规则定义: 规则1:任何<标识符>是<表达式> 规则2:任何<数>是<表达式> ◼ 给定<表达式1>和<表达式2>,则下述也是表 达式 规则3:<表达式1> + <表达式2> 规则4:<表达式1> * <表达式2> 规则5:(<表达式1> ) 1.2.2 语法分析 (层次分析) 那些是更 基本的规 则呢?
.2源程序“分析 123词法分析S语法分析 线性VS层次 非递归定义VS递归定义 三型文法VS二型文法( more on later.) 用自然语言表述计算机语言显示 了它的不足,需要一种更为严谨 更易评价的表达方法来刻画词法 和语法等语言要素
◼ 线性 VS 层次 ◼ 非递归定义 VS 递归定义 ◼ 三型文法 VS 二型文法 (more on later…) 用自然语言表述计算机语言显示 了它的不足,需要一种更为严谨 更易评价的表达方法来刻画词法 和语法等语言要素。 1.2.3 词法分析 VS 语法分析 1.2 源程序 “分析
2源程序“分析 123语义分析 ■检查是否存在语义错误,获取类型信息。 ■类型检查 position position 米 initial initial rate 60 rate interal 60
◼ 检查是否存在语义错误,获取类型信息。 ◼ 类型检查 1.2.3 语义分析 1.2 源程序 “分析” position = + rate initial * 60 position = + rate initial * 60 int2real