编译原理
文章平均质量分 85
tyler_download
这个作者很懒,什么都没留下…
展开
-
自己动手写编译器:属性语法的实现
本文介绍了编译原理中,属性语法的原理和实现原创 2024-02-04 13:58:12 · 480 阅读 · 0 评论 -
自己动手写编译器:语法解析的基本原理
这里还需要注意的是,箭头右边一系列概念的顺序很重要,顺序是语法规则的组成部分,例如合乎逻辑的“人头”必须满足鼻子在眼睛后面,如果这个顺序颠倒了,那么这个“头”就不是人头,而是异形的头。本节描述的东西比较抽象,它很可能给你带来更多的是困惑,好在在最开始和前面做词法解析时,我们都接触过语法解析,所以前面的练习应该会有助于我们对这些理论的理解,在后面章节中,我们会拿几个较为简单的语法解析做练手,通过实践才能更好的帮我们理解和掌握抽象的理论,更多内容请在 b 站搜索 Coding 迪斯尼。原创 2023-12-19 22:49:23 · 114 阅读 · 0 评论 -
自己动手写编译器:实现命令行模块
本文给出了 GoLex 词法解析器程序实现中的命令行模块实现原创 2023-10-01 16:16:40 · 240 阅读 · 0 评论 -
自己动手写数据库系统:实现一个小型SQL解释器(中)
本文描述了如何对 sql 语言中以 create 开头的语句进行语法解析原创 2023-08-16 19:47:46 · 1353 阅读 · 0 评论 -
自己动手写编译器:DFA跳转表的压缩算法
本文描述了编译原理算法中DFA跳转表的两种压缩算法原创 2023-04-09 17:11:55 · 590 阅读 · 0 评论 -
自己动手写编译器:汤普森构造法
编译原理中非常重要的数据结构和算法:有限状态机和汤普森构造原创 2022-09-12 21:21:56 · 942 阅读 · 0 评论 -
自己动手写编译器:词法解析的系统化研究
系统介绍编译原理中词法解析的基本理论原创 2022-08-30 23:12:35 · 521 阅读 · 0 评论 -
尝试用GO写python编译器:创建互动式命令号窗口REPL
完善语法解析和增加交互式命令行窗口原创 2021-12-29 20:18:50 · 880 阅读 · 0 评论 -
试用GO开发pyhton编译器:字节码基础
用go设计Python编译器,字节码基础原创 2021-12-18 09:52:19 · 1412 阅读 · 0 评论 -
Reactjs+BootStrap开发自制编程语言Monkey的编译器:创建简易的页面IDE
用reactjs和bootstrap创建Monkey编程语言的网页IDE原创 2017-11-07 16:24:31 · 914 阅读 · 0 评论 -
java开发编译器:把结构体数组编译成java字节码
把含有结构体数组的C语言代码编译成java字节码原创 2017-09-02 16:56:22 · 842 阅读 · 0 评论 -
Reactjs+BootStrap开发自制编程语言Monkey的编译器:发刊词
为什么要用Reactjs开发一个编译器原创 2017-11-07 16:25:35 · 490 阅读 · 0 评论 -
java开发C编译器:把struct编译成class
把C语言中的struct结构体编译成java中的class原创 2017-08-15 17:27:16 · 921 阅读 · 0 评论 -
java开发C语言编译器:把C语言的数组操作转换成java字节码
让编译器把C语言代码中对数组的相关操作编译成java字节码原创 2017-07-24 15:57:49 · 2236 阅读 · 0 评论 -
java开发C语言编译器:把printf编译成java字节码的算法详解
本文详细描述了如何把C语言中的printf函数调用编译成对应的java字节码原创 2017-07-11 15:42:07 · 821 阅读 · 0 评论 -
java开发C语言编译器:消除冗余语句和把ifelse控制语句编译成字节码
把C语言ifelse控制分支语句编译成java字节码原创 2017-09-23 17:13:33 · 739 阅读 · 0 评论 -
java开发C语言编译器:jvm的return指令以及局部变量的操作
本节我们研究jvm的return指令,以及对局部变量的操作,同时给出了一段C语言代码,展示了我们的编译器是如何把给定C语言编译成java字节码的原创 2017-06-20 17:42:00 · 1896 阅读 · 0 评论 -
java开发C编译器:jvm函数调用时的参数传递
在上一节我们把C代码转换成java字节码的例子中,C语言函数含有两个局部变量,这两个变量会对应于队列上的某两个元素,他们到底对应队列上哪个元素是可以由代码指定的,只要访问变量时,从队列的相应位置读取就可以,但有一种情况,局部变量与队列中的元素位置是一一对应的,这种情况就是函数的输入参数原创 2017-06-29 16:36:42 · 1043 阅读 · 0 评论 -
java开发C语言解释器:结构体内存与成员变量的一致性
本节,我们要实现的是,如果代码修改了动态内存头四个字节的数据,那么结构体的成员变量p的值也需要跟着改变。上一节做法的思路是,解释器监视结构体成员变量,每当结构体成员的值发生改变,那么解释器就把所有成员变量的值复制到内存中。这次,我们反其道而行之,在解释器读取结构体成本变量的数值之前,先把内存中的信息拷贝到每个结构体成员中原创 2017-04-11 16:36:27 · 680 阅读 · 0 评论 -
java开发C语言解释器:实现结构体的动态内存读写
本节的目的是继续完善C语言解释器对结构体成员的访问执行机制,我们通过malloc来为一个结构体指针分配动态内存,那么解释器必须保证,当代码对结构体的成员变量赋值后,结构体所对应的动态内存所存储的信息必须与赋值后的成员变量的数值相一致。原创 2017-03-27 16:23:46 · 1331 阅读 · 0 评论 -
java开发C解释器:实现解释器内部模块间的通讯
本节我们讨论,如何使用观察者模式在解释器的不同组件间实现消息通讯机制原创 2017-03-20 15:41:12 · 629 阅读 · 0 评论 -
java开发C语言模拟器:sizeof函数的实现
在C语言中,有一个非常基础,也是极其重要的函数,就是sizeof, 这个函数的作用是计算变量所占内存的大小。只有知道了对应变量的大小,那么我们才能动态分配对应大小的内存原创 2017-03-09 16:07:49 · 1232 阅读 · 0 评论 -
java开发C解释器:实现动态内存的分配和读写
C语言有一个强大的功能,就是通过指针直接操作内存,正是因为C语言含有直接读写内存的机制,使得C语言在系统开发,底层开发等方面,占据了难以撼动的地位,同时也正是这个原因,C语言开发的程序常常出现内存泄漏和野指针等及其令人头疼的问题。本节,我们为解释器添加动态内存的分配和读写机制,完成本节内容后,解释器能解释执行有关动态内存的分配和读写的C代码原创 2017-02-02 12:10:55 · 1218 阅读 · 0 评论 -
java开发C语言解释器:实现指针直接读写
上一节,我们实现了内存的数组化访问,本节的目的是实现通过指针直接对内存进行读写,完成本节后,我们的解释器将能正确的解释执行如下语句:*(p+1) = 1;原创 2017-02-14 12:05:41 · 705 阅读 · 0 评论 -
java开发C语言编译器:把C实现的快速排序算法编译成jvm字节码
把C语言实现的快速排序算法代码编译成java字节码原创 2017-10-31 12:01:41 · 638 阅读 · 0 评论 -
Reactjs+BootStrap开发自制编程语言Monkey的编译器:词法解析1
设计Monkey语言的词法解析器原创 2017-11-10 11:58:51 · 728 阅读 · 0 评论 -
自制Monkey语言编译器:解释执行哈希表对象
我们在上节完成了对哈希表对象的解析,这一节我们给编译器添加执行哈希表对象的功能,完成本节代码后,编译器能执行以下代码:let hash = {'hello':'world'}let y = hash['hello']当编译器执行上面代码后,变量y的值就是字符串’world’,接下来我们看相关代码的实现。我们需要在解释器中创建哈希表的符号对象,因此先添加如下代码:class ...原创 2018-08-10 17:14:59 · 424 阅读 · 0 评论 -
自制Monkey编程语言编译器:增加数组操作API和Mapsh数据类型
前一节,我们为Monkey语言以及其编译器增加了内置API len,以及数组数据类型,内置的len函数调用能作用到数组和字符串上,分别返回数组的元素个数和字符串的字符长度。本节我们继续增加三个能作用到数组上的内置API,这样Monkey语言能更方便的支持数组操作。我们在这里要增加的第一个API叫first。他返回数组首个元素,也就是它的作用与myArray[0]等价,但用first获得首个元素...原创 2018-07-13 11:55:31 · 343 阅读 · 0 评论 -
reactjs开发自制编程语言编译器:实现变量绑定和函数调用
在编程时,我们会初始化一个变量,给变量赋初值,例如下面语句:let x = 5*5;上面代码被编译器解读后,变量x就会和数值25绑定在一起。下次使用到变量x时,编译器会读取它绑定的值,然后用于相关代码的执行,例如下面代码:let y = x + 5;编译器执行上面语句后,变量y就会跟数值30绑定起来,本节我们就先增加变量绑定的功能。变量绑定功能不难实现,我们只要创建一个...原创 2018-05-18 16:41:13 · 569 阅读 · 0 评论 -
自制Monkey语言编译器:解释执行if..else判断语句
任何编程语言都少不了条件判断语句,Monkey语言也一样,有自己的If…else条件判断指令,本节我们看看如何解释执行该条件判断语句。根据我们原有的解释执行机制,我们只要在原框架的基础上添加若干代码就可以实现本节功能。当本节代码完成后,执行结果如下: 如图中的if else 语句被编译器解释执行后,在控制台的输出如下: 根据输出可知,编译器在执行了if里面的条件判断后,执行了if模块里...原创 2018-03-29 16:56:13 · 693 阅读 · 0 评论 -
自制Monkey语言编译器:解释执行return语句和错误处理控制
在高级编程语言中,大多含有一个指令叫return,也就是程序的执行指令流遇到该语句后不再往下执行,而是返回上一层,如果return后面附带数据的话,程序会把数据夹带到调用栈上一层的代码执行路径。本节我们就给Monkey语言编译器增加解释执行return语句的功能,完成本节代码后,编译器能解释执行如下代码:代码中存在两个if 间套,内层if执行return语句附带返回整数10,外层if 最后...原创 2018-04-03 17:57:39 · 450 阅读 · 0 评论 -
开发自制语言Monkey编译器:实现复杂算术表达式的执行
前几节,我们大费周章的详细解释如何对复杂的算术表达式进行语法解析,也就是让程序懂得理解复杂的算术表达式,本节我们探讨如何执行复杂表达式对应的运算并给出最终结果。我们先看这么个算术表达式:(5 + 10 * 2 + 15 / 3) * 2 + -10上面算术表达式涉及到多种运算符,再加上含有括号,因此程序在解读这个表达式时,还需考虑到运算的优先级。我们看看如何让程序懂得把这个运算式的结果计算...翻译 2018-02-23 17:31:34 · 643 阅读 · 0 评论 -
reactjs自制Monkey语言编译器:解析组合表达式,ifelse语句块和间套函数调用
在网易云课堂上,我启动过一个编译器开发课程链接如下:用java开发C语言编译器我们的计算机教育时常流于肤浅,在面对难度较大的基础理论时,总是喜欢侃侃而谈,说起来头头是道,看起似乎很牛逼的样子,但本质上却是大而无当,空洞无物。任何上过大学,专业是计算机的同学或许能深有体会,像操作系统,编译原理,计算机网络等学科的基础理论内容,老师在课堂上讲解总是流于表面,各种深奥的大词从老师嘴里不断飘出,搞原创 2018-01-19 15:49:25 · 445 阅读 · 0 评论 -
设计自制编程语言Monkey编译器:使用普拉特解析法解析复杂的算术表达式
普拉特解析法解析复杂的算术表达式原创 2017-12-28 15:09:59 · 943 阅读 · 0 评论 -
使用普拉特分析法解析极为复杂的算术表达式
用普拉特解析法解析足够复杂的算术表达式原创 2018-01-03 17:13:11 · 1195 阅读 · 0 评论 -
Reactjs开发自制编程语言Monkey的编译器:语法解析
语法解析器入门,解析let 语句原创 2017-12-21 15:23:44 · 691 阅读 · 0 评论 -
自制monkey语言编译器:符号系统与代码执行
前几节,我们介绍了如何使用语法解析算法对代码进行解析。语法解析的目的是为了明白代码语句的意图,例如对于语句: c = a + b; 语法解析后,编译器就明白代码是想把变量a和b的值相加,再把结果赋值给变量c.然而要想实现这样的结果,编译器还得需要不少辅助信息,例如变量a和b对应的数值是多少,这些辅助信息我们会存储在一种称之为符号表的数据结构中。在前几节语法解析时,代码实际上建造了一种树形结构,...原创 2018-02-16 18:07:53 · 475 阅读 · 0 评论 -
Reactjs开发自制编程语言Monkey的编译器:高能技术干货之语法高亮2
在web上实现关键字实时语法高亮效果原创 2017-11-18 16:39:34 · 670 阅读 · 0 评论 -
Reactjs开发自制编程语言Monkey的编译器:高能技术干货之语法高亮1
使用分词算法,和观察者模式等技术,即时遍历DOM结构树,实现关键字的即时语法高亮效果原创 2017-11-17 16:15:16 · 5265 阅读 · 0 评论 -
java开发编译器:把C语言的循环指令编译成java字节码
把C语言的循环指令:for, while等编译成java字节码原创 2017-10-24 16:37:39 · 681 阅读 · 0 评论