当前位置:编程学习 > C/C++ >>

深入浅出编译原理-3-词法分析器

引言
编译器的工作的开始,就是读入源码(预编译先不考虑),然后,去除一些空字符,然后经过词素匹配,并和其属性(可选),组成一个的词法单元,多个词法单元,连接成词法单元序列。自此,此法分析器的工作就算完成了。呵呵,就这么简单。可见,找到一个词素,是词法分析器的核心工作,那,如何获得一个词素呢?就是本节要讨论的主要内容。

3.1工作流程
上面已经简单描述了词法分析器的工作流程,下面是一张图,更直观的表示了这个流程:
以一条简单的c语言的程序块为例,来展现词法分析器的过程:

 

3.2内在机制
为了能得到一个符合语言描述的规范的词素,并没有想象的那么简单“不就是得到一个字符串嘛!”,呵呵,咱们错了,这是一项艰巨的任务,由下图标示:

下面是此法分析器的内在机制一张图:


1》首先,要确定一个词素,就是读到一个字符串和模式匹配,
2》模式由DFA来描述。(DFA:确定的有穷自动机)
3》DFA又可以标示为状态转移图
4》状态图又可以通过正则表达式来生成
5》正则表达式是通过语言的文法产生式转换来的
6》文法产生式,又是由编程语言本身来定义的。

需要说的是,编译原理是比较复杂的,要知道DFA,就要学习离散数学;要知道状态图,就要知道‘图’,就是要学习数据结构;还要会正则表达式;还要会编程语言,等等,这些都要有所涉猎。所以编译原理的学习,稍微有点难度,遇到一个概念,就要学习这个概念对应的知识点。况且,这只是词法分析器,后面还有语法分析器,代码优化算法,计算机的体系结构方面的知识。不过不要灰心,只要静下心来,慢慢来,可能学完之后,咱们可能并不能自己去写一个编译器,但是,我想,对于自己写代码优化方面,IC设计方面,一定会有所帮助。

3.3小结
词法分析器的核心,就是找出和模式匹配的词素。要想知道模式描述,就要把具体的编程语言一般描述,先转化问文法,然后文法产生式,然后正则表达式,然后状态转移图,然后DFA。
词素找到了,还要创建符号表,并和词素的属性,组成词法单元,然后组成词法单元序列,最后把序列传给语法分析器,生成抽象语法树,这,就是下一小节打算说的内容。

作者:rill_zhen
补充:软件开发 , C语言 ,
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,