【Java开源代码栏目提醒】:网学会员为广大网友收集整理了,《编译原理》课程实践环节--程序设计语言Wren的自动排版工具 - 课程设计,希望对大家有所帮助!
《编译原理》课程实践环节如果你对本课程实践环节的题目、要求或内容等方面的设计有任何意见或建议,欢迎联系中山大学计算机科学系李文军老师(lnslwjzsu.edu.cn)。
实验题目:程序设计语言 Wren 的自动排版工具在正式开始你的实验之前,请务必花足够时间仔细阅读完本文档关于实验的描述与约定!实验目的本实验是一个基于编译原理课程核心教学内容的综合性实验,利用一门简单程序设计语言的处理工具设计与实现,帮助学生通过实践深入理解和牢固掌握编译技术中词法分析、语法分析、语法制导翻译等重要环节。
本实验的主要目标包括:1、掌握词法分析器的工作原理与构造方法,并能够推广到对文本的串匹配操作等其他同类 型应用。
2、掌握词法分析器自动生成工具 lex 或类似工具的工作原理与使用方法,学习如何编写一 个 lex 源文件以解决词法分析或模式匹配问题,初步体会软件自动化的基本思路。
3、掌握递归下降的预测分析方法以及语法制导的翻译技术,
学习如何根据 BNF 语法定义和 应用需求设计一个翻译模式,并利用高级程序设计语言的递归机制实现一个翻译模式。
4、掌握语法分析器自动生成工具 yacc 或类似工具的
工作原理与使用方法,学习如何编写一 个 yacc 源文件以解决语法分析及语法制导翻译问题,进一步加深体会软件自动化的基本 思路。
5、通过加强设计方面的讨论与编程风格的实践,提高对面向对象设计的认识,养成良好的 编程习惯,并学会多个工程文档的组织与提交。
李文军:《编译原理》课程实践环节程序设计语言 Wren程序设计语言Wren是一门颇为简单的命令式(imperative)语言,这类风格的语言又称为过程式(procedural)语言。
Kenneth Slonneger和Barry Kurtz设计了这门语言,并以它为实例介绍程序设计语言语法处理与语义处理的形式化途径。
对此有兴趣的同学可参考: Kenneth Slonneger and Barry Kurtz. Formal Syntax and Semantics of Programming Languages: A Laboratory Based Approach. Addison- Wesley Publishing 1995 ISBN 0-201-65697-3Wren语言的语法定义如下:ltprogramgt :: program ltidentifiergt is ltblockgtltblockgt :: ltdecl_seqgt begin ltcommand_seqgt endltdecl_seqgt :: ε ltdeclarationgt ltdecl_seqgtltdeclarationgt :: var ltvariable_listgt : lttypegt lttypegt :: integer booleanltvariable_listgt :: ltvariablegt ltvariablegt ltvariable_listgtltcommand_seqgt :: ltcommandgt ltcommandgt ltcommand_seqgtltcommandgt :: ltvariablegt : ltexprgt skip read ltvariablegt write ltinteger_exprgt while ltbool_exprgt do ltcommand_seqgt end while if ltbool_exprgt then ltcommand_seqgt end if if ltbool_exprgt then ltcommand_seqgt else ltcommand_seqgt end ifltexprgt :: ltinteger_exprgt ltbool_exprgtltinteger_exprgt :: lttermgt ltinteger_exprgt ltweak_opgt lttermgtlttermgt :: ltelementgt lttermgt ltstrong_opgt ltelementgtltelementgt :: ltnumeralgt ltvariablegt ltinteger_exprgt – ltelementgtltbool_exprgt :: ltbool_termgt ltbool_exprgt or ltbool_termgtltbool_termgt :: ltbool_elementgt ltbool_termgt and ltbool_elementgtltbool_elementgt :: true false ltvariablegt ltcomparisongt not ltbool_exprgt ltbool_exprgt ltcomparisongt :: ltinteger_exprgt ltrelationgt ltinteger_exprgtltvariablegt :: ltidentifiergtltrelationgt :: lt lt gt gt ltgtltweak_opgt :: –ltstrong_opgt :: /ltidentifiergt :: ltlettergt ltidentifiergt ltlettergt ltidentifiergt ltdigitgtltlettergt :: a b c d e f g h i j k l m n o p q r s t u v w x y zltnumeralgt :: ltdigitgt ltdigitgt ltnumeralgtltdigitgt