小型pascal编译器C语言代码,Pascal简单编译器

64ef389b57e64bfeccc148061c88b48f.png

0

b24006ab9d4e9f3c538d3972c5342a8d.png

172

2018-08-21 22:49

本文设计了一个简单的编译器,包括编译器较完整的前端和后端的设计,可以对 Pascal 文法的源程序进行词法分析、语法分析、语义分析、并生成四元式中间代码,最后能生成目标代码。 文法包括变量和常量的声明,多维数组、结构体的声明和调用,过程函数和子函数的声明和调用,算术运算,逻辑运算,赋值语句,条件选择语句,循环语句。 在词法分析中,扫描器依次扫描写有源程序的文本文档中的字符,按给出的有限状态自动机转换关系拼成单词,生成 Token 序列,支持添加注释信息,以及 Pascal 语言代码中错误的位置信息。 本文用递归下降子程序的方法进行语法分析,同时进行语义分析。语义动作包括查填符号表系统,并借助符号表系统进行定义和重定义检查,类型匹配校验,数据的越界和溢出检查,值单元存储分配信息,子函数和过程函数的参数传递与校验,并生成四元式中间代码。 在编译器后端中,基于 DAG 有向无环图对基本块内的四元式序列做了优化。 最后,生成了在单寄存器下经过寄存器分配优化的目标代码。

ab357c123f4684eb7f967a59cd3b1e5f.png

如无法正常下载,请通过“查看联系方式”或者APP扫码,直接联系作者开放下载权限

48defb0763fca89249a2d7e42e5afe71.png

0

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值