编译原理 第一章 词法分析

本文介绍了编译原理中的词法分析,包括词法分析器的作用和实现。词法分析器根据模式识别串中的单词,并标记属性信息。文章详细讲解了正规式和有限状态自动机(NFA、DFA)的概念,为实现词法分析器提供了理论基础。
摘要由CSDN通过智能技术生成

编译原理 第一章 词法分析

转自:https://segmentfault.com/a/1190000011139389

 

词法分析器的作用

词法分析器(scanner), 在第〇章我们已经说过它的作用: 识别所有标识符并对其标记属性信息. 这篇内容讲解这个过程是如何实现的.

首先, 先引入三个概念: 单词模式就是我们通常说的字符串, 是一个一维的逻辑结构, 按照某个特定顺序存储了一些符号; 单词就是符合某一模式的串; 那么什么是模式呢? 简单的说就是字符的形成规则. 比如在 C 中, 我们知道变量的名字由字母, 数字, 以及下划线组成, 且数字不可以出现在首位. 除此之外, 变量名不可以与保留字相同(比如不可以"int for = 3;"). 这就是一条规则. 根据这个模式(规则)我们可以识别出给定字符串的若干字串, 这些字串便是满足这一模式的单词.

有了上面的概念, 我们便可以进一步描述词法分析器的任务: 根据约定的模式, 识别出串中的单词, 并标记其属性信息(比如识别出一个数字常量, 它的属性可能是它的存储类型(可能涉及类型转换)以及数字的值, 识别出一个操作符; 它的属性可能是它代表的操作含义;).

举个例子, 我们有串"float aaa = bb 12.23". 我们有这样的几个规则(并非C标准), "float 是类型名, 指的是浮点数", "变量名由字母组成", " 是操作符, 指的是乘法", "数字常量由数字(+ "." + 数字)". 经过词法分析器, 我们应该可以得到这样的记号流: "<TYPE, FLOAT> <ID, "aaa"> <OP, SET> <ID, "bbb"> <OP, MUL> <NUM, FLOAT, "12.23">".

 

通常在识别单词的时候, 可能会发现有些串有二义性. 也就是说同一个串可能符合多个模式. 比如, "while"是 C 的保留字, 但是我的变量名可以定义为"while_count_ge_0".

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值