《编译原理》课程综合性实验报告
编译原理实验报告
编译原理实验报告
实验⼀词法分析
⼀、实验⽬的
设计、编制并调试⼀个词法分析程序,加深对词法分析原理的理解。
⼆、实验要求
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 各种单词符号对应的种别码
单词符号种别码单词符号种别码
bgin 1 :17
If 2 := 18
Then 3 < 20
wile 4 <> 21
do 5 <= 22
end 6 > 23
lettet(letter|digit)* 10 >= 24 dight dight* 11 = 25 + 13 ;26
—14 ( 27
* 15 ) 28
/ 16 # 0
2.3 词法分析程序的功能:
输⼊:所给⽂法的源程序字符串。
输出:⼆元组(syn,token或sum)构成的序列。
其中:syn为单词种别码;
token为存放的单词⾃⾝字符串;
(1,begin)(10,x)(18,:=)(11,9)(26,;)(2,if)……
编译原理实验报告
编译原理实验报告
一、实验目的和要求
本次实验旨在对PL_0语言进行功能扩充,添加新的语法特性,进一步提高编译器的功能和实用性。具体要求如下:
1.扩展PL_0语言的语法规则,添加新的语法特性;
2.实现对新语法的词法分析和语法分析功能;
3.对扩展语法规则进行语义分析,并生成中间代码;
4.验证扩展功能的正确性。
二、实验内容
1.扩展语法规则
本次实验选择扩展PL_0语言的语句部分,添加新的控制语句,switch语句。其语法规则如下:
<switch_stmt> -> SWITCH <expression> CASE <case_list>
<default_stmt> ENDSWITCH
<case_list> -> <case_stmt> , <case_stmt> <case_list>
<case_stmt> -> CASE <constant> : <statement>
<default_stmt> -> DEFAULT : <statement> ,ε
2.词法分析和语法分析
根据扩展的语法规则,需要对新的关键字和符号进行词法分析,识别出符号类型和记号类型。然后进行语法分析,建立语法树。
3.语义分析
在语义分析阶段,首先对switch语句的表达式进行求值,判断其类
型是否为整型。然后对case语句和default语句中的常量进行求值,判
编译原理实验报告
编译原理实验报告
班级
姓名:
学号:
自我评定:
实验一词法分析程序实现
一、实验目的与要求
通过编写和调试一个词法分析程序,掌握在对程序设计语言的源程序进行扫描的过程中,将字符形式的源程序流转化为一个由各类单词符号组成的流的词法分析方法。
二、实验内容
根据教学要求并结合学生自己的兴趣和具体情况,从具有代表性的高级程序设计语言的各类典型单词中,选取一个适当大小的子集。例如,可以完成无符号常数这一类典型单词的识别后,再完成一个尽可能兼顾到各种常数、关键字、标识符和各种运算符的扫描器的设计和实现。
输入:由符合或不符合所规定的单词类别结构的各类单词组成的源程序。
输出:把单词的字符形式的表示翻译成编译器的内部表示,即确定单词串的输出形式。例如,所输出的每一单词均按形如(CLASS,VALUE)的二元式编码。对于变量和常数,CLASS字段为相应的类别码;VALUE字段则是该标识符、常数的具体值或在其符号表中登记项的序号(要求在变量名表登记项中存放该标识符的字符串;常数表登记项中则存放该常数的二进制形式)。对于关键字和运算符,采用一词一类的编码形式;由于采用一词一类的编码方式,所以仅需在二元式的CLASS字段上放置相应的单词的类别码,VALUE字段则为“空”。另外,为便于查看由词法分析程序所输出的单词串,要求在CLASS字段上放置单词类别的助记符。
三、实现方法与环境
词法分析是编译程序的第一个处理阶段,可以通过两种途径来构造词法分析程序。其一是根据对语言中各类单词的某种描述或定义(如BNF),用手工的方式(例如可用C语言)构造词法分析程序。一般地,可以根据文法或状态转换图构造相应的状态矩阵,该状态矩阵同控制程序便组成了编译器的词法分析程序;也可以根据文法或状态转换图直接编写词法分析程序。构造词法分析程序的另外一种途径是所谓的词法分析程序的自动生成,即首先用正规式对语言中的各类单词符号进行词型描述,并分别指出在识别单词时,词法分析程序所应进行的语义处理工作,然后由一个所谓词法分析程序的构造程序对上述信息进行加工。如美国BELL实验室研制的LEX就是一个被广泛使用的词法分析程序的自动生成工具。
实验报告编译原理
北京科技大学计算机与通信工程学院
实验报告
实验名称:_________编译原理实验报告_______
学生姓名:_________ ________________
专业:_________ _________________
班级:_________ _________________
学号:_________________________
指导教师:_________ _________________
实验成绩:________________________________
实验地点:________________________________
实验时间:____2015___年___07__月_______日
一、实验目的与实验要求
1、实验目的
通过一个词法分析程序将一段给出的C语言代码的词法部分分析出来;
通过一个语法分析程序将一段给出的C语言代码的语法分析出来。
2、实验要求
二、实验设备(环境)及要求
Win7家庭普通版;Visual Studio 2013;
三、实验内容与步骤
1、实验1
(1)实验内容
对于给定一段代码,通过词法分析程序将程序中的各个类型的字表分析,包括保留字、分隔符表、运算符表、标识符、整型数、浮点类型数、字符类型、字符串类型等表文件。
(2)主要步骤
通过读入程序的文本文件,然后将分析的结果一次保存在本地文本文件。
然后通过指定的命令来将分析的结果读取出来。
附录:源码
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
编译原理实验报告
编译原理实验报告
一、实验概述
本次实验旨在设计并实现一个简单的词法分析器,即实现编译器的第一个阶段,词法分析。词法分析器将一段源程序代码作为输入,将其划分为一个个的词法单元,并将其作为输出。
二、实验过程
1.设计词法规则
根据编程语言的规范和所需实现的功能,设计词法规则,以明确规定如何将源程序代码分解为一系列的词法单元。
2.实现词法分析器
采用合适的编程语言,根据所设计的词法规则,实现词法分析器。词法分析器的主要任务是读入源程序代码,并将其根据词法规则进行分解,生成对应的词法单元。
3.测试词法分析器
设计测试用例,用于检验词法分析器的正确性和性能。测试用例应包含各种情况下的源程序代码。
4.分析和修正错误
根据测试过程中发现的问题,分析产生错误的原因,并进行修正。重复测试和修正的过程,直到词法分析器能够正确处理所有测试用例。三、实验结果
我们设计了一个简单的词法分析器,并进行了测试。测试用例涵盖了各种情况下的源程序代码,包括正确的代码和错误的代码。经过测试,词法分析器能够正确处理所有的测试用例。
词法分析器将源程序代码分解为一系列的词法单元,每个词法单元包含了单词的种类和对应的值。通过对词法单元的分析,可以进一步进行语法分析和语义分析,从而完成编译过程。
四、实验总结
通过本次实验,我深入了解了编译原理的词法分析阶段。词法分析是编译器的第一个重要阶段,它将源程序代码分解为一个个的词法单元,为后续的语法分析和语义分析提供基础。
在实现词法分析器的过程中,我学会了如何根据词法规则设计词法分析器的算法,并使用编程语言实现词法分析器。通过测试和修正,我掌握了调试和错误修复的技巧。
编译原理实验报告_15
编译原理实验报告
实验一词法分析器的设计与实现 (1)
1)实验目的 (1)
2)实验内容 (1)
3)实验要求 (1)
4)实验原理 (1)
5)实验步骤 (1)
6)状态转化图及词法分析程序 (2)
7)测试 (7)
实验二语法分析器的设计与实现 (9)
1)实验目的 (9)
2)实验内容 (9)
3)实验要求 (9)
4)实验原理 (9)
5)实验步骤 (9)
6)语法分析程序 (10)
7)测试 (16)
编译原理实验报告
专业:计算机科学与技术
学生姓名:
学号: 48
完成时间:2020年11月25日
实验一词法分析器的设计与实现
1)实验目的
①掌握正规式、状态转换图、C语言单词符号的划分及词法分析器的实现
②掌握词法分析程序的作用和接口。
2)实验内容
设计及实现C语言程序的词法分析器。
3)实验要求
①对任给的一个C语言源程序,能够虑掉空格、回车换行符、tab键及注释。
②识别各类单词符号,如关键字、标识符、运算符、常数、界符,结果以二元式形式
输出。并构造符号表。
③输出有词法错误的单词及所在行号。
4)实验原理
根据扫描到的单词符号的第一个字符的种类,分别转到相应的程序进行处理。这些程序的功能就是识别以相应字符开头的各类单词符号。
5)实验步骤
①根据C语言各类单词的正规式,构造能识别各类单词的状态转换图。
②根据状态转换图,构造识别各类单词的词法分析器。
6)状态转化图及词法分析程序
#include ""
#include ""
#include ""
FILE *fp;
int id;
void main()
{
char cbuffer;
char alphaprocess(char buffer);
实验三编译原理综合实验报告——(LR(0)语法分析的实现)
实验三 编译原理综合实验报告--(LR(0)语法分析的实现) 一、实验名称:LR(0)语法分析的实现二、仪器、设备:计算机三、参考资料:《编译原理教程》习题解析与上机指导(西安电子科技大 胡元义等)四、实验目的:综合运用所学知识,集成词法分析、符号表管理等程序的成果,编程实现LR(0)算法,能根据预先定义的文法规则生成LR(0)分析表,并对输入串进行语法分析。具体即要实现:录入合法的LR(0)文法,将输出LR(0)分析表,并可以对输入的句子进行语法分析输出相应语法树。五、实验内容:(实验步骤)⑴ 按实习目的和要求,用C或者C++语言编写一个LR(0)的语法分析程序,同时考虑相应的数据结构。 ⑵ 调试 调试例子应包括符合文法规则的LR(0)文法,以及分析程序能够判别的若干错例。作为纠错部分的功能体现 。⑶ 输出 对于所输入的LR(0)文法,不论对错,都应有明确的信息告诉外界。对于符合规则的LR(0)文法,将输出LR(0)分析表,并可以对输入的句子进行语法分析输出相应语法树。 ⑷ 扩充 有余力的同学,可适当扩大分析算法。譬如: ① SLR(1)分析方法的实现② LR(1)分析方法的实现六、实验原理、数据(程序)记录(一)实验原理:利用LR(k)类分析算法的四个步骤,分别实现"移进"、"归约"、"成功"、"报错"的分析能力。同时采用相应的数据结构实现分析表的描述。(二)程序框架: #include "stdafx.h"#include "GoData.h"GoData::GoData(){iFrom = -1;cChar = '\0';iTo = -1;}GoData::~GoData(){}// AnalyzeDlg.cpp : implementation file//#include "stdafx.h"#include "LR0ForWin.h"#include "AnalyzeDlg.h"#include #include #include "Pair.h"using namespace std;#ifdef _DEBUG#define new DEBUG_NEW#undef THIS_FILEstatic char THIS_FILE[] = __FILE__;#endif/////////////////////////////////////////////////////////////////////////////// CAnalyzeDlg dialogCAnalyzeDlg::CAnalyzeDlg(CWnd* pParent /*=NULL*/): CResizingDialog(CAnalyzeDlg::IDD, pParent){//{{AFX_DATA_INIT(CAnalyzeDlg)m_input = _T("");//}}AFX_DATA_INITm_strTempFilename = "";m_pTree = new CTreeDlg;m_pTree->Create(IDD_DIALOG3, this);m_pTree->SetControlInfo(IDC_TREE1, RESIZE_BOTH);m_pTree->SetControlInfo(IDOK, ANCHORE_BOTTOM | ANCHORE_RIGHT);}CAnalyzeDlg::~CAnalyzeDlg(){m_pTree->DestroyWindow();delete m_pTree;}void CAnalyzeDlg::DoDataExchange(CDataExchange* pDX){CResizingDialog::DoDataExchange(pDX);//{{AFX_DATA_MAP(CAnalyzeDlg)DDX_Control(pDX, IDC_EDIT1, m_edit1);DDX_Control(pDX, IDC_EXPLORER1, m_web);DDX_Text(pDX, IDC_EDIT1, m_input);//}}AFX_DATA_MAP}BEGIN_MESSAGE_MAP(CAnalyzeDlg, CResizingDialog)//{{AFX_MSG_MAP(CAnalyzeDlg
编译原理实验报告
编译原理实验报告
编译原理实验报告
一、实验目的
1. 了解编译器的基本原理和工作过程;
2. 掌握编译器设计和实现的基本方法和技巧;
3. 通过设计和实现一个简单的编译器,加深对编程语言和计算机系统的理解和认识。
二、实验原理
编译器是将高级语言程序翻译成机器语言程序的一种软件工具。它由编译程序、汇编程序、链接程序等几个阶段组成。本次实验主要涉及到的是编译程序的设计和实现。
编译程序的基本原理是将高级语言程序转换为中间代码,再将中间代码转换为目标代码。整个过程可以分为词法分析、语法分析、语义分析、代码生成和代码优化几个阶段。
三、实验内容
本次实验的设计目标是实现一个简单的四则运算表达式的编译器。
1. 词法分析
根据规定的语法规则,编写正则表达式将输入的字符串进行词法分析,将输入的四则运算表达式划分成若干个单词(Token),例如:运算符、操作数等。
2. 语法分析
根据定义的语法规则,编写语法分析程序,将词法分析得到的Token序列还原成语法结构,构建抽象语法树(AST)。
3. 语义分析
对AST进行遍历,进行语义分析,判断表达式是否符合语法
规则,检查语义错误并给出相应的提示。
4. 代码生成
根据AST生成目标代码,目标代码可以是汇编代码或者机器码。
四、实验过程和结果
1. 首先,根据输入的表达式,进行词法分析。根据所定义的正则表达式,将输入的字符串划分成Token序列。例如:输入
表达式“2+3”,经过词法分析得到的Token序列为["2", "+", "3"]。
2. 然后,根据语法规则,进行语法分析。根据输入的Token
编译原理实验报告模板(有提示)
贵州师范大学数学与计算机科学学院
实验报告
课程名称:编译原理
教师:张琦
姓名:
班级:2013级计算机专业本科班
目录
实验任务1:熟悉概念图软件 (1)
实验任务2:体会编译器的功能 (3)
实验任务3:绘制编译原理课程学习概念图 (4)
实验任务4:正则表达式的使用 (5)
实验任务5:熟练掌握课程中涉及到的算法 (6)
实验任务6:编写词法分析程序 (7)
实验任务7:熟悉YACC的使用方法 (8)
实验任务8:测试一个完整的编译器前端程序 (9)
实验任务1:熟悉概念图软件
1.实验目的:熟悉概念图软件的使用,为绘制课程学习概念图打下基础
2.实验内容:总结现有的概念图软件的优缺点,选择一款你认为比较优秀的概念图软件,安装并撰写该软件的使用说明书。
3.验收时间:第4周
提示:
1)介绍什么是概念图以及概念图的组成
2)介绍概念图有哪些形式(5种以上)
3)介绍制作概念图的基本步骤
4)介绍常用概念图软件有哪些?对比优缺点。
5)选择一款你认为比较优秀的概念图软件,针对不同的概念图形
式给出绘制方法
实验任务2:体会编译器的功能
1.实验目的:理解编译器的功能
2.实验内容:例举你所使用过的编译器,并从中选择一个最熟悉的,写出从编写到运行一个应用程序的全过程。
3.验收时间:第4周
提示:
1)给出熟悉的编译器名称
2)给出编译器可编译的高级程序设计语言清单
3)给出该编译器的环境配置说明
4)写出从编写到运行一个应用程序的全过程的具体步骤和关键截图
实验任务3:绘制编译原理课程学习概念图
1.实验目的:学会利用概念图复制和巩固本课程中所讲授的知识2.实验内容:编译原理课程每个章节的内容讲解完之后,根据自己的理解为其绘制学习概念图
编译原理实验报告文档
《编译原理》实验报告
专业班级:计101班
学号:109074002
姓名:卞恩会
指导老师:王森玉
实验内容:
1.求出每个非终结符的FIRST集合
2.求出每个产生式右部的FIRST集合
3.求出每个非终结符的Follow集合实验环境:
Visual Studio2010
实验目的:
掌握FIRST集合和FOLLOW集合的求法
测试数据1:
S->aH
H->aMd|d
M->Ab|@
A->aM|e
输出结果:
测试数据2:S->AB
S->bC
A->@
A->b
B->@
B->aD
C->AD
C->b
D->aS
D->c
测试数据3:E->TX
X->+TX|@ T->FY
Y->*FY|@ F->i|(E)
输出结果:
感受:通过上机调试代码让我对书上的单纯的理论的知识有了一个更深的理解同时让我明白了对待一个问题我们应该全面的去理解它,这样才能学到的更多。
程序清单:
编译原理实验报告1
编译原理实验报告1
03091337 李璐 03091339 宗婷婷
一、上机题目:实现一个简单语言(CPL)的编译器(解释器)二、功能要求:接收以CPL编写的程序,对其进行词法分析、语法分
析、语法制导翻译等,然后能够正确的执行程序。
三、试验目的
1. 加深编译原理基础知识的理解:词法分析、语法分析、语法制导
翻译等
2. 加深相关基础知识的理解:数据结构、操作系统等
3. 提高编程能力
4. 锻炼独立思考和解决问题的能力
四、题目说明
1. 数据类型:整型变量(常量),布尔变量(常量)
取值范围{?, -2, -1, 0, 1, 2, ?}, {true, false}
2、运算表达式:简单的代数运算,布尔运算
3、程序语句:赋值表达式,顺序语句,if-else语句,while语句
五、环境配置
1. 安装Parser Generator、Visual C++;
2. 分别配置Parser Generator、Visual C++;
3. 使用Parser Generator创建一个工程
编写l文件mylexer.l;
编译mylexer.l,生成mylexer.h与mylexer.c;
4. 使用VC++创建Win32 Console Application工程并
配置该项目;加入mylexer.h与mylexer.c,编译工程;
执行标识符数字识别器;
注意:每次修改l文件后,需要重新编译l文件,再重新编译VC工程
六、设计思路及过程
?
设计流程:
YACC预定义文法
BNF递归文法
扩展实现函数
? 词法分析
LEX的此法分析部分主要利用有限状态机进行单词的识别,在分析该部分之前,首先应该对YACC的预定义文法进行解释。在YACC中用%union扩充了yystype的内容,使其可以处理char型,int型,node型,其中Node即为定义的树形结点,其定义如下:typedef enum { TYPE_CONTENT, TYPE_INDEX, TYPE_OP } NodeEnum;
编译原理实验报告
编译原理实验报告
编译原理实验报告
一、引言
编译原理是计算机科学中的重要课程之一,它研究的是如何将高级语言程序转化为机器语言程序的过程。在本次实验中,我们将学习并实践编译原理中的一些基本概念和技术,包括词法分析、语法分析和语义分析等。
二、词法分析
词法分析是编译过程中的第一步,它负责将源程序中的字符序列转化为有意义的词法单元。在本次实验中,我们使用了Flex工具来生成词法分析器。通过定义一系列正则表达式和对应的动作,我们可以将源程序中的字符序列识别为不同的词法单元,如标识符、关键字、运算符等。
三、语法分析
语法分析是编译过程中的第二步,它负责将词法单元序列转化为抽象语法树。在本次实验中,我们使用了Bison工具来生成语法分析器。通过定义一系列文法规则和对应的动作,我们可以将词法单元序列转化为抽象语法树,并进行语法错误的检测和恢复。
四、语义分析
语义分析是编译过程中的第三步,它负责对抽象语法树进行语义检查和语义动作的执行。在本次实验中,我们通过自定义语义规则和对应的动作,对抽象语法树进行类型检查、符号表管理等操作。同时,我们还实现了一些简单的语义动作,如计算表达式的值、生成中间代码等。
五、中间代码生成
中间代码生成是编译过程中的一项重要任务,它负责将源程序转化为机器无关
的中间表示形式。在本次实验中,我们使用了三地址码作为中间表示形式。通
过对抽象语法树的遍历和一系列的转换规则,我们可以将源程序转化为等价的
三地址码表示形式。
六、实验结果与分析
通过对一些简单的测试程序的编译,我们验证了我们所实现的词法分析、语法
编译原理实验 编译器 综合报告(附源代码)
编译原理编译器综合实验
---------------工程精品神刀公子一.实验背景
编译器就是将“一种语言(通常为高级语言)”翻译为“另一种语言(通常为低级语言)”
的程序。一个现代编译器的主要工作流程:源代码(source code) →预处理
器(preprocessor) →编译器 (compiler) →目标代码(object code) →链接器(Linker) → 可执行程序 (executables)
高级计算机语言便于人编写,阅读交流,维护。机器语言是计算机能直接解读、运行的。
编译器将汇编或高级计算机语言源程序(Source program)作为输入,翻译成目标语言(Target language)机器代码的等价程序。源代码一般为高级语言(High-level language),如Pascal、C、C++、Java、汉语编程等或汇编语言,而目标则是机器语言的目标代码(Object code),有时也称作机器代码(Machine code)。
对于C#、VB等高级语言而言,此时编译器完成的功能是把源码(SourceCode)编译成通用中间语言(MSIL/CIL)的字节码(ByteCode)。最后运行的时候通过通用语言运行库的转换,编程最终可以被CPU直接计算的机器码(NativeCode)。
二.算法设计
典型的编译器输出是由包含入口点的名字和地址,以及外部调用(到不在这个目标文件中的函数调用)的机器代码所组成的目标文件。一组目标文件,不必是同一编译器产生,但使用的编译器必需采用同样的输出格式,可以链接在一起并生成可以由用户直接执行的EXE,
《编译原理》课程实验报告(词法分析)完整版
《编译原理》课程
实验报告
题目词法分析
专业计算机
指导教师签名
华东理工大学信息学院计算机系
2013年4月10日
一.实验序号:《编译原理》第一次实验
二.实验题目:词法分析
三.实验日期:2013.3.27-2013.4.10
四.实验环境(操作系统,开发语言)
操作系统:Windows
开发语言:C
五.实验要求
●修改词法:
1)将标识符的词法改为“以大写字母或小写字母开头,后面可以跟大写字母
或小写字母或数字或下划线”。
把while ((isalpha(buffer))||(isdigit(buffer)))改成while ((isalpha(buffer))||(isdigit(buffer))||buffer==’_’)
2)将<条件>中的表示相等关系的单词“=”改为“= =”
char *relation[6]={"<","<=","=",">",">=","<>"};
把其中的=改成==即可
3)将原来无小数的数改为可以有小数的数
把while (isdigit(buffer))改成while (isdigit(buffer)||buffer==’.’)
●用C语言开发词法分析程序。读入用PL/0语言编写的测试用例源程序,
将识别出的一个个单词组成单词流依序同时输出到屏幕和文件中。
六.实验步骤
1)根据修改词法后的PL/0语言编写测试用例源程序。
2)用C语言编写词法分析程序。读入PL/0语言的测试用例源程序,进行
词法分析,将识别出的一个个单词组成单词流依序同时输出到屏幕和文
(完整)编译原理实验报告(词法分析器 语法分析器)
编译原理实验报告
实验一
一、实验名称:词法分析器的设计
二、实验目的:1,词法分析器能够识别简单语言的单词符号
2,识别出并输出简单语言的基本字。标示符。无符号整数.运算符.和界符。
三、实验要求:给出一个简单语言单词符号的种别编码词法分析器
四、实验原理:
1、词法分析程序的算法思想
算法的基本任务是从字符串表示的源程序中识别出具有独立意义的单词符号,其基本思想是根据扫描到单词符号的第一个字符的种类,拼出相应的单词符号.
2、程序流程图
(1)主程序
(2)扫描子程序
3、各种单词符号对应的种别码
五、实验内容:
1、实验分析
编写程序时,先定义几个全局变量a[]、token[](均为字符串数组),c,s( char型),i,j,k(int型),a[]用来存放输入的字符串,token[]另一个则用来帮助识别单词符号,s用来表示正在分析的字符.字符串输入之后,逐个分析输入字符,判断其是否‘#’,若是表示字符串输入分析完毕,结束分析程序,若否则通过int digit(char c)、int letter(char c)判断其是数字,字符还是算术符,分别为用以判断数字或字符的情况,算术符的判断可以在switch语句中进行,还要通过函数int lookup(char token[])来判断标识符和保留字。
2 实验词法分析器源程序:
#include 〈stdio.h〉
#include
#include
int i,j,k;
char c,s,a[20],token[20]={’0’};
int letter(char s){
编译原理综合性实验报告-分析中间代码生成程序分析
编译原理综合性实验报告-分析中间代码⽣成程序分析
编译原理综合性实验报告-分析中间代码⽣成程序分析XXXXXX计算机系综合性实验
实验报告
课程名称编译原理实验学期 XXXX ⾄ XXXX 学年第 X 学期学⽣所在系部计算机系年级 X 专业班级 XXXXXX 学⽣姓名 XXX
学号 XXXXXXXXXXXX 任课教师XXX 实验成绩
计算机系制
《编译原理》课程综合性实验报告
开课实验室: 年⽉⽇实验题⽬分析中间代码⽣成程序
⼀、实验⽬的
分析PL/0编译程序的总体结构、代码⽣成的⽅法和过程;具体写出⼀条语句的中间代码⽣成过程。
⼆、设备与环境
PC兼容机、Windows操作系统、Turbo Pascal软件等。
三、实验内容
1. 分析PL/0程序的Block⼦程序,理清PL/0程序结构和语句格式。画出Block
⼦程序的流程图,写出⾄少两条PL/0程序语句的语法格式。
2. 分析PL/0程序的Block⼦程序和Gen⼦程序,了解代码⽣成的⽅法和过程。
使⽤概要算法来描述语句的代码⽣成过程。
3. ⾃⼰编写⼀个简单的PL/0程序,能够正确通过编译,得到中间代码。列出⾃
⼰编写的源程序和编译后得到的中间代码。
4. 从中选择⼀个语句或表达式,写出代码⽣成的过程。要求从⾃⼰的源程序中
选择⼀条语句,结合这条语句写出语义分析和代码⽣成过程。在描述这个过程中,要说清楚每个功能有哪个⼦程序的哪条语句来完成,说清楚语句和参数的含义和功能。
四、实验结果及分析
(⼀)Block⼦程序分析
1.常量声明的分析:
常量声明部分的语法结构定义为如下形式:
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
《编译原理》综合性
实验报告
《编译原理》课程综合性实验报告
六、实验小结和思考
通过这次实验,我对词法分析器有了进一步的了解,而且对词法分析和语法分析在实践中的应用有了深入的掌握, 让我对高级语言的学习有了更深的认识,了解得更透彻。
七、源程序清单
#includ e
#includ e
#includ e
开课实验室:C210 2016年12月8日
六、实验小结和思考
本实验加深了我对 LL(1)分析法的算法和思想的理解。
七、源程序清单
#include
#include
#include
#include
/*1:E->TE' 2:E'->+TE' 3:E'->ε? 4:T->FT' 5:T'->*FT' 6:T'->ε? 7:F->(E) 8:F->i*/
int ll1[5][6]={{1,0,0,1,0,0},
{0,2,0,0,3,3},
{4,0,0,4,0,0},
{0,6,5,0,6,6},
{8,0,0,7,0,0}};//表示LL(1)分析表内容
int main()
{
char ch[10]={'#','E'}; //用于存放符号栈内容
char str[10]; //存放输入串
char str1[10]; //用于存放最初输入的字符串
char cha; //分析字符
int i,j,m,n; //j:终结符所代表数字;m:非终结符所代表数字;n:产生式右部大小