这是什么

这是吉林大学编译原理的课程设计。想必来到这里的看客手头都应该有那本实验书,故背景就不多讲了。


词法分析如何做

一个语言规定好了该语言中都有那些词素,诸如保留字、特殊符号(+-之流)等。在我们做词法分析的时候应该提前了解这些,所幸实验书中给的信息已经十分详尽。
在书中有一个词法分析的状态机,列出了SNL语言所能识别的所有词素。故重点在于实现该状态机。状态机的实现书中给了两种方法,一种是状态转换表,一种使用ifwhile循环来处理,在这里我们选择后者实现。

这里以标识符为例,

当遇到字母时应前往右边这个状态,之后遇到无论是字母或数字都是绕一圈再回来,直到遇到其它标识符。故可按如下方法处理

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编译器之词法分析器相关推荐

  1. 【SEUSE】编译原理 - 词法分析器实验报告

    [SEU&SE]编译原理 - 词法分析器实验报告 README 一. 实验目的 二. 实验环境 1. 开发环境: 2. 运行环境 三. 实验内容 1. 主要内容 2. 主要功能 3. 种别码 ...

  2. 编译原理——词法分析器

    采用java图形化界面编写了java语言的词法分析器,该分析器可识别所有java关键字.软件工程课程中编译原理实验. Keyword.jvav package org.kyc.test1;public ...

  3. 编译器之后端原理(三十六)

    一.编译器的后端技术 1. 编译器的前端技术,重点是让编译器能够读懂程序,无结构的代码文本经过前端的处理以后,就变成了Token.AST和语义属性.符号表等结构化的信息,基于这些信息,可以实现简单的脚 ...

  4. 编译原理--词法分析器(python语言实现)

    词法分析器 最近在学习编译原理.由于实验要求有词法分析器,这里我就先记录一下词法分析器实现过程以及具体思路. 目标语言 此处我选择的目标语言是c语言的子集来进行词法分析. 实现语言 此处我选用的语言是 ...

  5. 南华大学编译原理----词法分析器的设计与实现、语法分析器的设计与实现

    下载链接:(各位同学不需要充钱哈,这种我也没有收益,去淘宝上面找个代下,大概0.5元就能下载实验报告,用来给同学们参考,下载积分不是我设置的,是网站自己默认的) ------------------- ...

  6. 编译原理词法分析器的c++实现

    一.题目的理解和说明 编译原理这门课是计算机专业的核心课程之一,是一门研究软件是什么,为什么可以运行,以及怎么运行的学科.编译系统的改进将会直接对其上层的应用程序的执行效率,执行原理产生深刻的影响.编 ...

  7. Vim——编译器之神

    vi是linux中最经典的文本编辑器,vi一共有3种工作模式,分别是命令模式,末行模式,编辑模式.打开文件首先进入的就是命令模式,是使用vi的入口.在命令模式按i进入编辑模式,按esc再退出到命令模式 ...

  8. 编译原理—词法分析器(Java)

    1.当运行程序时,程序会读取项目下的program.txt文件 2. 程序将会逐行读取program.txt中的源程序,进行词法分析,并将分析的结果输出. 3. 如果发现错误,程序将会中止读取文件进行 ...

  9. 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编译 ...

最新文章

  1. html的div的儿子,当父母的身高是动态时,孩子div为100% HTML / CSS
  2. 安卓手机如何解压缩文件
  3. PDE抛物型方程数值解法总结与例题分析
  4. 没有样式重置_我不能没有的5个Vue.js库
  5. 阿里云 redis mysql_Redis 和 MySQL数据一致
  6. Euler Tour Tree与dynamic connectivity
  7. 23种设计模式及案例整理分享(建议收藏)
  8. Java的break和continue关键字
  9. 【洛谷】P1419 寻找段落
  10. 基于VisualStudio历时20年打造的史诗级游戏
  11. 乐乐音乐4.0简洁版
  12. 【论】A Deep Reinforcement Learning Framework for Rebalancing Dockless Bike Sharing Systems
  13. 蚂蚁金服区块链已开出近60万张医疗电子票据,市民报销看病更方便!
  14. 学习笔记(29):A110测试-测试课程申请22
  15. 什么是SEO?搜索引擎优化是什么意思?
  16. matlab写函数教程,【Matlab基础】 自定义函数
  17. localhost_access_log.*.txt文件含义及内容配置
  18. Android 平板应用隐藏状态栏和底下的导航栏(navigation bar)
  19. JAVA使用javaCV完成视频抽帧调用算法和视频合成功能
  20. 开机启动linux,显示stop lightdm display manager,桌面显示不出来

热门文章

  1. 网站安全渗透测试维护公司 漏洞信息搜集方法
  2. uni-app —— 小程序加入购物车实现过程
  3. 企业如何运营公域+私域?
  4. IDEA同一个工程启动多个实例
  5. 烟台移动dns网关_山东烟台DNS
  6. 基于NetworkX构建复杂网络的应用案例
  7. 什么样的量化交易策略才是最有用的?
  8. Havok Physics 2012(1)
  9. python中return_Python 中return用法及意义
  10. html字体兼容ie8,IE8 CSS 样式兼容性清单