编译原理词法分析--A__状态转换图-表驱动法

合集下载

编译原理 第2章 词法分析

编译原理 第2章 词法分析

㈢单词二元式编码
经词法分析后,单词用二元式 (code,val) 表示。 code表示单词的种别,用整数码表示。单词种别表示单词 的语法特性,在语法分析时使用。 val表示单词的值,在本书中用字符串表示。单词值表示了 单词的语义特性,在语义分析时使用。
㈣编码原则
通常将标识符归为一种,常数按类型分种,基本字、运算 符及界符采用一符一种。 如果一个种别仅包含一个单词,那么单词种别就可代表该 单词,无需给出单词值。为了输入和处理的方便,无意义的 单词值用字符串"NUL"表示。若一个种别含有多个单词,除 给出种别外,还需给出它的值。
②预处理主要工作 删除注释 删除续行符,以及后续换行符(0AH)。 换行符、TAB和空格具有界符作用,预处理时通常予以保留。 在后面的分析中可以看到,它们的存在反而给后续的单词识别 带来方便。为了简化判断,可在预处理时,将换行符和TAB统 一替换为空格。 大多数语言(除C语言)不区分大小写,可在预处理时,将 大写字母变换成小写字母,或相反,以方便后续处理。 对于受书写格式限制的语言(例Fortran和Cobol),还应识 别标号区,正确给出语句标号。识别续行标志,把相继行捻接 在一起,给出语句结束符。 上述源程序经预处理后,扫描缓冲区中的内容如下所示:
第2章 词法分析
2.1 词法分析器的设计考虑及手工构造
2.1.1 单词类型及二元式编码 2.1.2 源程序的输入及预处理 2.1.3 基本字的识别和超前搜索 2.1.4 遍 2.1.5 状态转换图和词法分析器的手工构造
2.2 正规式、自动机及词法分析器的自动生成
2.2.1 2.2.2 2.2.3 2.2.4 2.2.5 基本概念 正规式与正规集 确定有限自动机(DFA) 非确定有限自动机(NFA) 正规式与确定有限自动机的等价性

编译原理 3.2正规文法和状态转换图

编译原理 3.2正规文法和状态转换图
S2,…,Sn为行,以各个输入符号a1,a2,…,am 为列,组成一个n行m列矩阵:
2020/6/18
B=
状态 vt S1 S2 … Si … Sn
a1 a2 a3 … aj … am
B23 Bij
第25页/共24页
其中,元素 Bij=B[Si,aj] 指明下一状态 Sk 和 扫描器此时应完成的语义动作;
助记符
while if else
switch case id num
+ − * relop relop relop = ;
内码值
— — — — —
id在符号表中位置
num在常数表中位置


— LE LT EQ — —
第33页/共24页
2 C语言子集对应的状态转换图的设计 首先对输入串做预处理。
即剔除多余的空格、注释、制表符和 换行符等。
由于直接使用整数编码不利于记忆, 故采用一些助记符表示种别编码。
2020/6/18
第32页/共24页
表1 C语言子集的单词符号及内码值
单词符号
while if else
switch case 标识符 常数
+ − * <= < == = ;
2020/6/18
种别编码
1 2 3 4 5 6 7 8 9 10 11 11 11 12 13
(2)状态4识别出一个常数后可以将它 转换成二进制常数再登录到常数表,然后返 回它在常数表中的入口指针作为内码值。
2020/6/18
第37页/共24页
3 状态转换图的实现 状态转换图易于用程序实现,最简单的
办法是让每个状态对应一小段程序。对于 图3–00,首先引进一组变量和过程:

编译原理 3.2正规文法和状态转换图

编译原理 3.2正规文法和状态转换图

2020/6/18
第30页/共24页
一个简单的词法分析器示例
1 C语言子集的单词符号表示 2 C语言子集对应的状态转换图的设计 3 状态转换图的实现
2020/6/18
第31页/共24页
1 C语言子集的单词符号表示
大多数程序语言的单词符号都可用 状态转换图予以识别。下面构造一个C 语言子集的简单词法分析器,该C语言 子集的所有单词符号及其种别编码和内 码值如下表所示。
开始符号S作为初始状态; S 设一符号F不属于V作为终止状态; F
2020/6/18
第7页/共24页
形如A→aB的规则:从结点A引一条矢线到结
点B,并用符号a标记这条矢线;
a
A
B
形如A→a的规则:从结点A引一条矢线到终态
结点F,并用符号a标记这条矢线;
a
A
F
2020/6/18
第8页/共24页
则有:S=> a1A1=> a1 a2A2=> a1 a2 a3A3=> … => a1 a2 a3 … an-1An-1=> a1a2a3…an
事实上,在利用状态转换图M对符号串ω进行识别的 过程中,M中的每一次状态转换都模拟了G中的一步 直接推导,所以,上述方法是一个自顶向下的分析
方法。
2020/6/18
a
R
A
2020/6/18
第16页/共24页
例如:G[Z]:Z→U0∣V1 U →Z1∣1 V →Z0∣0
1
2020/6/18
1
U
初态 R
0
V
0
Z
1
0
第17页/共24页
二、状态图的使用——识别句子

