词法分析

一、一些概念

  1. 词法单元:编程语言中合法的字符串
  2. 词法记号:满足某种规则的词法单元,采用同一种记号
  3. 词法模式:词法单元和词法记号的对用规则

举个例子

编译原理学习笔记之词法分析

词法分析器需要给记号以属性,用属性来记住记号的附加信息,以便需要时使用它们。比如

编译原理学习笔记之词法分析

其中三个_op不是二元组,因为其第一个成分足以辨别词法单元,因此可以省略第二个部分

二、串和语言

串和语言:语言是串的集合,串是词法单元的集合

1.串的运算

  • 连接:xys ε= ε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 

匹配过程可以基于有限状态机来完成,下篇继续

相关文章: