求一编译课程设计

由于时间紧迫,本人能力不足,只写了一点自顶向下的文法,希望大家帮忙,老师要的紧,实在不好意思~!!

1、本课程设计不仅仅是一个程序设计,而是一个完整的软件设计。因此除了提交程序之外,还要提交完整的文档。其中文档应包括:(1)系统设计说明书,(2)程序设计语言设计说明书,和(3)用户使用说明书
2、要求将全部系统,包括全部文档、程序的源代码及可执行代码,全部输入到软盘中。文档用WORD文件制作。在文档中应有作者的姓名、班级和学号,并将此信息标贴在软盘外面,内外应一致。

任务1:
设计一个小型编译器。该编译器应具有词法分析,语法分析和语法制导翻译的功能,接受的源语言是你自己设计的一种程序设计语言,其输出的目标语言为四元式的中间代码或汇编语言。
1、源语言为你自己设计的一种程序设计语言,它要求如下:
(1)能够支撑赋值运算、算术运算、逻辑运算,以及字符串的运算,支持各种表达式。
(2)能够支持基本的数据类型和多维数组。
(3)能够实现序列、分支、循环等控制结构。
(4)能够实现函数的调用,参数传递为传值方式。函数不采用嵌套定义。
2、(1)词法应包括基本的词类,即关键字、标识符、常量、运算符和间隔符。
(2)词法分析器应为标识符和常量建立符号表和常量表作为相应词汇的值。
(3)词法分析器的自动机应确定化和极小化
3、语法分析器可随意采用LL(1)文法(即由顶向下),或者SLR(1)文法(即自底向上)的语法分析方法。也可采用LEX、YACC等工具,也可利用其他形式的工具。
4、翻译必须要用语法制导翻译来实现。可以任意选用由顶向下或者自底向上的方法来实现。
5、系统设计所使用的程序设计语言不作任何的要求和限制。
6、系统的设计必须是结构化的,鼓励采用面向对象的程序设计方法。
7、系统的程序设计必须要有较为完备的注释,有良好的可读性。
8、系统要求具有良好的用户界面。
9、系统的应具有鲁棒性。即,系统不应因无操作或源程序出错而中断运行,但在出错处理上不作要求。

任务2
对PL/0语言及其编译器进行扩充和修改。其源程序和相关说明请参见所附文件或清华大学出版社出版的《编译原理》
对现存的PL/0编译程序可做如下修改或扩充,
注释。注释由(*和*)包含,不允许嵌套。
2、布尔类型的数据
布尔类型的BNF为:

var_option → ε| var var_decl_list
var_decl_list → var_decl | var_decl_list var_decl
var_decl → ident_list : data_type
data_type → integer | boolean

这种修改包括:
(1)区别整型与布尔型变量、常量和表达式。
(2)增加按严格计算的布尔类型运算符and、or和not。这些算符以及己有的运算符的优先级与Pascal语言相同。
(3)能够使用布尔常量true和false。
(4)把PL/0语言中的“条件”概念一般化为Pascal语言那样。
(5)布尔表达式可以比较大小:false < true
3、布尔表达式的短路计算
增加布尔类型(见2,除2的(2)外),但对and和or采取短路计算。
4、数组
增加由任何数据类型构造的一维数组。数组的下标限于纯量类型。
注意:数组可以由其它的数组来构造,因而必须考虑多维数组的情况。数组的上下界可为任意的纯量常数。
数组的定义如下:

data_type → integer | boolean | array [const..const] of data_type
const → ident | number

语言中允许有数组说明,对数组元素赋值,在表达式中引用数组元素。为了便于解释执行,可能要增加新的PL/0机器操作指令。
5、参数。语法同Pascal,采用值-结果方式传递(不用var声明)。
6、函数。语法同Pascal。
7、else子句和repeat语句
8、for语句,语法参照Pascal或C语言
9、exit语句(退出当前执行过程)和break语句(跳出包含它的最内层循环),
10、记录(结构),语法同Pascal语言。
11、更有力的语法错误恢复机制

为了实现以上功能,你可任意增加PL/0处理机的指令。但要注意指令的简单与合理。

需要PL/0语言的留邮箱,我发给大家!!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
编译原理课程设计是一个非常重要的课程,它旨在教授学生如何设计和实现编译器。对于计算机科学和软件工程专业的学生来说,这门课程是必不可少的。 在编译原理课程设计中,我们首先学习了编译器的基本概念和原理,包括词法分析、语法分析、语义分析和代码生成等。通过这些学习,我们了解了源代码是如何被转换成目标代码的。 在课程设计的过程中,我们需要选择一个编程语言作为目标语言,并设计一个编译器来将该语言的源代码转换成目标代码。我们需要进行词法分析、语法分析和语义分析等步骤来检查源代码的正确性,并生成目标代码。 在进行课程设计时,我们需要完成以下几个关键任务:首先,我们需要设计和实现词法分析器,将源代码转换成一系列的词法单元。然后,我们需要设计和实现语法分析器,将词法单元转换成语法树。接下来,我们需要进行语义分析,检查语法树是否符合语义规则。最后,我们需要设计和实现代码生成器,将语法树转换成目标代码。 在课程设计的过程中,我们需要熟悉编译器的设计和实现方法。我们需要学习使用一些工具和技术来辅助编译器的开发,如Flex和Bison等。 通过这门课程设计,我们将获得很多宝贵的经验和知识。我们将深入了解编译器的原理和技术,掌握设计和实现编译器的方法。这将为我们今后的工作和学习打下坚实的基础。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值