篇一 :编译原理实验报告

<<编译原理>>

上机实验报告

编译原理上机实验报告

一、    实验目的与要求

     目的:在分析理解一个教学型编译程序(如PL/0)的基础上,对其词法分析程序、语法分析程序和语义处理程序进行部分修改扩充。达到进一步了解程序编译过程的基本原理和基本实现方法的目的。

     要求:对PL/0作以下修改扩充

   基本内容

   增加单词:保留字 ELSE,FOR,TO,DOWNTO,RETURN

  运算符 +=,-=,++,--

  修改单词:不等号# 改为 <>

  增加条件语句的ELSE子句

    实验环境与工具

(1)计算机及操作系统:PC机,WindowsXP

(2)程序设计语言:C++Builder6

(3)教学型编译程序:PL/0

二、设计方案

1)  概述:

编译程序编绎的源程序是PL0,程序产生的目标代码是一个假想栈式计算机的汇编语言.称为类PCODE指令代码 ,指令格式格式如下:

 


其中F代表功能码,L表示层次差,A表示位移量,不同指令其含义有所区别。

PL/0语言是Pascal语言的一个子集,这里分析的PL/0的编译程序包括了对PL/0语言源程序进行分析处理、编译生成类PCODE代码,并在虚拟机上解释运行生成的类PCODE代码的功能。
  PL/0语言编译程序采用以语法分析为核心、一遍扫描的编译方法。词法分析和代码生成作为独立的子程序供语法分析程序调用。语法分析的同时,提供了出错报告和出错恢复的功能。在源程序没有错误编译通过的情况下,调用类PCODE解释程序解释执行生成的类PCODE代码。

…… …… 余下全文

篇二 :《编译原理》课程实验报告(词法分析)完整版

《编译原理》课程

实验报告

 

华东理工大学信息学院计算机系

20##410


一.  实验序号:《编译原理》第一次实验

二.  实验题目:词法分析

三.  实验日期:  2013.3.27-2013.4.10               

四.  实验环境(操作系统,开发语言)

操作系统:Windows

开发语言:C

五.  实验要求

l  修改词法:

1)        将标识符的词法改为“以大写字母或小写字母开头,后面可以跟大写字母或小写字母或数字或下划线”。

把while ((isalpha(buffer))||(isdigit(buffer)))改成while ((isalpha(buffer))||(isdigit(buffer))||buffer==’_’)

2)        将<条件>中的表示相等关系的单词“=”改为“= =”

char *relation[6]={"<","<=","=",">",">=","<>"};

把其中的=改成==即可

3)        将原来无小数的数改为可以有小数的数

while (isdigit(buffer))改成while (isdigit(buffer)||buffer==’.’)

…… …… 余下全文

篇三 :编译原理-词法语法分析实验报告

                       

编译原理

词法分析

一、实验目的

设计、编制并调试一个词法分析程序,加深对词法分析原理的理解。

二、实验要求

2.1 待分析的简单的词法

(1)关键字:

 begin  if  then  while  do  end

所有的关键字都是小写。

(2)运算符和界符

: =  +  -  *  /  <  <=  <>  >  >=  =  ; (  )  #

(3)其他单词是标识符(ID)和整型常数(SUM),通过以下正规式定义:

ID = letter (letter | digit)*

NUM = digit digit*

(4)空格有空白、制表符和换行符组成。空格一般用来分隔ID、SUM、运算符、界符和关键字,词法分析阶段通常被忽略。

2.2 各种单词符号对应的种别码:

表2.1 各种单词符号对应的种别码

2.3 词法分析程序的功能:

输入:所给文法的源程序字符串。

输出:二元组(syn,token或sum)构成的序列。

其中:syn为单词种别码;

      token为存放的单词自身字符串;

      sum为整型常数。

…… …… 余下全文

篇四 :编译原理 实验报告

编译原理实验报告

指导教师:


一. 实验目的

基本掌握计算机语言的词法分析程序的开发方法。以及掌握计算机语言的语 法分析程序设计与属性文法应用的实现方法。锻炼自己的编程能力和逻辑思维能 力,体会计算机编译器的奥妙之处

