一个简单编译器的实现过程

一、编译器的实现步骤

1、词法分析,将原文件划分为单独的单词或关键字。

2、语法分析,利用上下文无关文法分析程序的短语结构。

3、语义分析,根据短语建立抽象语法树,确定短语含义、变量关联声明、检查表达式类型。

4、翻译,根据抽象语法树翻译成中间表示树不依赖任何特定的程序语言和目标机器结构。

5、指令选择,根据目标机器的指令体系,对中间表示树的节点进行划分。

6、控制流分析。

7、数据流分析。

8、寄存器分配。

9、代码生成。

在上编译原理课程的时候,我们完成了一个基于miniJava的编译器和垃圾回收器


代码:https://github.com/xuhaoavl/tiger

二、词法分析器

1、词法记号,编程语言语法单元的一系列字符,词法记号一般分为有限的几种。

例如:ID(字符串)、NUM(整数)、REAL(实数)、IF(if)、VOID(void)、COMMA(逗号)。。。。

2、正则表达式,一般用正则表达式匹配字符窜的方式检查字符串类型。

符号(a,v,h,b等),或(a|b)、并(a·b)、空(ε)、重复(克林闭包,所有可能的字符串)

有一些可能会产生模糊性,例如if8是字符串还是if和8,对此有以下两种解决方法

a、最长匹配,选择可以匹配正则表达式的最长输入字符串。

b、优先匹配

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值