词法分析——词法分析的任务
在编译原理介绍中,我们已经对前端的工作有了大致的了解
词法分析器的任务是读入源程序,对其进行一定的切分,得到记号流
对于字符流和记号流之间的区别,下面给出一个例子来说明
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 …)
- 记号流:编译器内部定义的数据结构,编码所识别出的词法单元
词法分析——词法分析的任务相关推荐
- 从零写一个编译器(一):输入系统和词法分析
项目的完整代码在 C2j-Compiler 前言 从半抄半改的完成一个把C语言编译到Java字节码到现在也有些时间,一直想写一个系列来回顾整理一下写一个编译器的过程,也算是学习笔记吧.就从今天开始动笔 ...
- TEST语言编译器--词法分析
TEST语言编译器 目录 词法分析 词法分析时,依次读入源程序中的每个字符,依据语言的构词规则,识别出一个个具有独立意义的最小语法单位,即"单词",并用某个单词符号来表示每个单词的 ...
- 词法分析与词性标注学习之笔记(一)----词法分析
词法分析 词法分析的概念 **词法分析:**词法分析(英语:lexical analysis)是计算机科学中将字符序列转换为单词(Token)序列的过程.进行词法分析的程序或者函数叫作词法分析器(Le ...
- 【编译原理】词法分析
第二章 词法分析 词法分析是编译的第一个阶段,它的主要任务是扫描输入字符流,产生用于语法分析的词法记号序列. 2.1 词法记号 词法记号(tokentokentoken): 是由记号名(又称种别码)和 ...
- 编译原理 - 词法分析(Lexical Analysis)
Lexical Analysis (词法分析) 词法分析指的是将输入的字符流,按照规则划分为词法单元并向下一阶段传递. int a = 10; 如在上面这一行代码中,按照C语言的词法划分规则可以划分为 ...
- c++自底向上算符优先分析_词法分析程序的自动生成器(二)——Thompson算法
碎碎念:我写词法分析程序的自动生成器的时候,先写的NFA-DFA和DFA化简.之后发现因为正则表达式的结构太复杂了,比如描述Pl/0程序标识符的正则表达式是 (a|-|z|A|-|Z)( a|-|z| ...
- 实验一、词法分析实验
实验一.词法分析实验 专业::商业软件工程1班 姓名:许演杰 学号:201506110096 一. 实验目的 编制一个词法分析程序 二. 实验内容和要求 -输入:源程序 ...
- go string 换行_从词法分析角度聊 Go 代码组成
之前的 Go 笔记系列,已经完成到了开发环境搭建,原本接下来的计划就是到语法部分了,但后来一直没有前进.主要是因为当时的工作比较忙,分散了精力,于是就暂时放下了. 最近,准备重新把之前计划捡起来. 第 ...
- php 词法分析,【PHP7源码学习】2019-03-20 PHP词法分析
baiyan 基本概念 在PHP7中,当一个脚本运行请求或到来时,PHP代码首先会被加载到内存中,随后进行词法分析和语法分析并生成抽象语法树(AST),然后进行深度优先遍历并生成opcodes,并在z ...
最新文章
- 漫画:到底什么是微服务?
- bash_备份mysql数据库
- TCP/IP 网络数据封包和解包
- Windows 7 扩展玻璃效果(Aero Glass)
- 对象创建的过程细节是怎样的?一起来探讨内存变化细节
- 栈-线性表(代码、分析、汇编)
- SELECT的学习以及在socket中的应用
- LeetCode 348. 判定井字棋胜负(计数)
- 使用mysql导入数据
- [读书笔记]机器学习:实用案例解析(4)
- 分析arm Internal error: synchronous external abort: 96000010 [#1] PREEMPT SMP
- OFFICE技术讲座:一级标点压缩共有几种情形
- paip.提升用户体验----c++ c# 配色方案
- 2022年中国游戏行业投融资发展报告
- 计算机应用项目教案,计算机应用基础2项目二--电子教案.doc
- 计算机二级excel数据有效性,Excel数据有效性,最全面的教程在这里(2)
- 关于Egret项目升级引擎出现的问题
- 【归纳】对于S3C2440A芯片的认知和使用理论再学习
- 【数理统计】概率统计
- Java核心技术卷Ⅰ-第四章对象和类
热门文章
- http协议中get和post的区别:
- 做为一个好人 你应该看这部电影
- uni-app 滑到一定位置固定某个元素在顶部 吸顶解决方案 APP端 H5端
- spss实战案例----分析多个变量与因变量之间是否存在关系,方差分析
- go语言 使用MTP协议 通过WPD(windows portable device)读取便携式设备信息并进行文件传输
- 理论学习材料:如何解读小学数学教材
- 为什么批量注册Facebook账号需要使用指纹浏览器防关联
- 新解决方案销售之一:原则与流程
- 修行“静”的九种境界
- 北信源 华为鸿蒙,华为鸿蒙生态加速!北信源率先参与其中