题目:C0编译器的设计与实现(10周) C0语言的语法结构定义如下: ->[] {} -> int id {, id}; -> ( int id | void id) '(' ')' ->void main'(' ')' ->'{' [] '}' -> {} -> | | '{''}' | | | | | | ; ->if '('')' [else ] ->while '(' ')' ->; ->id = ; ->return ['(' ')'] ; ->scanf '(' id ')'; ->printf '(' [ ] ')'; -> [+|-] { (+|-) } -> {(*|/) } -> id|'(' ')' | num | ->id '(' ')' 其中,id代表标识符,num代表整数,其含义及构成方式与C语言相一致;C0源程序中的变量需先定义后使用,其作用域与生存期与C语言相一致;自定义函数可超前使用(调用在前,定义在后)。 根据上面给定的C0文法及其说明和下列定义的假想栈式指令系统,按递归下降分析法设计并实现该C0语言的编译器,生成栈式目标代码;编写栈式指令系统的解释执行程序,输出目标代码的解释执行结果。 假想的栈式指令系统表 LIT 0 a 将常数值取到栈顶,a为常数值 LOD t a 将变量值取到栈顶,a为相对地址,t为层差 STO t a 将栈顶内容送入某变量单元中,a为相对地址,t为层差 CAL 0 a 调用函数,a为函数地址 INT 0 a 在运行栈中为被调用的过程开辟a个单元的数据区 JMP 0 a 无条件跳转至a地址 JPC 0 a 条件跳转,当栈顶值为0,则跳转至a地址,否则顺序执行 ADD 0 0 次栈顶与栈顶相加,退两个栈元素,结果值进栈 SUB 0 0 次栈顶减去栈顶,退两个栈元素,结果值进栈 MUL 0 0 次栈顶乘以栈顶,退两个栈元素,结果值进栈 DIV 0 0 次栈顶除以栈顶,退两个栈元素,结果值进栈 RED 0 0 从命令行读入一个输入置于栈顶 WRT 0 0 栈顶值输出至屏幕并换行 RET 0 0 函数调用结束后,返回调用点并退栈
2021-10-14 20:07:25 599KB 编译原理 代码 实验报告
1
C0编译器编译原理实验 C0编译器的 设计与实现原创-当年我们交的作业被评为优秀作业!!!要不是毕业好几年我都不舍得分享出来!!!还有配套代码在我的博客 CTRL+D收藏一下或者关注走一波-有你所需!不断更新! 其他相关下载,配套代码以及PPT。稳妥的小老弟 https://me.csdn.net/download/qq_27500493
2021-10-14 19:39:39 1.26MB 编译原理c0 c0编译器
1
C0文法 <加法运算符> ::= +|- <乘法运算符> ::= * |/ <关系运算符> ::= <|<=|>|>=|!=|== <字符> ::= _|a|...|z|A|...|Z <数字> ::= 0|<非零数字> <非零数字> ::= 1|...|9 <字符串> ::= "{ }" //字符串中可以出现所有合法的可打印字符集中的字符 <程序> ::= [<常量说明部分>][<变量说明部分>]{<子函数定义部分>}<主函数> <常量说明部分> ::= const<常量定义>{,<常量定义>}; <常量定义> ::= <标识符>=<整数> <整数> ::= [+|-]<非零数字>{<数字>}|0 <标识符> ::= <字符>{<字符>|<数字>} <声明头部> ::= int <标识符> <变量说明部分> ::= <声明头部>{,<标识符>}; <子函数定义部分> ::= (<声明头部>|void <标识符>)<参数><复合语句> <复合语句> ::= ‘{’[<常量说明部分>][<变量说明部分>]<语句序列>‘}’ <参数> ::= ‘(’<参数表>‘)’ <参数表> ::= int<标识符>{,int<标识符>} | 空 <主函数> ::= (void |int) main <参数><复合语句> <表达式> ::= [+|-]<项>{<加法运算符><项>} <项> ::= <因子>{<乘法运算符><因子>} <因子> ::= <标识符>|‘(’<表达式>‘)’|<整数>|<子函数调用语句> <语句> ::= <条件语句>|<循环语句>|‘{’‘}’|<子函数调用语句>; |<赋值语句>; | ;|<读语句>;|<写语句>;|<空> <赋值语句> ::= <标识符>=<表达式> <条件语句> ::= if‘(’<条件>‘)’<语句>[else<语句>] <条件> ::= <表达式><关系运算符><表达式>|<表达式> <循环语句> ::= while‘(’<条件>‘)’<语句> <子函数调用语句> ::= <标识符>‘(’<值参数表>‘)’ <值参数表> ::= <表达式>{,<表达式>}|<空> <语句序列> ::= <语句>{<语句>} <读语句> ::= scanf‘(’<标识符>‘)’ <写语句> ::= printf‘(’[,][<表达式 >]‘)’ <返回语句> ::= return [ ‘(’<表达式>‘)’] 注:返回值为void类型的子函数不允许出现在表达式中
2021-07-09 10:03:18 891KB 北航 计算机
1
重要说明:在制作 C0++ 后弃用,在我的伙伴和我对前端进行了大量更改后将发布直接进入 jvm 字节码 C0++ 的编译器(以避免其他学生搜索 C0 的 411 参考解决方案) 较早的自述文件: Java C0 编译器 这是什么? 从 C0 代码到 java 字节码的编译器。 有关 C0 的更多信息: : 意图: 跨多个系统编译的 C0 的兼容性 易于在本地机器上使用(而不是在 cmu-andrew-linux 服务器上编译) 额外的多功能性和对 CC0 的改进。 这包括... 方法、结构、类型定义等没有按顺序解析 关于编译错误的额外读数,当遇到错误时代码不会中断 可跨多个平台重新分发 在个人电脑上使用的能力更强 版本 v.8(几乎处于 alpha 阶段)
2021-07-06 12:05:01 685KB Java
1
MATLAB程序,对小波变换C0复杂度算法进行仿真,实现语音端点检测,性能优越
1
这个是c0的 编译器
2021-06-02 23:53:29 31KB c0 编译器
1
采用C0复杂度算法,分析了Logistic映射,简化Lorenz系统和超混沌Lorenz系统的复杂度特性,并与系统的Lyapunov指数谱和分岔图进行比较,结果表明,C0复杂度能正确反映系统的复杂性度特性;三系统复杂度从大到小依次为Logistic系统,超混沌Lorenz系统和简化Lorenz系统。将C0复杂度算法与谱熵算法(SE)和强度统计算法(LMC)计算结果对比,进一步说明C0算法分析混沌系统复杂度的有效性。系统复杂度随时间演变的特性分析表明,系统复杂度在一定范围内变化,即系统具有退化的稳定性,两个连续系统中y序列复杂度最大。为混沌系统规范信息加密,保密通信领域提供了理论与实验依据。
1
应用于端点检测的非线性C0复杂度的实现,对于想了解这方面的同学希望有帮助
2021-04-25 14:05:07 1KB C0复杂度测度
1
学校大三课程的编译器设计实验作业,基于扩展c0文法的编译器设计,编译最终结果为MIPS代码,优化未做。包括源程序,说明文档,测试程序三部分。
2021-04-14 09:25:52 1.35MB 编译器
1
19383-C0 数字电子技术基础(第5版) 阎石.zip数字电子技术基础课件
2021-02-09 18:00:26 55.64MB 数字电路
1