词法分析 231对于词法分析器的要求 词法分析器的功能和输出形式 ●功能:输入源程序、输出单词符号 ●输出的单词符号的表示形式: (单词种别,单词自身的值) 单词符号的种类: 基本字:如 begin, repeat,, ●标识符表示各种名字:如变量名、数组 名和过程名 常数:各种类型的常数 ●运算符:+,-,*,/, °界符:逗号、分号、括号和空白
2.3.1 对于词法分析器的要求 一、词法分析器的功能和输出形式 功能:输入源程序、输出单词符号 输出的单词符号的表示形式: (单词种别,单词自身的值) 单词符号的种类: ⚫ 基本字:如 begin,repeat, ⚫ 标识符——表示各种名字:如变量名、数组 名和过程名 ⚫ 常数:各种类型的常数 ⚫ 运算符:+,-,*,/, ⚫ 界符:逗号、分号、括号和空白 词法分析
例C程序 while(i=jiai e输出单词符号:
例 C程序 while (i>=j) i--; 输出单词符号: <>=, ->
例F0 RTRAN程序 IF(5. EQ M)GOTO 100 输出单词符号: 逻辑IF(34, 左括号(2, 整常数(20,“5的二进制) 等号 (6,-) 标识符(26,“M) 右括号(16, GOTO (30,-) 标号 (19,(100的二进制)
例 FORTRAN程序 IF (5.EQ.M) GOTO 100 输出单词符号: 逻辑IF (34,-) 左括号 (2,-) 整常数 (20, ‘5’的二进制) 等号 (6,-) 标识符 (26, ‘M’) 右括号 (16,-) GOTO (30,-) 标号 (19, ‘100’的二进制)
词法分析器与语法分析器的关系 单词符号 源程序词法分 语法分 析器 析器 取下一单词 符号表
词法分析器与语法分析器的关系 词法分 析器 语法分 析器 符号表 源程序 单词符号 取下一单词
2.3,2词法分析器的设计 预处理 输入列表 子程序仁输入缓冲区 扫描器-扫描缓冲区 单词符号 词法分析器的结构
词法分析器的结构 预处理 子程序 扫描器 输入缓冲区 扫描缓冲区 单词符号 输入 列表 2.3.2 词法分析器的设计
、输入、预处理 ●输入串放在输入缓冲区中。 ●预处理子程序:剔除无用的空白、跳格 回车和换行等编辑性字符;区分标号区、 捻接续行和给出句末符等 ●扫描缓冲区 起点搜索 指示器指示器
输入串放在输入缓冲区中。 预处理子程序:剔除无用的空白、跳格、 回车和换行等编辑性字符;区分标号区、 捻接续行和给出句末符等 扫描缓冲区 ↑ ↑ 起点 搜索 指示器 指示器 一、输入、预处理
二、单词符号的识别:超前搜索 1基本字识别 例如 FORTRAN语言中关键字不加以特殊保护: DO99K=1,10 2(D099K=1.10 3 IF(5.EQ M)GOT055 4IF(5)=55 5IF(M)10,5,6 ●都正确,需要超前搜索才能确定哪些是基本字
二、单词符号的识别:超前搜索 1 基本字识别: 例如FORTRAN语言中关键字不加以特殊保护: 1 DO99K=1,10 2 DO99K=1.10 3 IF(5.EQ.M)GOTO55 4 IF(5)=55 5 IF(M)10,5,6 都正确,需要超前搜索才能确定哪些是基本字
单词符号的识别:超前搜索 逻辑语句的一般形式: IF〈条件〉语句 例:|F(NLE100)N=N+1 ●算术语句 ●一般形式:IF〈算术表达式〉N1,N2,N3 当算术表达式的值小于0时执行标号为N的语句, 等于0时执行标号为N2的语句,大于0时执行标号为 N3的语句
单词符号的识别:超前搜索 逻辑IF语句的一般形式: ⚫ IF〈条件〉 语句 ⚫ 例:IF (N.LE.100) N=N+1 算术IF语句 ⚫ 一般形式: IF〈算术表达式〉 N1,N2,N3 ⚫ 当算术表达式的值小于0时执行标号为N1的语句, 等于0时执行标号为N2的语句,大于0时执行标号为 N3的语句
2标识符识别 字母开头的字母数字串,后跟界符或算符 3常数识别 识别出算术常数并将其转变为二进制内码表 示。有些也要超前搜索。 5. EQ M 5.E08 ●逻辑常数和用引号括起来的字符串常数一般 都好识别,但 FORTRAN的文字常数的识别较麻 烦,如:3HABC ●当分析器读到尾跟H的无符号常数时要先把该常 数的值翻译出来,然后把H后的n个字符作为字 符串常数输出
2 标识符识别: ⚫ 字母开头的字母数字串,后跟界符或算符 3 常数识别: ⚫ 识别出算术常数并将其转变为二进制内码表 示。有些也要超前搜索。 5.EQ.M 5.E08 ⚫ 逻辑常数和用引号括起来的字符串常数一般 都好识别,但FORTRAN的文字常数的识别较麻 烦,如:3HABC。 ⚫ 当分析器读到尾跟H的无符号常数时要先把该常 数的值翻译出来,然后把H后的n个字符作为字 符串常数输出
4算符和界符的识别 把多个字符符合而成的算符和界符拼合成 个单一单词符号 米米,.EQ.,++
4 算符和界符的识别 ⚫ 把多个字符符合而成的算符和界符拼合成一 个单一单词符号。 :=, **, .EQ. , ++,--,>=