编译器
第24卷第6期
2008年11月
福建师范大学学报(自然科学版)
JournalofFujianNormalUniversity(NaturalScienceEdition)
V01.24No.6
NOV.2008
文章编号:1000—5277(2008)06-0029—05
面向教学的类c编译器的设计与实现
邹昌伟
(福建师范大学软件学院,福建福州
350108)
摘要:设计并实现了一个面向教学的类C编译器,支持全局或局部变量的定义、函数参数传递和函数递归调用.为避免对实际硬件体系结构的依赖,采用了Java语言的设计思想,类C编译器实现了先编译后解释执行的设计方案,同时给出了比文法更为直观的类C语言的语法图.
关键词:编译器;面向教学;类C语言中图分类号:TP314
文献标识码:A
DesignandImplementionof
a
Teaching—orientedC-likeCompiler
ZOUChang—wei
(Faculty
ofSoftware,FujianNormalUniversity,Fuzhou350108,China)
Abstract:Designingandimplementing
ports
a
teaching-orientedC—likecompiler,whichsup—
as
thedefinitionoflocalandglobalvariables,functionparameters,aswell
avoidthe
dependencyofhardware
architecture,using
recursive
design
calloffunctions.Tothe
thinkingofJavalanguage,whichcompilesprogramsintomediatelanguageandtheninter—
pretspure
it.C—likelanguage'sgrammardiagramisgrammar
shown,whichismuchmoreintuitivethan
Keywords:compiler;teaching—oriented;C—likelanguage
《编译原理》是计算机专业的主要专业基础课之一.它介绍编译器构造的一般原理、基本设计方法和主要实现技术.该课程抽象难懂,但在教学与实践中如果能结合编译器的源码进行分析与改进,就能起到理论联系实际、由抽象到具体的效果.在传统的《编译原理》的教学中,此课程的相关实验环节相对比较薄弱.虽然有诸多的开源编译器(例如Lcc【11编译器等),但这些工业化的编译器并不太适用于有限学时的实践教学.为此,国内不少高校采用Pascal语言创始人N.Wirth编写的PL/O语言[2]的编译程序来进行相关的实验教学.但PL/0语言主要存在两个问题:一是过于简单,甚至没有函数参数;二是语法上接近Pascal语言,但目前国内计算机相关专业的入门语言大多数采用的是C语言或由其衍生出来的语言,学生并不熟悉Pascal语法.基于此,本文设计并实现了一个适用于教学的类C编
译器,支持函数参数的传递,实现栈式存储管理,允许函数的递归调用,内置C风格的printf和scanf
函数用于输入和输出,但唯一支持的数据类型为整型.
1类C编译器的设计与实现
为了避免对与课程无关的具体汇编语言的讨论,类C编译器采用的是Java语言的设计思想,即先编译后解释执行.为此需要定义出一套中间代码的指令集,这里采用的是四元式形式的中间代码.另外还需要实现一个虚拟机来解释执行编译后的中间代码.类C语言本身的语法定义并未采用文法的形
收稿日期:2007。10—29
作者简介:邹昌伟(1981一).男.助教,硕士,研究方向:web.