词法分析
一、一些概念
- 词法单元:编程语言中合法的字符串
- 词法记号:满足某种规则的词法单元,采用同一种记号
- 词法模式:词法单元和词法记号的对用规则
举个例子
词法分析器需要给记号以属性,用属性来记住记号的附加信息,以便需要时使用它们。比如
其中三个_op不是二元组,因为其第一个成分足以辨别词法单元,因此可以省略第二个部分
二、串和语言
串和语言:语言是串的集合,串是词法单元的集合
1.串的运算
- 连接:xy,s ε= εs = s (其中ε代表空字符串)
-
积(指数)
2.语言的运算
举个例子
解答:
L∪D表示字母和数字的集合
LD表示首位是一个字母后面一个数字的串的集合
L6表示六个字母组成的串的集合
L*表示所有字符串的集合(可以为空)
L(L∪D)*表示以字母开头的所有字母与数字组成的字符串的集合
D+表示所有数字组成的串的集合(不包括空)
三、正规式
1.正规式(Regular Expression),又称正则表达式
- 正规式:按照一组定义规则,由较简单的正规式构成的,每个正规式 r 表示一个语言 L(r).
- 定义规则说明 L(r) 是怎样以各种方式从 r 的子正规式所表示的语言组合而成。
- 正规式用来表示简单的语言,叫做正规集
2.运算优先级
* 运算 》 任何连接运算 》 | 运算
比如 ((a) (b)*)| (c) 可以写成 ab*| c
举个例子
再来个难的
(00|11 | ( (01|10) (00|11) * (01| 10))) *
上面的正规式实际上表示由偶数个0和偶数个1组成的串
3.正规定义
正规定义就是将正规式命名为更简洁的代号
比如用letter 定义字母集
用digit 定义数字集
这样在使用时更加方便
4.简化规则
- r+ = rr*
- r? = r | ε
- [a-z] = a|b|....|z
匹配过程可以基于有限状态机来完成,下篇继续