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

词法分析

一、一些概念

  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 

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值