词法分析与正则表达式 (一)

严格来说,词法分析是语法分析的一部分。可是将词法分析从语法分析中抽离出来,有如下好处。


1. 简化语法分析器的设计。如果把空白字符和去除注释这些功能都交给语法分析器来处理,那语法分析器的结构会变得非常简单。

2. 提高编译器效率。编译器耗时最大的部分消耗在词法分析阶段。因为词法分析涉及到文件读操作。而将词法分析器抽离出来,有利于设计更有效的专门的处理器。

3. 增强编译器的移植性。与设备有关的字符以及程序语言的特殊字符集可以限制在词法分析器中。



一个词法分析器的输入是源代码,本质上可以看做是一个字符串。而它的输出是“记号”流。一个“记号”由一个模式来描述。凡是匹配该模式的字符串都被标识成相同的记号。而记号的模式通常是一个正则表达式,或者说正则文法。


在程序语言中,记号的类型包括:关键字,操作符,变量标识符,数值常量,字符串常量和运算符。


1. 关键字


关键字对应的文法非常简单。例如if关键字对应的产生式为

<IF> -> if

注意左边的<IF>是非终结符,而右边的if是由i和f两个字符(终结符)组成的串。


类似地,我们可以定义其他关键字。


2. 操作符


例如乘法运算符对应的产生式为


<MULT_OP> -> *


注意左边的<MULT_OP>是非终结符,而右边的*是字符(终结符)。


其他记号的定义涉及到正则表达式的知识。下一篇博文继续介绍。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值