首页 > 编程知识 正文

词法分析的两种分析方法,编译原理词法分析实验源代码

时间:2023-05-05 00:56:26 阅读:159291 作者:487

本文是词法分析的第一篇文章,主要介绍了词法分析过程中应该使用的基本概念、词法单位、模式和词素以及三者之间的关系,了解这些内容对学习词法分析过程非常重要。

词法分析器的作用词法分析是编译的第一阶段。 词法分析器的主要任务是读取源程序的输入字符,将其作为词素,生成词法单位系统并输出,该词法单位系统输出到句法分析器进行句法分析。 另外,由于词法分析器由编译器负责源程序的读取,除了识别词素外,还进行过滤源程序内的注释和空白,将编译器生成的错误信息和源程序的位置关联起来等其他工作总之,词法分析器的作用如下。

1 .读取源程序的输入字符,将它们转换为词素,生成词法单位制并输出;

2 .过滤源程序中的注释和空白

3 .将编译器生成的错误消息与源程序的位置关联起来;

4 .其他。

词法单元、模式和词素词法分析涉及三个重要的相关术语——词法单元、模式和词素:

-词法单元由词法单元名称和可选属性值组成。 词法单元名称是词法单元的引用(别名),是语法分析器处理的输入符号。 多个词素的词法单位名称相同时,可以添加属性值信息来区别这些词素。 词法单位名称影响句法分析中的决定,属性值影响句法分析后的这个词法单位的翻译(具体翻译成哪个词素)

-模式描述词法单位词素可能具有的形式;

-词素是与词法单元模式匹配的字符串(字符串),词法分析器将其识别为词法单元的实例。

为了进一步说明词法单位、模式和词素的关系,我们举一个例子。

PS :由于词法分析器通常与符号表交互,因此属性值经常以符号表中的条目为指针。

我们知道,在词法单元的规章中,每个词法单元都有记述其所有词素的模式。 正则表达式是描述词素模式的重要方法。 在实际介绍正则表达式之前,还必须了解字符串和语言以及相关的术语和运算。 这些内容有助于非常容易地理解正则表达式。

有字符串的符号集合上的字符串是该集合内的符号的穷序列。 此语句说明了字符串的两个特征。 第一,组成字符串的符号都来自某个符号的集合;第二,字符串的长度是可数的。 举一个例子,对于集合A={a,b,…,z,a,b,…,Z}来说,其字符串中只包含大小写,长度不可计数。

定义一些与字符串相关的术语。

字符串上的运算定义如下:

语言是给定符号集合上任何可数字符串的集合。 这个词有点抽象,我们把这个词分开来说明。 首先,语言是一个集合。 其次,该集合中的要素是字符串,集合的大小是任意的; 最后,这些字符串是根据符号的集合生成的。

定义语言运算,如下所示:

正则表达式正则表达式可用于描述词素模式。 正则表达式可以用小正则表达式递归构造。

让我举例说明一下。 关于符号集合={a,b},有以下几种。

-正则表达式a是语言{a};

-正则表达式a|b是语言{a,b};

-正则表达式(a|b ) ) a|b表示语言) aa、ab、ba、bb )。

-正则表达式a*是语言{、a、aa、aaa、…};

-正则表达式(a|b )表示语言(、a、b、aa、ab、ba、bb、aaa、…};

-正则表达式a|a*b表示语言{a,b,ab,aab,aaab,…}。

上面通过基本的并行运算、连接运算、闭包运算递归定义了正则表达式。 此外,为了提高正则表达式描述字符串模式的能力,对正则表达式的扩展也很常见。 介绍几个典型的扩展。

在词法单位的识别中,介绍了用正则表达式表达模式的方法。 接下来介绍根据词法单位的模式识别与该模式匹配的词素的方法。 为此,首先将模式转换为状态转移图。

状态转移图由表示状态的节点和表示输入字符的一组边构成,词法分析器在扫描输入字符串的过程中寻找与模式匹配的词素,状态转移图的各状态表示该过程中可能发生的情况。 一个状态转移图具有以下特征。

-初始状态由标记为“start”的边缘表示,没有起始节点。 在导入输入符号之前,状态转移图始终处于其初始状态。

-有一个用双圈表示的最终状态。 这些状态表明找到了词素;

-有几种回退状态,该状态附近显示“*”。 识别“34”字符串时,只有在扫描“”符号时,前面的数字符号“3”才是确定的。 此时词素“3”被识别,需要返回1个字符。

字句单元relop的状态转移图如下所示。 这表示比较运算符,=,=。

根据此状态转换图,可以很容易地编写用于标识这些比较运算符的代码,但这里不再赘述。

欢迎使用微信公众号fightingzh%”

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。