第3章 词法分析 (编译原理 陈火旺)

第3章 词法分析 (编译原理 陈火旺)

标识符的符号表入口地址作为其单词符号的属性值,常
每个基本字占一个单词种别,单词符号的属性值缺省。
对于界符,运算符通常一个符号一个种别,单词符号的
属性值缺省
例: 参见P42.表3.1 单词符号及种别编码
10
3.1.3 词法分析器作为独立子程序

词法分析可采用如下两种处理结构:
把词法分析程序作为主程序。将词法分析作为
19
3.2.1 正规文法、正规式与正规集

正规集:由正规文法产生的语言所构成的集合。
注:正规集是集合,可有穷也可无穷。 可通过正规式来形式化表示。

对于一个正规文法的语言提炼出一个简洁的公式,用这个
式子来对它进行形式化的表示,这个式子叫正规式。

正规式:也称正则表达式,是说明单词的模式的一种重要的 表示法(记号);是定义正规集的数学工具;用来描述单词 符号。
在设计一个编译程序时,通常是把对源程序的结构分析分为词 法分析和语法分析两个相对独立的阶段来完成。
第一,描述单词的结构比描述源程序的其它语法结构要简单

得多,仅使用3型文法也就基本够用了。
第二,由于把词法分析和语法分析分开,可使编译程序各部

分的功能更为单一,整个编译程序的结构也更加清晰,从而 有利于编译程序的编写和调整。 上述词法分析和语法分析两个阶段的划分,仅仅是对整个编译 程序的逻辑功能而言,而不一定指的是编译程序的执行流程。
25
例3.2 判断下述正规式之间是否等价: (1)b(ab)*与(ba)*b (2)(ab)*与a*b* 解: (1) b(ab)*对应的正规集是b后面出现任意多个ab对
L(b(ab)*)={b,bab,babab, ……}

词法分析器 编译原理

词法分析器   编译原理

《编译原理》——词法分析器学院:专业:姓名:学号:一、序言编译,简单的说,就是把源程序转换为可执行程序。

编译程序的工作,从输入源程序开始到输出目标程序为止的整个过程,是非常复杂的。

而此法分析是编译程序工作过程的第一环节。

这篇报告主要讲了词法分析器的原理,最后会给出一个词法分析器的简单实现。

二、实验目的设计一个词法分析程序,理解词法分析器实现的原理,掌握程序设计语言中的各类单词的词法分析方法,加深对词法分析原理的理解。

三、词法分析原理3.1 词法分析的任务是:输入源程序,对构成源程序的字符串进行扫描和分解,识别出一个个的单词(亦称为单词符号或简称符号),如基本字(begin、end、for、if、while等),标识符、常数、算符、和界符(标点符号、左右括号等等)。

例如,对于pascal的循环语句For I:=1 to 100 do词法分析的结果是识别出如下的单词符号:基本字for标识符I赋值号:=整常数 1基本字to整常数100基本字do3.2 输出:词法分析器所输出单词符号常常表示成如下的二元式:(单词种别,单词符号的属性值)单词种别通常用整数编码。

标识符一般统归为一种。

常数则宜按类型(整、实、布尔等)分种。

关键字可将其全体视为一种。

运算符可采用一符一种的方法。

界符一般用一符一种的方法。

对于每个单词符号,除了给出了种别编码之外,还应给出有关单词符号的属性信息。

单词符号的属性是指单词符号的特性或特征。

例子:C++代码段:while(i>=j) i--经词法分析器处理后,它将被转为如下的单词符号序列:<while, _><(, _><id, 指向i的符号表项的指针><>=, _><id, 指向j的符号表项的指针><), _><id, 指向i的符号表项的指针><--, _><;, _>3.3 词法分析分析器作为一个独立子程序词法分析是编译过程中的一个阶段,在语法分析前进行。

编译原理-词法分析

