没有合适的资源?快使用搜索试试~ 我知道了~
编译原理课程实践环节:程序设计语言Wren的自动排版工具.docx
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 131 浏览量
2022-07-09
18:10:17
上传
评论
收藏 41KB DOCX 举报
温馨提示
试读
14页
编译原理课程实践环节:程序设计语言Wren的自动排版工具.docx
资源推荐
资源详情
资源评论
《编译原理》课程实践环节
如果你对本课程实践环节的题目、要求或内容等方面的设计有任何意见或建议,欢迎联系中山大学计算机
科学系李文军老师(lnslwj@zsu.edu.cn)。
实验题目:程序设计语言 Wren 的自动排版工具
在正式开始你的实验之前,请务必花足够时间仔细阅读完本文档关于实验的描述与约定!
实验目的
本实验是一个基于编译原理课程核心教学内容的综合性实验,利用一门简单程序设计语言的
处理工具设计与实现,帮助学生通过实践深入理解和牢固掌握编译技术中词法分析、语法分
析、语法制导翻译等重要环节。
本实验的主要目标包括:
1、掌握词法分析器的工作原理与构造方法,并能够推广到对文本的串匹配操作等其他同类
型应用。
2、掌握词法分析器自动生成工具 lex 或类似工具的工作原理与使用方法,学习如何编写一个
lex 源文件以解决词法分析或模式匹配问题,初步体会软件自动化的基本思路。
3、掌握递归下降的预测分析方法以及语法制导的翻译技术,学习如何根据 BNF 语法定义和
应用需求设计一个翻译模式,并利用高级程序设计语言的递归机制实现一个翻译模式。
4、掌握语法分析器自动生成工具 yacc 或类似工具的工作原理与使用方法,学习如何编写一
个 yacc 源文件以解决语法分析及语法制导翻译问题,进一步加深体会软件自动化的基本
思路。
5、通过加强设计方面的讨论与编程风格的实践,提高对面向对象设计的认识,养成良好的
编程习惯,并学会多个工程文档的组织与提交。
李文军:《编译原理》课程实践环节
- 2 -
Kenneth Slonneger and Barry Kurtz.
Formal Syntax and Semantics of
Programming Languages: A Laboratory Based Approach . Addison-
Wesley Publishing ,1995, ISBN 0-201-65697-3
程序设计语言 Wren
程序设计语言Wren是一门颇为简单的命令式( imperative)语言,这类风格的语言又称为过
程式(procedural)语言。Kenneth Slonneger 和Barry Kurtz 设计了这门语言,并以它为实例介
绍程序设计语言语法处理与语义处理的形式化途径。对此有兴趣的同学可参考:
Wren语言的语法定义如下:
<program>
<block>
<decl_seq>
<declaration>
<type>
::= program <identifier> is <block>
::= <decl_seq> begin <command_seq> end
::=
ε
| <declaration> <decl_seq>
::= var <variable_list> : <type> ;
::= integer | boolean
<variable_list> ::= <variable> | <variable> , <variable_list>
<command_seq>
<command>
<expr>
<integer_expr>
<term>
<element>
<bool_expr>
<bool_term>
<bool_element>
::= <command> | <command> ; <command_seq>
::= <variable> := <expr> | skip
| read <variable> | write <integer_expr>
| while <bool_expr> do <command_seq> end while
| if <bool_expr> then <command_seq> end if
| if <bool_expr> then <command_seq> else <command_seq> end if
::= <integer_expr> | <bool_expr>
::= <term> | <integer_expr> <weak_op> <term>
::= <element> | <term> <strong_op> <element>
::= <numeral> | <variable> | ( <integer_expr> ) | – <element>
::= <bool_term> | <bool_expr> or <bool_term>
::= <bool_element> | <bool_term> and <bool_element>
::= true | false | <variable> | <comparison>
| not ( <bool_expr> ) | ( <bool_expr> )
<comparison>
<variable>
::=
::=
<integer_expr> <relation> <integer_expr>
<identifier>
<relation>
::=
<= | < | = | > | >= | <>
<weak_op>
::=
+ | –
<strong_op>
::=
* | /
<identifier>
::=
<letter> | <identifier> <letter> | <identifier> <digit>
<letter>
::=
a | b |
c
| d | e
| f | g |
h
|
i
|
j | k | l | m
<numeral>
| n
::=
| o | p
<digit>
|
|
q | r |
<digit>
s | t | u
<numeral>
|
v
|
w
| x | y | z
<digit>
::=
0 | 1 |
2
| 3 | 4
| 5 | 6 |
7
|
8
|
9
李文军:《编译原理》课程实践环节
- 3 -
实验一:熟悉 BNF 定义
Wren 语言的 BNF 定义给出了该语言语法方面的形式化规格说明。仔细阅读 Wren 语言的 BNF
定义,并完成以下实验内容。
实验步骤
步骤 1.1、编写 Wren 源程序
遵循 Wren 语言的 BNF 定义,编写两个语法正确的 Wren 源程序。要求在这两个源程序中,
用到 Wren 语言的所有语法构造,即你编写的两个源程序加在一起覆盖了 Wren 语言提供的
声明、类型、表达式、命令、单词等各种构造。如果有可能,你编写的 Wren 源程序最好是
有其实际意义的,譬如一个求阶乘的程序、一个求最大公约数的程序等。注意,这里仅要求
你编写语法正确的 Wren 源程序,并未强制要求这些源程序是语义正确的。
然后,参考 Wren 语言的 BNF 定义,编写两个含有语法错误的 Wren 源程序。要求在这两个
源程序中,既包含一些词法错误(例如:不合法的标识符、不合法的常量等),也包含一些
语法错误(例如:括号不匹配、表达式缺少运算符、表达式缺少操作数、命令缺少关键字等)。
这些语法正确的和语法错误的 Wren 源程序将在后述实验步骤中作为你的测试用例。
步骤 1.2、讨论 Wren 程序的二义性
根据 Wren 语言的 BNF 定义,讨论 Wren 程序的二义性问题,即讨论根据上述 BNF 定义的
上下文无关文法是否存在二义性。
如果你认为该文法存在二义性,则举例说明在什么地方会出现二义性,并探讨如何改造文法
以消除二义性。
如果你认为该文法没有二义性,则请解释:为何在其他高级程序设计语言中常见的那些二义
性问题在 Wren 语言中并未出现?
提交结果
将实验一的所有结果存放在子目录 xxxNNN\ex1 中,其中 xxx 是你的学号的末 3 位,NNN
是你的中文姓名。
例如,学号为“
00184163”、姓名为“范信果”的同学,应将其完成的实验一全部结果存放
在
“163 范信果\ex1”子目录中,注意学号与姓名之间不要加空格、姓与名之间亦不要加空
格。
剩余13页未读,继续阅读
资源评论
Cheng-Dashi
- 粉丝: 108
- 资源: 1万+
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功