二. 实验内容

1.编制一个能够分析三种整数、标识符、主要运算符和主要关键字的词法 分析程序。

2.给定下列文法:

     S→id=E;

     S→if C then S

     S→while C do S

     C→E>E

     C→E<=E

用递归子程序法设计并实现语法分析程序,按照生成顺序输出产生式

3.在第四章上机题的基础上,补充以下的语义处理功能,形成一个将源程序翻译成三地址代码序列的翻译程序:

将表达式、赋值语句翻译成三地址代码

将 If 条件语句、While 循环语句翻译成三地址代码

三. 实验要求

1. 编制正规式以及正规文法,画出状态图;

2. 根据状态图,设计词法分析函数int scan( ),完成以下功能:

1) 从键盘读入数据,分析出一个单词。

2) 返回单词种别(用整数表示),

3) 返回单词属性(不同的属性可以放在不同的全局变量中)。

3. 编写测试程序,反复调用函数scan( ),输出单词种别和属性。

4. 改写文法,构造语法分析程序,要求按照最左派生的顺序输出派生的产 生式序列;

5. 改写语法分析程序,构造三地址代码生成程序。

6. 处理的源程序存放在文件中,它可以包含多个语句;

四.系统设计

完成整个系统,实现本个实验的要求,需要两个比较大的模块:词法分析器 和语法分析器。

…… …… 余下全文

篇五 :编译原理实验报告完整版(河北工业)

编译原理实验报告

  班级                 

姓名:                  

学号:                 

自我评定:75

实验一  词法分析程序实现

一、实验目的与要求

通过编写和调试一个词法分析程序,掌握在对程序设计语言的源程序进行扫描的过程中,将字符形式的源程序流转化为一个由各类单词符号组成的流的词法分析方法。

二、实验内容

根据教学要求并结合学生自己的兴趣和具体情况,从具有代表性的高级程序设计语言的各类典型单词中,选取一个适当大小的子集。例如,可以完成无符号常数这一类典型单词的识别后,再完成一个尽可能兼顾到各种常数、关键字、标识符和各种运算符的扫描器的设计和实现。

输入:由符合或不符合所规定的单词类别结构的各类单词组成的源程序。

输出:把单词的字符形式的表示翻译成编译器的内部表示,即确定单词串的输出形式。例如,所输出的每一单词均按形如(CLASS,VALUE)的二元式编码。对于变量和常数,CLASS字段为相应的类别码;VALUE字段则是该标识符、常数的具体值或在其符号表中登记项的序号(要求在变量名表登记项中存放该标识符的字符串;常数表登记项中则存放该常数的二进制形式)。对于关键字和运算符,采用一词一类的编码形式;由于采用一词一类的编码方式,所以仅需在二元式的CLASS字段上放置相应的单词的类别码,VALUE字段则为“空”。另外,为便于查看由词法分析程序所输出的单词串,要求在CLASS字段上放置单词类别的助记符。

…… …… 余下全文

篇六 :编译原理 语法分析 实验报告

《编译原理》实验报告

《编译原理》实验报告

编译原理语法分析实验报告

·1·

《编译原理》实验报告

一,实验内容

设计、编制并调式一个语法分析程序,加深对语法分析原理的理解。 二,实验目的及要求

利用C++(或C)编制确定的自顶向下预测分析语法分析程序,并对简单语言进行语法分析。

2.1、待分析的简单语言的语法

若文法G[ E]为:

(1) E –> TE’

(2) E’ –> +TE’

(3) E’ –> ?

(4) T –> FT’

(5) T’ –> *FT’

(6) T’ –> ?

(7) F –> (E)

(8) F –> i

2.2、实验要求及说明

具体要求如下:

1、用可视化界面分步骤实现,显示输出每一步的处理结果。

2、首先按照判别步骤判断给定文法是否LL(1)文法。

3、给出文法的预测分析表。

4、编写预测分析程序,输出句子的分析过程。

5、输入源文件串,以“#”结束,如果是文法正确的句子,则输出成功信息,打印“SUCCESS”,否则输出“ERROR”。

例如:

输入文件: i+i*(i+i) #

