上周周末旅游去了,就没更新了,虽然回到海拔0m的地区,不过目前似乎还在缺氧,所以本次就少更点吧。

这章将结束词法分析的部分。

在之前的章节(第7章从零开始写个编译器吧 - 开始写词法分析器(1))中我有说,我将 readChar(char c) 函数设计成主动调用的形式,而 read() 则是被动调用的形式。

那好,现在让我们来填写 read() 函数的 TODO 部分吧。首先,还得把构造函数写完。

private final Reader reader;

public LexicalAnalysis(Reader reader) {

this.reader = reader;

this.state = State.Normal;

}

之后是 read() 函数。

private Token endToken = null;

Token read() throws IOException, LexicalAnalysisException {

if(endToken != null) {

return endToken;

}

while(tokenBuffer.isEmpty()) {

int read = reader.read();

char c = (read == -1 ? '\0' : (char) read);

while(!readChar(c)) {}

}

Token token = tokenBuffer.removeLast();

if(token.type == Type.EndSymbol) {

endToken = token;

}

return token;

}

至此,LexicalAnalysis 类就写完了。不过,末了,我还得补充一点东西。

private static final char[] FilterChar = new char[] {

'\b', '\f', '\r'

};

private boolean readChar(char c) throws LexicalAnalysisException {

boolean moveCursor = true;

Type createType = null;

if(!include(FilterChar, c)) {

(原来的内容...)

}

if(createType != null) {

createToken(createType);

}

}

这里稍稍修改了一下 readChar(char c) 函数,令它可以过滤掉一些特殊符号。如果不过滤掉这些符号,那么一旦源代码中插入这些符号,可能令编译过程中出现一些诡异的错误。

(这篇内容有点少,所以在最后稍微谈谈之后的内容吧。之后,我将会把本系列的代码签入 github 中方便各位查看。并将各个版本的链接写入各个章节之中。)

(接下来本系列将进入编写语法分析器的阶段,不过在此之前,我将抽出一点时间介绍一下 tao 语言本身。)

就是这些吧~

自己写编译器词法分析c语言,从零开始写个编译器吧 - 开始写词法分析器(3)...相关推荐

  1. 编译器构造c语言描述pdf,关于编译器构造:为什么每次都要在C中指定数据类型?...

    从下面的代码片段中可以看到,我声明了一个char变量和一个int变量. 编译代码时,它必须标识变量str和i的数据类型. 为什么在扫描变量期间需要通过将%s或%d指定为scanf来再次告诉它是字符串还 ...

  2. c语言编译器_学C语言写自己的K语言:编译器词法分析。

    词法分析(lexical analysis),是计算机科学中将字符序列转换为记录(Token)序列化的过程.词法分析一般分手动与自动,自动是基于lex,flex词法分析器使用正则式来配置,我们这里将学 ...

  3. cpu模拟器c语言实现_你写出来的C语言是这样调用硬件的!

    大家都知道我们可以使用C语言写一段程序来控制硬件工作,但你知道其工作原理吗? 网友北极 C语言在实际运行中,都是以汇编指令的方式运行的,由编译器把C语言编译成汇编指令,CPU直接执行汇编指令.所以这个 ...

  4. 手把手教你写第一个C语言程序

    C语言是所有编程语言的基础,历经50多年的发展依然被众多编程者使用,那么怎么写C语言程序呢?下面我将从项目的创建开始一步步交大家写第一个C语言程序. 一.C语言项目的创建: C语言是一门编译型语言.所 ...

  5. 操作系统课程设计----读者-写者 问题(c语言)

    问题描述: 所谓读者写着问题,是指保证一个writer进程必须与其他进程互斥地访问共享对象的同步问题.读者写者问题可以这样的描述,有一群写者和一群读者,写者在写同一本书,读者也在读这本书,多个读者可以 ...

  6. 在纸上写好一个c语言程序后,上机运行的基本步骤为,c基本概念(选择题).docx

    PAGE / NUMPAGES 一.单选题 1.下面叙述中正确的是: (A) 在C语言程序中,main()函数必须放在程序的开始位置 (B) 在C语言程序中,要调用的函数必须在main()函数中定义 ...

  7. IOS学习笔记04---编写第一个C语言程序-Hello World

    IOS学习笔记04---编写第一个C语言程序-Hello World --------------------------------------------------------         ...

  8. 帮我写一篇C语言课程的课程实施报告,第一章写整体教学设计,第二章写教学实施流程,第三章写学习效果,第4章写特色与创新,第5章写教学反思与改进...

    很高兴为您写一篇 C 语言课程的课程实施报告. 第一章 整体教学设计 C 语言课程的整体教学设计旨在帮助学生了解 C 语言的基础知识和编程技巧,包括语言结构.数据类型.运算符.控制结构.函数.指针.内 ...

  9. VS Code 写C或C++语言初学者配置环境总结

    VS Code 写C或C++语言初学者配置环境总结 1. 安装vscode. Visual Studio Code - Code Editing. Redefined 下载安装vscode. 2.安装 ...

最新文章

  1. 自己写的程序密码功能 ------数字功能
  2. gitlab的安装和使用
  3. dede织梦调用顶级二级栏目及下三级栏目方法(数据库实现)
  4. WindowsPE 第五章 导出表
  5. 洪小文博士写给你的新年书单
  6. matlab在振动信号处理中的应用_Matlab面向对象程序设计及其在地球物理学中的应用(4)——类的属性
  7. 人工蜂群算法python_教程 | 用人工蜂群算法求解k-分区聚类问题
  8. 华文行楷字帖欣赏_田英章硬笔行书字帖欣赏,600个行书笔法演示,写好字的首选帖...
  9. 运筹优化(十六)--排队论基础及其最优化求解
  10. ssh整合(spring + struts2 + hibernate)xml版
  11. 台安PLC通过手机热点远程在线模拟,远程编程,远程调试
  12. 面试被问到HashMap 底层原理?看完这边文章绝对不慌!
  13. Kali 暴力破解wifi密码
  14. Calib 工具说明
  15. 在波点音乐听周杰伦新歌专辑,一起“用音乐穿越”
  16. 2022-2028中国智能窃听检测系统市场现状研究分析与发展前景预测报告
  17. Python开发环境安装及Project interpreter not specified问题解决
  18. Mac安装photoshopcs6
  19. cs231n课程笔记 摘抄
  20. 将4G以上文件从iphone传到电脑中的方法

热门文章

  1. Path.cwd()使用注意事项(使用Path.cwd出现的bug)
  2. mysql数据库物理结构设计_通俗数据库设计(4)物理结构设计
  3. 巡风扫描器--nascan源码分析
  4. 华为P40的博客营销
  5. Python:提取网页中的电子邮箱
  6. Java单商户商城源码 小程序+H5 B2B2C商城源码
  7. 谷歌9年投了323家公司,大公司做投资就是没梦想吗?
  8. 系统性能监控分析(Linux,Windows)
  9. android平板触控笔,产品轻体验系列 篇一:买平板到底要不要买配件?华为MatePad10.8磁吸键盘/触控笔体验...
  10. nlp研究方向的修正