词法分析
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
例如:Σ ={a,b} Σ *={ε ,a,b,aa,ab,ba,bb,aaa,aab,…}
Σ 的正闭包:上除ε 外的所有符号串组成的
集合记为+ ,Σ +称为Σ 的正闭包。
例如:Σ ={a,b} Σ +={a,b,aa,ab,ba,bb,aaa,aab,…}
18
2.2正则表达式
2.2.1 基本概念和术语
例如00, 11, 10 是字母表 ={0,1} 字母表A={a,b,c}上的符号串有:
a,b,c,ab,aaca等。
在符号串中,符号的顺序是很重要的,符
号串ab就不同于ba,abca和aabc也不同。
12
符号串的长度 如果某符号串x中有m个符号,
则称其长度为m,表示为|x|=m,如001110 的长度是6。 空符号串,即不包含任何符号的符号串,用 ε 表示,其长度为0,即|ε |=0。
14
例;若x=ab 则: x0 = ε x1 =ab x2 = abab x3 = ababab xn = xxn-1 = xn-1x
(n>0)
15
符号串集合:若集合A中所有元素都是
某字母表上的符号串,则称A为字母表 上的符号串集合。 符号串集合的和与积 设A,B为两个符号串集合,定义 和 A+B(或AB) ={w|wA,或wB} 积 AB={xy|xA,yB}
2.2.2 正则表达式的定义
2.2.3 正则表达式基本等价关系
2.2.4 正则表达式的扩展
2.2.5 单词的正则表达式举例
19
2.2.2正则表达式的定义
正则表达式就是用特定的运算符及运算对象按 某种规则构造的表达式。
2.2.4 正则表达式的扩展
2.2.5 单词的正则表达式举例
10
百度文库
2.2.1 基本概念和术语
字母表(符号表、符号集) 由若干元素
(符号、字母)组成的有限非空集合。 不同的语言可以有不同的字母表,例如 汉语的字母表中包括汉字、数字及标点 符号等。
11
符号串 由字母表中的符号组成的任何有
穷序列称为符号串: 上的符号串。
词法分析器
<IF,if> <ID,y> <LT,< > <NUM,3> <THEN,then ><ID,x > <EQ,=> <NUM,0>
<词型,词义> 类型 串值 例 ID 表示 标识符 类型 x 表示 具体的标识符串
5
定义逻辑项token的数据类型: typedef struct
{ TokenType tokenval;
式也是非常有用的工具。 所谓正则表达式就是用特定的运算符及运算 对象按某种规则构造的表达式。 例如:a* 匹配 空串ε, a, aa, aaa, …
其表示的是一个集合,记为L(a*)。
9
2.2正则表达式
单词的描述工具
2.2.1 基本概念和术语
2.2.2 正则表达式的定义
2.2.3 正则表达式基本等价关系
13
符号串的连接:设x和y是符号串,它们的连
接xy是把y的符号写在x的符号之后得到的符 号串。
例如 x=ST,y=abu,则它们的连接 xy=STabu,|x|=2,|y|=3,|xy|=5 由于ε的含义,显然有εx=xε=x。
符号串的方幂:符号串自身连接n次得到的符
号串xn 定义为 xx…x; n个x x1=x, x2=xx 且x0=ε
16
若用表示空集,则有: A+ = +A = A A = A = {}A = A{} = A 例:若集合A=ab,cde ,集合B = 0,1, 则AB =ab1,ab0,cde0,cde1;
17
Σ 的闭包:用*表示上的一切符号串(包括
ε )组成的集合,Σ *称为Σ 的闭包。
union
Token 类型
Token 词义
{ char *stringval; int numval;
} attribute; }TokenRecord;
补充: union数据类型
6
词法分析程序的函数接口: TokenRecord getToken(void); 源程序
Token 词法分析程序 语法分析程序 getToken()
2.1 词法分析器的作用
词法分析器(词法分析程序)的任务:从源 代码中读取输入字符,产生单词序列(生 成独立的有意义的逻辑单元称作单词 (token)),提交给语法分析使用。
1
任务:逐个读入源程序字符并按照构词规则切分 成一系列单词。单词是语言中具有独立意义的 最小单位,包括保留字、标识符、运算符、标 点符号和常量等。
< the,冠词> < big,形容词> < elephant,名词> < ate,动词> < peanut,名词> <词义,词型>
3
词法分析器的输出: token序列 token表示的字符串(串值或词义): if , y, >,3,then,x,=,0 token的类型(词法):
关键字(if, else, for,int,return…)
符号表
7
第2章 词法分析
2.1 词法分析器的作用 2.2 正则表达式 2.3 有穷自动机 记号的识 别系统 2.4 从正则表达式到DFA 2.5 用代码实现有穷自动机 设计和 2.6 利用lex自动生成词法分析
记号的描 述工具
程序
实现词 法分析 程序
8
正则表达式:
正则表达式用来描述单词结构(定义单词)。 对自动生成词法分析程序而言,正则表达
识别出源程序中的单词; 删除无用的空白字符及注释(空格、回车 等),这些信
息仅增加了源程序的可读性,便于程序员阅读和维护程 序,而对于语法分析是完全无用的。 进行词法检查,能够检测出输入中不能形成源语言任何 单词的错误字符串。
2
The big elephant ate the peanut. 词法分析的结果:
操作符(+ , -, <, >……)
数字 (3, 45,…)
标识符(x, y, name…) 补充:typedef enum 类似宏 { IF, THEN, PLUS, MINUS, NUM,ID} TokenType ;
4
例如:C源代码:if y<3 then x=0,词法 分析器的输出是? if y<3 then x=0