编译原理上机实习c语言小子集编译程序的实现报告,编译原理上机报告 target=_blank...

本文介绍了作者在编译原理课程中,使用C语言从头实现编译器的过程,包括词法分析、语法分析、语义分析和代码生成等阶段。程序在Windows和Linux环境下均通过编译和调试。为了测试,作者编写了包含各种语言特性的测试程序,并展示了编译结果。此外,还提供了一个简单的阶乘计算程序作为示例。
摘要由CSDN通过智能技术生成

编译原理上机报告

学号: 9761072

姓名:褚瑞

一. 实习目的:

通过上机实习加深对编译原理的理解和熟悉编译程序的构造方法。

二. 实习方法:

出于熟悉编译原理的目的,我用C语言重写了整个程序,由于工作量的原因,没有设计新的程序结构和虚拟机指令等等,全部编译程序源代码包括下列文件:

symbol.cpp用于词法分析

declaration.cpp用于语法分析的声明部分

expression.cpp用于语法分析的表达式处理部分

semantic.cpp用于语法分析的其它部分

objcode.cpp用于生成代码

error.cpp用于错误处理

main.cpp主程序

另外,interpret目录下有interpret.cpp和main.cpp,用于编译成为一个虚拟机的解释程序。

全部源代码在Windows 2000 Professional,Visual C++ 6.0以及Red Hat 7.0下编译调试通过。使用标准C语言编写,从而能在Linux下运行,是我的程序的一个特色。

三. 测试程序

为了测试所有可能的代码,我编写了下面的测试PL程序。这个程序可以编译,但是运行起来是没有意义的,它仅仅是为了包括常量,变量,数组等类型,并且包括比较复杂的表达式处理和几乎所有支持的语句,以便对编译程序进行测试。

program pp;

const PI=3 testconst='z' testconst1=TRUE

type testtype=BOOLEAN testarray=array[2..20,0..50] of boolean

var n,p:integer cr:char

procedure p1(n:integer;var p:integer);

var in_proc:char cr1:testarray

begin

cr1(2,3):=cr1(n,cr1(n,p))+ p;

in_proc:=2+p*(testconst+1);

if n<=1 then

while testconst1 do n:=PI

else

if p>1 then

begin

p:=n*p;

n:=p/n;

end;

call p1(n,cr1(2,5));

end;

begin

call read(n);

call p1(n,p);

call write(p)

end.

为了测试运行的情况,我们编写一个稍稍简单的例子,这是参考教材中求阶乘的源程序:

program pp;

var n,p:integer

procedure p1(n:integer;var p:integer);

var in_proc:char

begin

if n<=1 then p:=1

else

begin

call p1(n-1,p);

p:=n*p

end

end;

begin

call read(n);

call

p1(n,p);

call write(p)

end.

四. 编译结果

采用编译程序对这两个PL源程序进行编译。

第一个程序的结果如下:

0ENTP1 , 9;进入过程

1JMP0 , 83;无条件跳

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值