输出 success

过程:略;

输入文件: i+ii#

输出 error

·2·

《编译原理》实验报告

三,实验环境

Dvc++

四,源程序清单

#include <iostream>

#include <stack>

#define MAX 50

using namespace std;

struct T_NT

{

int code;

char str[MAX];

};

T_NT

T[12]={{0,"i"},{1,"+"},{2,"*"},{3,"("},{4,")"},{5,"#"},{6,"!"},{256,"E"},{257,"E'"},{258,"T"},{259,"T'"},{260,"F"}};

…… …… 余下全文

篇七 :编译原理实验一报告

编译原理实验报告

              

                         基于C语言词法分析器的设计

                               摘要

   首先对编译原理进行概括的介绍,1主要是描写设计内容及设计要求,2介绍设计的基本原理,3对程序设计的总体方案及各模块设计做了介绍,4对程序进行测试。

引言:

《编译原理》是国内外各高等院校计算机科学技术类专业,特别是计算机软件专业的一门重要专业课程。该课程系统地向学生介绍编译程序的结构、工作流程及编译程序各组成部分的设计原理和实现技术。由于该课程理论性和实践性都比较强,内容较为抽象复杂,涉及到大量的软件设计算法,因此,一直是一门比较难学的课程。为了使学生更好地理解和掌握编译技术的基本概念、基本原理和实现方法,实践环节非常重要,只有通过上机进行程序设计,才能使学生对比较抽象的教学内容产生具体的感性认识,增强学生综合分析问题、解决问题的能力,并对提高学生软件设计水平大有益处。

编译原理涉及词法分析,语法分析,语义分析及优化设计等各方面。词法分析(英语:lexical analysis)是计算机科学中将字符序列转换为单词(Token)序列的过程。进行语法分析的程序或者函数被称为词法分析器(Lexical analyzer简称Lexer),也叫扫描器(Scanner)。词法分析器一般以函数的形式存在,供语法分析器调用。

…… …… 余下全文

篇八 :编译原理实验报告

编译原理实验报告

实验一 词法分析程序实现

一、实验目的与要求

通过编写和调试一个词法分析程序,掌握在对程序设计语言的源程序进行扫描

的过程中,将字符形式的源程序流转化为一个由各类单词符号组成的流的词法分析方法。 二、实验设计

语言中具有的单词包括五个关键字begin、end、if、then、else;标识符;整型常数;六种关系运算符;一个赋值符和四个算术运算符。参考实现方法简述如下。

单词的分类:构造上述语言中的各类单词符号及其分类码表。

表I 语言中的各类单词符号及其分类码表

编译原理实验报告

编译原理实验报告

编译原理实验报告

识别表I所列语言中的部分单词的DFA及相关的语义过程

将表I单词集中的整常数改为无符号常数,无符号常数的单词分类码助记符:UCON 描述无符号数的正规文法和状态转换图:

无符号数的右线性文法G1[<无符号数>]如下:

〈无符号数〉→ d〈余留无符号数〉

〈无符号数〉→ ·〈小数部分〉

〈无符号数〉→ d

〈余留无符号数〉→ d〈余留无符号数〉

〈余留无符号数〉→ ·〈十进小数〉

〈余留无符号数〉→ E〈指数部分〉

〈余留无符号数〉→ d

〈余留无符号数〉→ ·

〈十进小数〉→ E〈指数部分〉

〈十进小数〉→ d〈十进小数〉

〈十进小数〉→ d

〈小数部分〉→ d〈十进小数〉

〈小数部分〉→ d

〈指数部分〉→ d〈余留整指数〉

〈指数部分〉→ +〈整指数〉

〈指数部分〉→ -〈整指数〉

〈指数部分〉→ d

〈整指数〉→ d〈余留整指数〉

〈整指数〉→ d

〈余留整指数〉→ d〈余留整指数〉

〈余留整指数〉→ d

图所示为上述文法的状态转换图,其中编号0、1、2、?、6分别代表非终结符号<无符号数>、<余留无符号数>、<十进小数>、<小数部分>、<指数部分>、<整指数>及<余留整指数>。

…… …… 余下全文