SNL编译器之词法分析器
这是什么
这是吉林大学编译原理的课程设计。想必来到这里的看客手头都应该有那本实验书,故背景就不多讲了。
词法分析如何做
一个语言规定好了该语言中都有那些词素,诸如保留字、特殊符号(+
,-
之流)等。在我们做词法分析的时候应该提前了解这些,所幸实验书中给的信息已经十分详尽。
在书中有一个词法分析的状态机,列出了SNL语言所能识别的所有词素。故重点在于实现该状态机。状态机的实现书中给了两种方法,一种是状态转换表,一种使用if
、while
循环来处理,在这里我们选择后者实现。
这里以标识符为例,
当遇到字母时应前往右边这个状态,之后遇到无论是字母或数字都是绕一圈再回来,直到遇到其它标识符。故可按如下方法处理
if(ischar(lookhead)){string str;//用于存放idget_next_char(&lookhead)while(ischar(lookhead)||isnum(lookhead)){str.append(lookhead);get_next_char(&lookhead);}//注意,遇到了一个非字母或数字的字符,需要回退一个.put_back_char(lookhead);//注意标识符是否为保留字,当时保留字时,返回为该保留字的词素,//若不是则为正常的IDToken *t=lookup(str);}
效果
代码见Gitee
SNL编译器之词法分析器相关推荐
- 【SEUSE】编译原理 - 词法分析器实验报告
[SEU&SE]编译原理 - 词法分析器实验报告 README 一. 实验目的 二. 实验环境 1. 开发环境: 2. 运行环境 三. 实验内容 1. 主要内容 2. 主要功能 3. 种别码 ...
- 编译原理——词法分析器
采用java图形化界面编写了java语言的词法分析器,该分析器可识别所有java关键字.软件工程课程中编译原理实验. Keyword.jvav package org.kyc.test1;public ...
- 编译器之后端原理(三十六)
一.编译器的后端技术 1. 编译器的前端技术,重点是让编译器能够读懂程序,无结构的代码文本经过前端的处理以后,就变成了Token.AST和语义属性.符号表等结构化的信息,基于这些信息,可以实现简单的脚 ...
- 编译原理--词法分析器(python语言实现)
词法分析器 最近在学习编译原理.由于实验要求有词法分析器,这里我就先记录一下词法分析器实现过程以及具体思路. 目标语言 此处我选择的目标语言是c语言的子集来进行词法分析. 实现语言 此处我选用的语言是 ...
- 南华大学编译原理----词法分析器的设计与实现、语法分析器的设计与实现
下载链接:(各位同学不需要充钱哈,这种我也没有收益,去淘宝上面找个代下,大概0.5元就能下载实验报告,用来给同学们参考,下载积分不是我设置的,是网站自己默认的) ------------------- ...
- 编译原理词法分析器的c++实现
一.题目的理解和说明 编译原理这门课是计算机专业的核心课程之一,是一门研究软件是什么,为什么可以运行,以及怎么运行的学科.编译系统的改进将会直接对其上层的应用程序的执行效率,执行原理产生深刻的影响.编 ...
- Vim——编译器之神
vi是linux中最经典的文本编辑器,vi一共有3种工作模式,分别是命令模式,末行模式,编辑模式.打开文件首先进入的就是命令模式,是使用vi的入口.在命令模式按i进入编辑模式,按esc再退出到命令模式 ...
- 编译原理—词法分析器(Java)
1.当运行程序时,程序会读取项目下的program.txt文件 2. 程序将会逐行读取program.txt中的源程序,进行词法分析,并将分析的结果输出. 3. 如果发现错误,程序将会中止读取文件进行 ...
- nvcc编译器之GPU代码编译(chapter 5)
目录 5. GPU编译 5.1 GPU多代架构 5.2 GPU特性列表 5.3 应用兼容性 5.4 虚拟架构 5.5 虚拟架构特性列表 5.6 兼容性补全机制 5.7 nvcc示例 5. GPU编译 ...
最新文章
- html的div的儿子,当父母的身高是动态时,孩子div为100% HTML / CSS
- 安卓手机如何解压缩文件
- PDE抛物型方程数值解法总结与例题分析
- 没有样式重置_我不能没有的5个Vue.js库
- 阿里云 redis mysql_Redis 和 MySQL数据一致
- Euler Tour Tree与dynamic connectivity
- 23种设计模式及案例整理分享(建议收藏)
- Java的break和continue关键字
- 【洛谷】P1419 寻找段落
- 基于VisualStudio历时20年打造的史诗级游戏
- 乐乐音乐4.0简洁版
- 【论】A Deep Reinforcement Learning Framework for Rebalancing Dockless Bike Sharing Systems
- 蚂蚁金服区块链已开出近60万张医疗电子票据,市民报销看病更方便!
- 学习笔记(29):A110测试-测试课程申请22
- 什么是SEO?搜索引擎优化是什么意思?
- matlab写函数教程,【Matlab基础】 自定义函数
- localhost_access_log.*.txt文件含义及内容配置
- Android 平板应用隐藏状态栏和底下的导航栏(navigation bar)
- JAVA使用javaCV完成视频抽帧调用算法和视频合成功能
- 开机启动linux,显示stop lightdm display manager,桌面显示不出来