用c语言实现简单c编译器 编译原理课程设计,编译原理课程设计___c语言编译器实现.doc...

本文档详细介绍了C语言编译器的实现过程,包括词法分析、语法分析、语义分析和代码生成四个阶段。程序接收libo.txt文件作为输入,进行词法分析产生单词符号,语法分析生成语法树,语义分析输出中间代码,并最终生成汇编代码。程序主要针对整型常量、四则运算(加法和乘法)、布尔表达式、赋值语句、条件转移和循环语句。程序还包含了流程图和错误处理机制,如未声明变量的检测。
摘要由CSDN通过智能技术生成

编译原理课程设计___c语言编译器实现

扬州大学

编译原理课程设计

学 号: 091202122

姓 名:

专 业: 计算机科学与技术

课 程: 编译原理

指导教师: 陈宏建

目录

一.程序简介与分析---------------------------------------------------------3

二.程序适用范围-----------------------------------------------------------3

三.词法分析---------------------------------------------------------------3

四.语法分析---------------------------------------------------------------4

五.语义分析和中间代码生成------------------------------------------------10

六.代码生成--------------------------------------------------------------12

七.流程图----------------------------------------------------------------13

八.实现------------------------------------------------------------------14

九.程序运行结果----------------------------------------------------------14

十.总结------------------------------------------------------------------18

十一.附录(源程序)--------------------------------------------------------18

简单的编译程序设计

程序简介与分析

本程序由四个部分组成:词法分析子程序,语法分析子程序,语义分析子程序,目标代码生成程序。本程序输入一个叫libo.txt的c语言源程序,然后对它进行词法,语法,语义分析,并输出汇编代码。

词法分析输入的是c语言源程序,输出的3是具有独立语法意义的单词符号。

语法分析以词法分析产生的编码流为输入,按照SLR(1)分析方法进行语法分析,产生语法树,输出移进和归约的动作,如果源程序不符合文法,则有“语法分析出错”的提示。

语义分析阶段,在语法分析的同时,在归约的时候,给出相应的语义动作,最后输出中间代码四元式和新的符号表,如果有未声明的变量出现,则会提示出出错,并显示出此变量的名称。

代码生成阶段,将语义分析得到的中间代码四元式转化为汇编语言的目标代码并输出。

程序适用范围

本程序的使用范围为:整型常量,四则运算(为了简化问题,本程序只考虑加法运算和乘法运算)和布尔表达式以及相应的赋值语句,条件转移语句和循环语句。

词法分析

根据词法分析的需要,我将源程序中的单词符号分为:保留字,字母(标识符),

界符三类,统一用一张表表示如下:

界符,保留字表

单词

=

+

*

>

:

;

{

}

(

)

and

if

then

while

do

int

标志符

编码

1

2

3

4

5

6

7

8

9

10

31

32

33

35

36

37

25

程序从源程序文件libo.txt中一次读入一个字符,并判断它是不是字母,界符,

保留字,空格,换行,结束符号或者非法字符。

流程图如下:

词法分析流程图

语法分析

eq \o\ac(○,1).源程序中涉及的文法G[P]定义如下表:

说明语句

表达式

布尔表达式

句法

0、P’→P

1、P→id () L;R

2、L→L;D

3、L→D

4、D→id:int

5、E→E+T

6、E→T

7、T→T*F

8、T→F

9、F→(E)

10、F→id

11、B→B and B

12、B→id>id

13、M→id=E

14、S→if B then M

15、S→while B do M

16、S→M

17、N→N;S

18、N→S

19、R→{N}

eq \o\ac(○,2).上述文法的每个非终结符的FIRST 集和FOLLOW集如下表:

FIRST

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值