
编译原理
文章平均质量分 79
haohulala
进击的蛋糕(dangao123coding)
展开
-
编译原理——数组结构的翻译
我们在这篇文章中只讨论静态数组的翻译,也就是在编译之前就已经确切知道大小的数组。并且我们把数组的下界定为1,也就是说数组下标是从1开始逐渐增长的。A(1,1) A(1,2) A(1,3) A(1,4) A(2,1) A(2,2) A(2,3) A(2,4) A(3,1) A(3,2) A(3,3) A(3,4) 我们用上面这个A...原创 2018-07-25 19:29:06 · 9158 阅读 · 1 评论 -
编译原理——循环语句和顺序语句的语义动作
循环语句的文法:S -> IF B THEN S1 |IF B THEN S1 ELSE S2 |WHILE B DO S11.S -> IF B THEN S1:代码结构图如下:SDT如下:S -> IF{B.TRUE = NEWLABEL();B,FALSE = S.NEXT;} B THEN {LABEL(B.TRUE ) S1.NE...原创 2018-07-26 09:44:10 · 3557 阅读 · 0 评论 -
编译原理——过程调用的语义动作
过程调用的基本形式为 CALL S(A+B,Z)翻译成指令形式:K-4 : {T := A+B}K-3 : {PAR T}K-2 : {PAR Z}K-1 : {CALL S}K: ...文法G:1. S -> CALL I(arglist) //arglist表示传参表2. arglist -> arglist1 , E3. argli...原创 2018-07-26 11:03:34 · 2662 阅读 · 0 评论 -
编译原理——说明语句翻译
说明语句:说明语句的文法G:D -> D,id | Integer id | real id //这里只用整型和实型举例子其语义语义动作:1.D -> Integer id{FILL(ENTRY(id) , int) : D.ATT := int;}2. D -> real id{FILL(ENTRY(id) , real) : D.ATT...原创 2018-07-26 12:15:35 · 2433 阅读 · 0 评论 -
基于c语言自制编程语言 代码
代码来源于《基于c语言,自制变成语言》 作者:郑钢第二章讲的就是词法分析器parser的代码,我已经放到github上了,有时间的话会继续写接下来的代码https://github.com/hao297531173/DIYProgramLanguage使用方法:根目录下输入 make 即可,正确的话会生成spr可执行文件,那个就是我们的词法分析器之后输入./spr sample.s...原创 2019-01-25 22:09:07 · 8722 阅读 · 1 评论 -
简单的makefile用法
CC = gcc#CFLAGS = -g -DDEBUG -lm -Wall -I object -I vm -I compiler -I parser -I include -I cli -I gc -W -Wstrict-prototypes -Wmissing-prototypes -Wsystem-headersCFLAGS = -g -lm -Wall -I object -I v...原创 2019-02-14 20:36:28 · 503 阅读 · 0 评论 -
c语言实现哈希表
哈希表大家都在数据结构中学习过,应该是查找最快的一种数据结构了,最好的情况下可以达到线性的时间复杂度。我们使用c语言实现开放地址的哈希表,也就是给定一个key值计算他的哈希值,如果冲突的话那么就在下一个槽位(slot)进行查找。键key的状态码如果为 VT_UNDEFINED 的话那么就是这个槽位没有被占用或者已经被删除了值value的状态码有VT_TRUE和VT_FALSE两种,只要...原创 2019-02-03 21:40:50 · 3309 阅读 · 0 评论 -
关于字节码的一个骚操作
字节码用一个字节来表示的操作码,供虚拟机vm执行,不同的操作码后面可以跟不同数量的操作数,这就导致了不同的操作码可能对运行时栈的影响不同,因此我们需要根据字节码提供对运行时栈的影响具体操作OPCODE.inc//字节码的一些示例OPCODE_SLOTS(LOAD_CONSTANT, 1)OPCODE_SLOTS(PUSH_NULL, 1)OPCODE_SLOTS(PUSH_...原创 2019-02-15 19:37:35 · 270 阅读 · 0 评论 -
TDOP自顶向下算符优先语法分析的一个小例子
TDOP (Top Down Operation Precedence)语法分析技术自顶向下算符优先语法分析技术采用自顶向下规约且通过一遍扫描得到一棵语法分析树。我们可以给运算符不同的绑定权值(bind power)来确定操作数是先和哪个操作符运算,权值分为左权值lbp和右权值rbp,权值越大就需要越先运算,比如* / 比+ - 先运算,反应到语法分析树上就是* / 为根节点的树通常是+ ...原创 2019-02-10 11:22:10 · 1638 阅读 · 0 评论