在编译原理介绍中,我们已经对前端的工作有了大致的了解

词法分析器的任务是读入源程序,对其进行一定的切分,得到记号流

对于字符流和记号流之间的区别,下面给出一个例子来说明

if (x > 5)y = "hello";
elsez = 1;

对面上面这段程序,在词法分析器的眼中,是这样表示的:
i, f, " ", (, x, " ",>, " ", 5, ), \n, " “,” ", y, " ", =, …

可见词法分析器看到的字符流和我们眼中的字符流是不一样的。 而词法分析器的任务就是对字符进行 切分。将 i 和 f 并在一起做为一个 if 关键字,去除掉没有意义的空格等等

对于像IF,LPAREN,IDENT等的单词,我们都称为记号

在记号中,有一些记号是没有属性的,类似于 IF 之类的关键字, IDENT(x) 之类的标识符需要表明其中的元素具体是什么

记号的数据结构定义如下:

enum kind {IF, LPAREN, ID, INTLIT, ...};
struct token{enum kind k;char *lexname;
}

因此,对于语句 if (x > 5) 可以转变为

token {k = IF;lexname = 0; //0 表示没有赋任何的值
}
token {k = LPAREN;laxname = 0;
}
token {k = ID;laxname = "x";
}
....

通过上面的学习,我们可以知道词法分析器的任务是将字符流转化为记号流

  • 字符流:和被编译的语言密切相关(ASCII(C), Unicode(Java, Swift), or …)
  • 记号流:编译器内部定义的数据结构,编码所识别出的词法单元

词法分析——词法分析的任务相关推荐

  1. 从零写一个编译器(一):输入系统和词法分析

    项目的完整代码在 C2j-Compiler 前言 从半抄半改的完成一个把C语言编译到Java字节码到现在也有些时间,一直想写一个系列来回顾整理一下写一个编译器的过程,也算是学习笔记吧.就从今天开始动笔 ...

  2. TEST语言编译器--词法分析

    TEST语言编译器 目录 词法分析 词法分析时,依次读入源程序中的每个字符,依据语言的构词规则,识别出一个个具有独立意义的最小语法单位,即"单词",并用某个单词符号来表示每个单词的 ...

  3. 词法分析与词性标注学习之笔记(一)----词法分析

    词法分析 词法分析的概念 **词法分析:**词法分析(英语:lexical analysis)是计算机科学中将字符序列转换为单词(Token)序列的过程.进行词法分析的程序或者函数叫作词法分析器(Le ...

  4. 【编译原理】词法分析

    第二章 词法分析 词法分析是编译的第一个阶段,它的主要任务是扫描输入字符流,产生用于语法分析的词法记号序列. 2.1 词法记号 词法记号(tokentokentoken): 是由记号名(又称种别码)和 ...

  5. 编译原理 - 词法分析(Lexical Analysis)

    Lexical Analysis (词法分析) 词法分析指的是将输入的字符流,按照规则划分为词法单元并向下一阶段传递. int a = 10; 如在上面这一行代码中,按照C语言的词法划分规则可以划分为 ...

  6. c++自底向上算符优先分析_词法分析程序的自动生成器(二)——Thompson算法

    碎碎念:我写词法分析程序的自动生成器的时候,先写的NFA-DFA和DFA化简.之后发现因为正则表达式的结构太复杂了,比如描述Pl/0程序标识符的正则表达式是 (a|-|z|A|-|Z)( a|-|z| ...

  7. 实验一、词法分析实验

    实验一.词法分析实验 专业::商业软件工程1班  姓名:许演杰  学号:201506110096 一.        实验目的 编制一个词法分析程序 二.        实验内容和要求 -输入:源程序 ...

  8. go string 换行_从词法分析角度聊 Go 代码组成

    之前的 Go 笔记系列,已经完成到了开发环境搭建,原本接下来的计划就是到语法部分了,但后来一直没有前进.主要是因为当时的工作比较忙,分散了精力,于是就暂时放下了. 最近,准备重新把之前计划捡起来. 第 ...

  9. php 词法分析,【PHP7源码学习】2019-03-20 PHP词法分析

    baiyan 基本概念 在PHP7中,当一个脚本运行请求或到来时,PHP代码首先会被加载到内存中,随后进行词法分析和语法分析并生成抽象语法树(AST),然后进行深度优先遍历并生成opcodes,并在z ...

最新文章

  1. 漫画:到底什么是微服务?
  2. bash_备份mysql数据库
  3. TCP/IP 网络数据封包和解包
  4. Windows 7 扩展玻璃效果(Aero Glass)
  5. 对象创建的过程细节是怎样的?一起来探讨内存变化细节
  6. 栈-线性表(代码、分析、汇编)
  7. SELECT的学习以及在socket中的应用
  8. LeetCode 348. 判定井字棋胜负(计数)
  9. 使用mysql导入数据
  10. [读书笔记]机器学习:实用案例解析(4)
  11. 分析arm Internal error: synchronous external abort: 96000010 [#1] PREEMPT SMP
  12. OFFICE技术讲座:一级标点压缩共有几种情形
  13. paip.提升用户体验----c++ c# 配色方案
  14. 2022年中国游戏行业投融资发展报告
  15. 计算机应用项目教案,计算机应用基础2项目二--电子教案.doc
  16. 计算机二级excel数据有效性,Excel数据有效性,最全面的教程在这里(2)
  17. 关于Egret项目升级引擎出现的问题
  18. 【归纳】对于S3C2440A芯片的认知和使用理论再学习
  19. 【数理统计】概率统计
  20. Java核心技术卷Ⅰ-第四章对象和类

热门文章

  1. http协议中get和post的区别:
  2. 做为一个好人 你应该看这部电影
  3. uni-app 滑到一定位置固定某个元素在顶部 吸顶解决方案 APP端 H5端
  4. spss实战案例----分析多个变量与因变量之间是否存在关系,方差分析
  5. go语言 使用MTP协议 通过WPD(windows portable device)读取便携式设备信息并进行文件传输
  6. 理论学习材料:如何解读小学数学教材
  7. 为什么批量注册Facebook账号需要使用指纹浏览器防关联
  8. 新解决方案销售之一:原则与流程
  9. 修行“静”的九种境界
  10. 北信源 华为鸿蒙,华为鸿蒙生态加速!北信源率先参与其中