编译原理实验手册.doc

  1. 1、本文档共34页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
编译原理实验 实验介绍 本实验面向的是本科阶段的编译原理课程设计,主要应用lexyacc来实现Tiny语言的编译器。实验内容 本学期的编译实验内容是实现一个简单的TINY语言的编译器。这个编译器的输入是。 整个编译器又分为词法分析、语法分析、语义分析、汇编代码生成部分。其中大家编码实现四部分。这四部分分别称之为PP1、PP2、PP3、PP4,如图1.2所示: 实验环境 Windows操作系统,集成调试环境采用Microsoft Visual C++。编程语言是Lex扫描程序生成器,Yacc分析生成器。最后生成TINY语言的编译器。 实验要求 提交实验 请大家按照如下目录结构整理自己的程序和文档 Documents目录中应当有一个设计文档readme。在文档中请写明姓名、班号、学号、Email等个人信息,以便遇到问题时可以及时与你联系。此外,文档中还要写明程序实现的功能,主要数据结构的设计,重要算法的流程,以及实验中遇到的问题和解决方法。如果对实验做了扩展,在文档还要详细说明扩展实现的功能及实现方法。需要特别注意的是,如果在自己的实验程序中借用了别人的算法或代码,必须在文档中明确说明,并在源程序中加以注释,否则按照抄袭论处。 Base目录中应当包含实现了基本要求的程序代码。其中的Source子目录中是程序代码,这个目录中应包括程序运行需要的所有文件(包括那些不需要你修改的文件)。Test目录中应包括我们给出的所有测试文件及其标准输出。无论你是否对程序进行扩展,这个目录的内容都是必须要有的。 Extension目录是可选的。如果你对程序进行了扩展,请将扩展版本的源代码和测试文件放在这个目录中。其中的Source子目录中是扩展后的程序代码。Test子目录中是你针对扩展部分提供的测试文件及相应的输出。此外,还请提供一个测试文档test,说明你的扩展能够处理的输入,以便助教在测试时设计相应的测试文件。 最后,请将上述所有的程序文件打包成zip文件,zip文件名为“自己的学号.zip”,例如“981362.zip”,并上载到服务器目录下或用邮件交上来。 评分标准 实验部分在总成绩中占20%。评分的主要标准是程序输出与标准输出相符合的程度。扩展部分在整个实验完成后酌情统一加分。检查方式 在大家提交实验后,我们将对提交的程序进行测试。同时,在平时小测和期末考试中,会考察与实验相关的内容。对于那些实验题目回答得很差的同学,我们将下调其实验成绩。 基本知识在开始我们的实验之前,我们要先介绍我们编译原理实验所用到的两个工具lex和yacc基于这两个工具我们完成我们的实验.Lex 快速入门: Lex 代表 Lexical Analyzar。Lex 是一种生成扫描器的工具。扫描器是一种识别文本中的词汇模式的程序。这些词汇模式(或者常规表达式)在一种特殊的句子结构中定义,这个我们一会儿就要讨论。一种匹配的常规表达式可能会包含相关的动作这一动作可能还包括返回一个标记。当 Lex 接收到文件或文本形式的输入时,它试图将文本与常规表达式进行匹配。它一次读入一个输入字符,直到找到一个匹配的模式。如果能够找到一个匹配的模式,Lex 就执行相关的动作(可能包括返回一个标记)。另一方面,如果没有可以匹配的常规表达式,将会停止进一步的处理,Lex 将显示一个错误消息。Lex 和 C 是强耦合的。一个 .l 文件(Lex 文件具有 .l 的扩展名)通过 lex 公用程序来传递,并生成 C 的输出文件。这些文件被编译为词法分析器的可执行版本。 Lex 的常规表达式 常规表达式是一种使用元语言的模式描述。表达式由符号组成。符号一般是字符和数字,但是 Lex 中还有一些具有特殊含义的其他标记。 下面定义了 Lex 中使用的一些标记并给出了几个典型的例子。用 Lex 定义常规表达式 字符含义A-Z, 0-9, a-z 构成了部分模式的字符和数字。. 匹配任意字符,除了 \n。 - 用来指定范围。例如:A-Z 指从 A 到 Z 之间的所有字符。 [ ] 一个字符集合。匹配括号内的任意 字符。如果第一个字符是 ^ 那么它表示否定模式。例如: [abC] 匹配 a, b, 和 C中的任何一个。 * 匹配0个或者多个上述的模式。 + 匹配1个或者多个上述模式。 ? 匹配0个或1个上述模式。 $ 作为模式的最后一个字符匹配一行的结尾。 { } 指出一个模式可能出现的次数。 例如: A{1,3} 表示 A 可能出现1次或3次。 \ 用来转义元字符。同样用来覆盖字符在此表中定义的特殊意义,只取字符的本意。 ^ 否定。 | 表达式间的逻辑或。 一些符号 字符的字面含义。元字符具有。 / 向前匹配。如果在匹配的模版中的“/”后跟有后续表达式,只匹配

文档评论(0)

ze122230743 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档