编译原理 第八章

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
else error end;
电子科技大学计算机科学与工程学院
程序设计语言与编译
补充
S→ S→ A→ A→ A→ A→ aA a aA dA a d 初态 a a,d d
S
A
a
Z 终态
对于右线形正则文法,状态转换图构造步骤如下: ①以每个非终结符为状态结点,开始符号对应初态 S; ②增设一个终态 Z;
程序设计语言与编译
一个例子 A:=B50+10; 的输出为: (标识符的编码,‘A’) (:=的编码,—) (标识符的编码,‘B50’) (+的编码,—) (整数的编码,‘10’) (;的编码,—)
电子科技大学计算机科学与工程学院
程序设计语言与编译
第二节 词法分析器的结构
一. 扫描缓冲区
1. 输入缓冲区:源程序输入缓冲区 2. 预处理程序:取消注解,剔除无用的空 白、跳格、回车、换行等
retract; dtb; return($INT,val) end; ‘ = ’: return($EQ,—); ‘ - ’: return($SUB,—);
while letter or digit do begin concatenate;getchar end; retract; c:= reserve; if c = 0 then begin buildlist; return($ID,val) end else return(c,—) end;
end;
‘ > ‘: begin getchar; if character = ‘ = ‘ then return($GE, —); retract; return($GT, —) end; ‘ : ‘: begin getchar;
if character = ‘ = ‘ then return($ASSIGN,—)
电子科技大学计算机科学与工程学院
程序设计语言与编译
2.单词的输出形式
(1)二元式
(单词类别,单词的属性)
区分单词所属的类(整数编码)
单词的值
电子科技大学计算机科学与工程学院
程序设计语言与编译 (2)单词类别的划分
基本字、运算符、界符:一字一码 标识符:单列一种 常数:按类型分类
电子科技大学计算机科学与工程学院
电子科技大学计算机科学与工程学院
程序设计语言与编译
start: token:=‘ ‘;
getchar;getnb; case character of ‘a’…’z’: begin ‘0’…’9’: begin while digit do
begin concatenate;getchar end;
电子科技大学计算机科学与工程学院
程序设计语言与编译
单词符号 种别编码 begin end integer 01 02 03 助忆符 $BEGIN $END $INTEGER 内码值 单词符号 种别编码 标识符 常数 = <> <= 10 11 12 13 14 助忆符 $ID $INT $EQ $NE $LE 内码值 字符串 二进制值 -
‘ * ’: return($MUL,—); ‘ ( ’: return($LPAR,—); ‘ ) ’: return($RPAR,—);
电子科技大学计算机科学与工程学院
程序设计语言与编译
‘ < ‘: begin getchar; if character = ‘ = ‘ then return($LE, —) else if character = ‘>’ then return($NE, —); retract; return($LT, —) ‘ ; ‘: return($SEM,—) other: error end of case; goto start;
电子科技大学计算机科学与工程学院
程序设计语言与编译
3.扫描缓冲区:从输入缓冲区输入固定长度的字符串到另一 个缓冲区(扫描缓冲区),词法分析可以直接在此缓冲区中 进行符号识别。扫描缓冲区的结构:
起点指针:用来指示正在扫描的单词的起点; 搜索指针:用于向前搜索,寻找单词的结束; 双缓冲区结构:设置左右两个缓冲区,当左缓冲区读完后,新读 入的字符存入右缓冲区;反之,存放在左缓冲区; 左缓冲区 右缓冲区
x
2
电子科技大学计算机科学与工程学院
程序设计语言与编译
状态转换图识别的串
从初态出发到某一终态路径上字符的连接。 下图是识别标识符的状态转换图:
字母或数字
0
字母
1
其它字符
2
*
电子科技大学计算机科学与工程学院
程序设计语言与编译
内容回顾
1.词法分析功能 2.词法分析输出
(单词类别,单词的属性) 标识符、常数、基本字、 运算符符、界符
程序设计语言与编译
(1)基本字的识别
DO100I=1,10 DO100I=1.10 IF(5.EQ.M)GOTO 100 IF(5)=100
电子科技大学计算机科学与工程学院
程序设计语言与编译
(2)标识符的识别:读到非字母数字 (3)常数的识别:根据常数的格式;大多数 常数后都有运算符或界符 (4)运算符的识别:需要超前搜索,如** (5)界符的识别:需要超前搜索,如/*
助忆符 $SUB $MUL $ASSIGN $LPAR $RPAR $SEM
内码值 -
电子科技大学计算机科学与工程学院
程序设计语言与编译 二. 状态转换图
字母/数字 0 字母 1
13 其它字符 * 14 数字 返回($SUB,-) = 退一字符;查保留字表; : 15 16 * 数字 3 若是,返回(保留字种别,-) 4 返回($MUL,-) 非= * 17 非数字 若不是,返回($ID,标识符在符号表中的位置) ( 返回($ASSIGN,-) = 18 5 退一字符; )出错处理 * < 非= 19 6 7 返回($INT,常数在常数表中的位置) 返回($LPAR,; 返回($EQ,-) = 20 返回($RPAR,8 其他 21 ) 返回($LT,-),退一字符 > ) 9 返回($SEM,-) 返回($LE,-) * > 10非= 11 ERROR,非法字符 返回($NE,-) = 返回($GT,-),退一字符 12 返回($GE,-) 2
电子科技大学计算机科学与工程学院
程序设计语言与编译 三.词法分析器的结构
输入
输入缓冲区 预处理子程序
扫描缓冲区
词法分析器 单词符号
电子科技大学计算机科学与工程学院
程序设计语言与编译
第三节 状态转换图
状态转换图,简称转换图,是一张有限方向图,是设计词 法分析器的有效工具;它由如下成分构成: 1.结点(node):圆圈表示结点,代表状态(state) 2.有向边(弧):连接结点,边上的标记字符表示该 状态下可能接收或识别的字符; 有限的有向图 有向边上标记字符 唯一初态 若干终态(至少一个) 1 y 3
电子科技大学计算机科学与工程学院
程序设计语言与编译
2.词法分析器和语法分析器的关系
(1)词法分析作为单独的一遍
输入串
词法分析器
单词流
语法分析器
电子科技大学计算机科学与工程学院
程序设计语言与编译
(2)词法分析作为子程序
输入串
词法分析器
取 下 一 单 词
返 回 下 一 单 词
符号表
语法分析器
电子科技大学计算机科学与工程学院
其它符号
3
*
字母?
否 数字? 否 出口


电子科技大学计算机科学与工程学院
程序设计语言与编译
布尔函数;若char中的 将搜索指针回退一个字 检查char中字符是否为 布尔函数;若char中的 用token中的字符串查 其中c是种别编码,val 用来存放单词符号 全局量及过程: 用来存放最新读入的字符 从扫描缓冲区读一个字 字符为字母,返回真; 将token中的数字串转 符,并把已读入char的 处理出现的词法错误 把char中的字符连接到 空白;若是,调用 字符为数字,返回真; 保留字表,若查到,则 存放标识符在符号表中 将token中的字符串存 或者是token在符号表中 符进入char,并将搜索 否则,为假; 换成二进制值,并存入 字符用空白代替。 token getchar,直到char中 否则,为假; 返回该保留字的种别编 的位置,或常数在常数 入符号表中 位置,或者是在常数表 常数表中指针移向下一个字符 的字符不是空白符 码;否则返回0值 1.字符串变量char 表中的位置 中的位置,或者无定义 2.字符数组token 3.读一字符子程序getchar 9.查保留字子程序reserve 4.删除空白子程序getnbc 10.语句return(c,val) 5.连接字符串子程序concat 11.二进制转换子程序dtb 6.判定字母函数letter 12.标识符存符号表子程序id 7.判定数字函数digit 13.指针变量val 8.回退一字符子程序retract 14.错误处理子程序error
程序设计语言与编译
第八章 词法分析
主要内容
1.介绍词法分析的过程
2.讨论词法分析器的设计与实现 3.介绍实现词法分析器的主要工具:状态转换图
电子科技大学计算机科学与工程学院
程序设计语言与编译
第一节 词法分析概述
一. 词法分析的功能
1. 功能
扫描源程序的字符串,按照词法规则, 识别出单词符号作为输出;对识别过 程中发现的词法错误,则输出有关的 错误信息。
电子科技大学计算机科学与工程学院
程序设计Baidu Nhomakorabea言与编译
补充
<标识符>→<字母>(<字母>|<数字>)* <无符号整数>→ <数字> (<数字>)*
<标识符>→letter<标识符尾> <标识符尾>→ε |letter<标识符尾>|digit<标识符尾> <整数>→digit <整数尾> <整数尾>→ε | digit<整数尾>
电子科技大学计算机科学与工程学院
程序设计语言与编译
补充
Letter,digit letter digit 其它 + = (ADD,_) : digit (NUM,值) (ASG,_)
(IDN,入口)
电子科技大学计算机科学与工程学院
*
电子科技大学计算机科学与工程学院
程序设计语言与编译 三.实现方法
每个状态结对应一小段程序 分支状态——if或case语句 循环状态——while语句 终态——return语句
电子科技大学计算机科学与工程学院
程序设计语言与编译 锻炼
入口
字母或数字
0
数字
字母
1
其它字符
2
*
字母? 是 取字符

出口
2
3.单词的分类
4.单词的识别技术
字母或数字
超前搜索
其它字符
0
字母
1
2
*
电子科技大学计算机科学与工程学院
程序设计语言与编译
第四节 词法分析器的设计
一. 单词符号 第四章设计的语言允许下述单词: 标识符、数字串、begin、end、integer、if、 then、else、function、read、write、 -、*、<、<=、<>、 =、>、>=、:=、;、(、)
③对于规则 A→aB,画从状态 A 到 B 的弧,标记为 a;
④对于规则 A→a,画从状态 A 到终态 Z 的弧,标记为a
电子科技大学计算机科学与工程学院
程序设计语言与编译
补充
<标识符>→<字母> <标识符>→<标识符><字母> <标识符>→<标识符><数字> <字母>→A|„|Z|a|„|z <数字>→0|„|9
if
then else function read
04
05 06 07 08
$IF
$THEN $ELSE $FUNCTION $READ
-
<
>= >
15
16 17
$LT
$GE $GT
-
-
write
09
$WRITE
-
电子科技大学计算机科学与工程学院
程序设计语言与编译
单词符号 种别编码 * := ( ) ; 18 19 20 21 22 23
程序设计语言与编译 二. 词法分析器的输出形式
1. 单词的种类
标识符:用来命名程序中出现的变量、数组、 函数、过程、标号等 基本字:也可称关键字或保留字, 如if、while、 for、do、goto等 常数:各种类型的常数, 如216、3.14159、TRUE等 运算符:如+、-、*、/等 界符:如;、:、/*、*/等
起点指示器
搜索指示器
电子科技大学计算机科学与工程学院
程序设计语言与编译 二.符号的识别 根据语言规定的词法规则,进行识别;对 不同类型的单词符号,有不同的识别要求。
超前搜索 为了判定一个单词符号的类别,必须扫 描到某一地方,而该单词符号并没有这 么长,这种扫描方式叫做“超前搜索”
电子科技大学计算机科学与工程学院
相关文档
最新文档