编译原理-词法分析
单词:标识符,保留字,常数,算符,界符 词法分析阶段的工作所依循的是语言的词法规
则。描述词法规则的有效工具是正规式和有限 自动机。
2
3.1 对词法分析器的要求
3.1.1 词法分析器的功能和输出形式
输入源程序,扫描识别, 输出单词符号 程序语言的单词符号一般分为五种:
关 键 字 ( 保 留 字 或 基 本 字 ) : 如 begin,end,if,then,else,while,do等
正规式
正规集
1. ba*
Σ上所有以b为首后跟着
任意多个a的字。
2. a(a|b)*
Σ上所有以a为首的字。
3. (a|b)*(aa|bb)(a|b)* Σ上所有含有两
个相继的a或两个相继的b 的字。
28
正规式与正规集: 例3.2
例3.2: 令Σ={A,B,0,1} , 则:
正规式
正规集
1. (A|B)(A|B|0|1)* 体
字母或数字 0 字母 1 其他 2 *
16
状态转换图识别字符串: 例
识别标识符的状态转换图。其中0为初态,2 为终态。
状态2是终态,它意味着到此已经识别出一个 标识符。终态上打个*号,表示多读进了一个 不属于标识符部分的字符,应把它退还给输入 串。如果在状态0时输入字符不为“字母”, 则意味着这个转换图不工作。
24
正规式定义
正规表达式
正规表达式对应的正规集
1. ,
{},
2. a
{a}
3. 若 r, s
L( r ) , L(s)
则 选择 rs
L( r ) L(s)
连接 r ∙ s
L( r ) ∙ L(s)
闭包 r *

编译原理课件-词法分析

编译原理课件-词法分析
有窮自動機分為兩類:確定的有窮自動機 (Deterministic Finite Automata)和不確定的有 窮自動 機(Nondeterministic Finite Automata) 。
關於有窮自動機將討論如下內容
確定的有窮自動機DFA 不確定的有窮自動機NFA NFA的確定化 DFA的最小化
VT={a,d} VN={S,A,B}
A B(ad)B B
AdB
正規文法和正規式
對G=(VN,VT,P,S),存在一個 =VT上的正規式R : L(R)=L(G)
AxB AxAy Axy
, By ≈ A=xy ≈ A=xy ≈ A=xy
正規文法和正規式
G[s]:SaA|a AaAadAd
A(ad)A(ad)
=f(Q,b)=Q
Q屬於終態。
得證。
a
Ua b, a
S
b
aQ
b
V
b
DFA M所能接受的符號串的全體記為L(M).
對於任何兩個有窮自動機M和M′,如果L(M)=L(M′),則 稱M與M′是等價的.
結論:
上一個符號串集V是正規的,當且僅當存在一個上 的確定有窮自動機M,使得V=L(M)。
DFA的確定性表現在轉換函數f:K×Σ→K是一個單值函 數,也就是說,對任何狀態k∈K,和輸入符號a∈Σ, f(k,a)唯一地確定了下一個狀態。從狀態轉換圖來看, 若字母表Σ含有n個輸入字元,那麼任何一個狀態結 點最多有n條弧射出,而且每條弧以一個不同的輸入 字元標記。
狀態
字元
a
S
U
U
Q
V
U
Q
Q
b
V0
V0
Q0
Q

编译原理之词法分析PPT课件

编译原理之词法分析PPT课件
–直接管理源程序字符流的读入
12
Wensheng Li BUPT @ 2008
二、设置缓冲区的必要性
超前搜索:为了得到某一个单词符号的确切性质, 需要超前扫描若干个字符。
例:有合法的FORTRAN语句: DO99K=1,10 和 DO99K=1.10
为了区别这两个语句,必须超前扫描到等号后的第一个 分界符处。
开始指针 向前指针
16
Wensheng Li BUPT @ 2008
测试指针的过程(2)
向前指针前移一个位置; IF (向前指针指向 eof ) {
IF (向前指针在左半区的终点) { 读入字符串,填充右半区; 向前指针前移一个位置;
}; ELSE IF (向前指针在右半区的终点) {
读入字符串,填充左半区; 向前指针指向缓冲区的开始位置; }; ELSE 终止词法分析; }
P1
P2
唤醒P2 唤醒P2
唤醒P1 唤醒P1
Wensheng Li BUPT @ 2008
8
分离词法分析程序的好处
可以简化设计
–词法程序很容易识别并去除空格、注释,使语法分析程序 致力于语法分析,结构清晰,易于实现。
可以改进编译程序的效率
–利用专门的读字符和处理记号的技术构造更有效的词法分 析程序。
11
Wensheng Li BUPT @ 2008
一、词法分析程序的实现方法
利用词法分析程序自动生成器
–从基于正规表达式的规范说明自动生成词法分析程序。 –生成器提供用于源程序字符流读入和缓冲的若干子程序
利用传统的系统程序设计语言来编写
–利用该语言所具有的输入/输出能力来处理读入操作
利用汇编语言来编写
基本方法
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
相关文档
最新文档