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

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

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

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


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

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

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

深入浅出编译原理-3-词法分析器相关推荐

  1. 编译原理算符分析器实现 -* c语言代码,编译原理论文-词法分析器的设计与实现...

    <编译原理论文-词法分析器的设计与实现>由会员分享,可在线阅读,更多相关<编译原理论文-词法分析器的设计与实现(13页珍藏版)>请在人人文库网上搜索. 1.编译原理论文题 目 ...

  2. 【编译原理】词法分析器语法分析器

    简单编译器设计 采用Java语言对C++语言进行编译,具体的简单编译器设计 词法分析器-扫描器的设计与实现 基本符号表 状态转换图 代码实现 import java.io.*; import java ...

  3. 编译原理之词法分析器随笔和简单实现

    借鉴:   编译原理之美. 极客时间上 什么是词法分析 编译原理:词法分析简单的来说就是在字符串中提取一系列的word单词. 编译器的眼里, 我们的一切输入都是什么? 都是一个一个的字符串. 所以编译 ...

  4. 编译原理——构造词法分析器(基于 Flex 构造和手工构造)

    文章目录 一.概述 二.基于 Flex 构造词法分析器 2.1 需求描述 2.2 编译流程 2.3 Flex 代码 三.手工构造词法分析器 3.1 需求描述 3.2 实现流程 3.3 C++ 代码 四 ...

  5. c语言语法分析源程序,深入浅出编译原理-5-一个简单语法分析器的C语言实现

    引言 前面已经介绍了编译器的预处理,词法分析,词法分析器的实现,也在其中说到了语法分析的任务和过程. 语法分析的输入是词法单元序列,然后根据语言的文法表示(展开式),利用有限状态机理论,生成抽象语法树 ...

  6. 编译原理实验 —— 词法分析器

    // Lexical_Analysis.cpp : 定义控制台应用程序的入口点. // #include "stdio.h" #include "stdlib.h&quo ...

  7. 编译原理,词法分析器

    简单的词法分析器 词法分析后的结果 词法分析的过程 词法分析程序 词法分析后的结果 对一个源程序进行词法分析,得到一个二元式,单词的符合,以及对应的内码值 词法分析的过程 程序一开始的时候,先对那些常 ...

  8. 我看过的编译原理方面的好文章

    本文不定期更新,最后更新于2019-7-6 编译原理 编译原理三大经典书籍(龙书 虎书 鲸书) 前端为什么要会正则表达式 - 知乎 一次性搞懂JavaScript正则表达式之引擎 - 掘金 没有AST ...

  9. 编译原理——词法分析

    根据上课内容顺序写的博客,并不是按照书的目录来的 使用龙书以及编译程序设计原理(第二版)金成植.金英编著 老师的PPT是英文的,我自己随便翻的,不一定对 文章目录 词法分析(scanning) 概述 ...

最新文章

  1. 敏捷开发中Scrum方法
  2. android 之适配器与json对象解析技术的联用的进一步优化(解决图片错位)
  3. Ubuntu Server中怎样卸载keepalived
  4. Linux学习笔记6
  5. 原字体_在包装上玩转字体
  6. 电大计算机网考选择题多少分,2016年度电大计算机网考选择题及标准答案.doc
  7. Python通过Zabbix API获得数据
  8. WCF 进阶: 对称加密传输
  9. django动态HTML转PDF方法
  10. 设计模式---中介者模式(C++实现)
  11. html 如何在按钮中加字,html button标签 语法
  12. LiteIDE简单使用
  13. 八.声明圆锥体类,实现Area和vloume接口计算表面积和体积,按体积大小进行比较...
  14. 关于msp430系列单片机的一些入门心得(新手向)
  15. 日常问题:上传接口报错
  16. 常用git命令指南总结
  17. 虚拟机下克隆CentOS引起的MAC地址冲突问题
  18. 《linux内核分析》第三次课 实验作业
  19. 服务器启动时创建文件夹,技术|entr:文件更改时重新运行构建
  20. Linux下查找结构体定义的位置

热门文章

  1. 微服务架构及解决方案
  2. 克里希纳穆提的作品!
  3. 传智播客就是牛人培养牛人的地方!
  4. x264命令行参数解释
  5. Android商城开发--实现商城底部导航栏
  6. 380免费云存储_2019年最好的在线照片存储,让你的照片安全存储在云端
  7. 数字签名与数字信封流程
  8. mysql动力节点百度云_动力节点MySQL数据库视频 百度云 网盘 下载
  9. 《论语》原文及其全文翻译 学而篇13
  10. 你的网站安全吗?ZAP应用实例