| 注册
home doc ppt pdf
请输入搜索内容

热门搜索

年终总结个人简历事迹材料租赁合同演讲稿项目管理职场社交

《编译原理》课程实验报告

文***享

贡献于2021-05-27

字数:4853







编译原理课程实验报告


题 目: 词法分析器实验
专 业: 计算机科学技术
班 级: 1班
学 号: * * * *****
姓 名: * * *

















实验目
通实验编程实践学生解词法分析务掌握词法分析程序设计原理构造方法学生编译基概念原理方法完整清楚理解正确熟练运
二实验容求
VC++VBJAVA语言实现C语言子集源程序进行词法分析通输入源程序左右字符串进行扫描分解次输出单词部编码单词符号身值遇错误显示Error然跳错误部分继续显示 时进行标识符登记符号表理
实现词法分析设计工作:
(1)源程序文件中读入字符
(2)统计行数列数错误单词定位
(3)删空格类字符包括回车制表符空格
(4)拼写单词(码属性)二元式表示(属性值——token机表示)
(5)果发现错误报告出错
(6)根需否填写标识符表供阶段
单词基分类:
u 关键字:程序语言定义具固定意义标识符称保留字例 if forwhileprintf 单词种码1
u 标识符:表示种名字变量名数组名函数名
u 常数: 数值常数 125 10531416
u 运算符:+*
u 关系运算符: << >><>
u 分界符: ()[]
三实验程序设计说明
1.实验方案设计
1程序设计考虑:
u 程序说明部分种表格变量安排空间
具体实现时类单词设计成结构长度均相形式较短关键字面补空
k数组关键字表数组元素存放关键字(事先构造关键字表)
s 数组存放分界符表(事先构造分界符表)简单起见分界符算术运算符关系运算符放s表中(编程时应建立算术运算符表关系运算符表类号)合成类
id ci 数组分存放标识符常数
instring 数组输入源程序单词缓存
outtoken 记录输出部表示缓存
造表填表设置变量
u 程序开始先工方式输入关键字造k表输入分界符等造 p 表
u 程序工作部分设计成便调试循环结构循环处理单词接收键盘送单词调词法分析程输出单词部码
例单词设计成形式 (typepointer)
中type指明单词种类例:Pointer指单词存放处开始位置
造表填表设置变量
u 程序开始先工方式输入关键字造k表输入分界符等造 p 表
u 程序工作部分设计成便调试循环结构循环处理单词接收键盘送单词调词法分析程输出单词部码
例单词设计成形式 (typepointer)
中type指明单词种类例:Pointer指单词存放处开始位置



词法分析设计流程图
2词法分析程考虑
u 根输入单词第字符(时需读第二字符)
判断单词类产生类号:字符k表示关键字id表示标识符
ci表示常数s 表示分界符
u 标识符常数需分标识符表常数表中已登记元素相较表中已该元素记录表中位置未出现标识符序填入数组 id 中常数变二进制形式存入数组中 ci 中记录表中位置
lexical 程中嵌两程:名 getchar功 instring 中序取出字符指针 pint 加 1 名 error出现错误时调程输出错误编号
u 求:识出单词两字节等长表示称部码第字节 t 第二字节 i t 单词种类关键字 t1分界符 t2算术运算符 t3关系运算符 t4符号数 t5标识符 t6i 该单词表中指针部码值表 1 关键字表表 2 分界符表表 3 算术运算符 i 值表 4 关系运算符 i 值

















取字符统计字符行列位置子程序

2.程序源代码
#include
#include
#include
#include
using namespace std
#define MAX 50
char ch ' '
string keyword[50]{boolbreakcaseincludecharconst
continue default dodoubleelsefalse
floatforifintlong namespacenewreturn
shortsignedstructswitchtrueusingvoidwhile then }
int gjz(string c){
int i
for(i0i if(keyword[i]compare(c)0) return 1
}
return 0
}

int zm(char c) {
if(((c<'z')&&(c>'a'))||((c<'Z')&&(c>'A'))) return 1
else return 0
}

int num(char c){
if(c>'0'&&c<'9') return 1
else return 0
}

void caculate(FILE *fpin){
ofstream out(mytesttxtiosout)
string arr
while((chfgetc(fpin))EOF) {
arr
if(ch' '||ch'\t'||ch'\n'){}
else if(zm(ch)){
while(zm(ch)||num(ch)) {
arrarr+ch
chfgetc(fpin)
}
fseek(fpin1LSEEK_CUR)
if (gjz(arr)){out< else out< }


else if(num(ch)){
while(num(ch)||ch''&&num(fgetc(fpin))||fgetc(fpin)'e'||ch'e')
{
if(ch'') fseek(fpin1LSEEK_CUR)
arrarr+ch
if(ch'e')
{
chfgetc(fpin)

if( ch'+') arr+'+'
else {arr+'' fseek(fpin1LSEEK_CUR)}
}
chfgetc(fpin)
}
fseek(fpin3LSEEK_CUR)
out< }
else switch(ch){
case'+'
case''
case'*'
case''
case'' out< case'('
case')'
case'['
case']'
case''
case'#'
case''
case''
case'{'
case'}' out<
case ''{
string string1
do
{
string1+ch
chfgetc(fpin)
} while (ch'')
string1+ch
out< }break

case'' {chfgetc(fpin)
if(ch'') out<<<< \t4<<\t运算符<
else {out<<<< \t4<<\t运算符<
fseek(fpin1LSEEK_CUR)}
}break

case'<' {chfgetc(fpin)
if(ch'')out<<<<< \t4<<\t运算符< if(((ch<'z')&&(ch>'a'))||((ch<'Z')&&(ch>'A'))) { fseek(fpin1LSEEK_CUR)
out<<<<< \t5<<\t界限符< else if(ch'<')out<<<<<< \t7<<\t控制符< else if(ch'>') out<<<><< \t4<<\t运算符< else{out<<<<< \t4<<\t运算符< fseek(fpin1LSEEK_CUR)}
}break

case'>' {chfgetc(fpin)
if(ch'') out<<><< \t4<<\t运算符< if(ch'>')out<<>><< \t7<<\t控制符< if(ch'\n'){fseek(fpin1LSEEK_CUR)
out<<><< \t5<<\t界限符< else {out<<><< \t4<<\t运算符< fseek(fpin1LSEEK_CUR)}
}break
default out< }
}
}
void read(){

ifstream in(mytesttxtiosout)
string x

while(in)
{in>>xcout<>x coutwidth(20)cout<>x coutwidth(20)cout<}
void main(){
char in_fn[30]
FILE * fpin
cout<<请输入源文件名(包括路径缀名)
for(){
cin>>in_fn
if((fpinfopen(in_fnr))NULL) break
else cout<<文件路径错误请输入源文件名(包括路径缀名)
}
cout<<\n********************词法分析工作*********************< caculate(fpin)
fclose(fpin)
cout< read()
cout<<\n********************参目录mytesttxt*********************< system(pause)
}
3.程序执行结果


图 1 程序输入文件容


图 2 输出结果
4.实验程序优点特色
程序特色: 出错处理力强非法字符输入会报错:31fd 字符串定错误输出警告*出现时必*收尾时*全部错误处理警告
四实验中出现问题解决方法
*注释符*发生死循环检查修改错误*连续*12*3456*时出现面3处次读取判断情况修改改正
五体会意见建议
C语言学学难时解词法分析程序设计方法编译程序编译时第步做容方法
华dong交理工学院

文档香网(httpswwwxiangdangnet)户传

《香当网》用户分享的内容,不代表《香当网》观点或立场,请自行判断内容的真实性和可靠性!
该内容是文档的文本内容,更好的格式请下载文档

下载文档,方便阅读与编辑

文档的实际排版效果,会与网站的显示效果略有不同!!

需要 2 香币 [ 分享文档获得香币 ]

该文档为用户出售和定价!

购买文档

相关文档

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

编译原理语法分析实验报告软工班一、 实验内容二、 实验目的三、 实验要求四、 程序流程图l 主函数;l scanner();l irparser()函数l yucu() /*语句串分析*/l statement()/*语句分析函数*/l expression()/*表达式分析函数*/l term()/*项分析函数*/ l factor()/*因子分析函数*/五、 程

文***享 2年前 上传940   0

编译原理课程设计报告 简单编译器的设计与实现

 编译原理课程设计 ——简单编译器的设计与实现 班 级: 组长: 组员: 指导教师: 设计时间: 姓名 分工 组长: 语法分析部分,语义分析和中间代码生成部分,符号表的管理,目标代码的生成,数据结构的设计和总体框架的设计。 组员: 中间代码优化部分,负责从DAG图中获得优化后的四元式代码,以及

文***享 5年前 上传1876   0

编译原理实验报告LR(1)分析法

河南工业大学实验报告课 程 编译原理 实验名称 实验四 LR(1)分析法 一. 实验目的 1.掌握LR(1)分析法的基本原理; 2.掌握LR(1)分析表的构造方法; 3.掌握LR(1)驱动程序的构造方法。二. 实验内容及要求根据某一文法编制调试LR(1)分析程序,以便对任意输入的符号串进行分析。本次实验的目的主要是加深对LR(1)分析法的理解。

文***品 2年前 上传1044   0

编译原理实验报告LL(1)分析法

课 程 编译原理 实验名称 实验二 LL(1)分析法 实验目的 1.掌握LL(1)分析法的基本原理; 2.掌握LL(1)分析表的构造方法; 3.掌握LL(1)驱动程序的构造方法。一. 实验内容及要求根据某一文法编制调试LL(1)分析程序,以便对任意输入的符号串进行分析。本次实验的目的主要是加深对预测分析LL(1)分析法的理解。 对下列文法,

文***享 1年前 上传399   0

编译原理实验报告(一)词法分析程序

 编译原理实验报告(一) ----词法分析程序【目的要求】 通过设计编制调试一个具体的词法分析程序,加深对词法分析原理的理解。并掌握在对程序设计语言源程序进行扫描过程中将其分解为各类单词的词法分析方法。 【题目分析】本实验以用户指定的想编译的以C语言编写的文件作为词法分析程序的输入数据。在进行词法分析中,先

文***品 3年前 上传767   0

实验2.正规式的定义与应用 编译原理实验报告

实验2. 正规式的定义与应用一、 实验目的1. 熟悉正规式的构造方法;2. 熟悉从字符串中识别特定字符串的方法;3. 复习对文件的操作。二、 实验内容和要求已知一段C语言程序:#include “stdio.h“int gcd(int k){ int m; m=k+2; return m;}main(){ /*main function*/ int i, main

文***品 1年前 上传410   0

编译原理实验报告3-LL(1)文法构造

实验3 LL(1)文法构造一、实验目的熟悉LL(1)文法的分析条件,了解LL(1)文法的构造方法。 二、实验内容1、编制一个能够将一个非LL(1)文法转换为LL(1)文法;2、消除左递归;3、消除回溯。 三、实验要求1、 将一个可转换非LL(1)文法转换为LL(1)文法,要经过两个阶段,1)消除文法左递归,2)提取左因子,消除回溯。2、 提取文法左因子算法:1)对文法G的所

文***享 2年前 上传299   0

编译原理课程设计心得体会

编译原理课程设计心得体会  经过一个星期的编译原理课程设计,本人在刘贞老师的指导下,顺利完成该课程设计。通过该课程设计,收获颇多。  一、对实验原理有更深的理解  通过该课程设计,掌握了什么是编译程序,编译程序工作的基本过程及其各阶段的基本任务,熟悉了编译程序总流程框图,了解了编译程序的生成过程、构造工具及其相关的技术对课本上的知识有了更深的理解,课本上的知识师机械的,表面的。通过把

a***k 11年前 上传631   0

编译原理实验指导书

目 录相关问题说明 1实验题 2实验1 词法分析(2课时) 3实验2 语法分析(2课时) 5实验3 语义分析(2课时) 7实验4 代码生成(2课时) 9参考书目 11相关问题说明本课程共有4个实验, 本课程中所实现的程序为普通C或C++程序,在Windows环境下,属于控制台应用程序。提交实验成果:1. 实验成果包括:n 源程序。用学号加姓名方式命名项目或源程序所在

文***品 3年前 上传581   0

编译原理课后习题答案

编译原理课后习题答案Chapter 11.解答:程序设计语言:程序设计语言是遵守一定规范的、描述“计算”(Computing)过程的形式语言。一般可以划分为低级语言和高级语言两大类。低级语言是面向机器的语言,它是为特定的计算机系统设计的语言,机器指令、汇编语言是低级语言。高级语言是与具体计算机无关的“通用”语言,它更接近于人类的自然语言和数学表示,例如FORTRAN、Pascal、C等等我

z***u 1年前 上传597   0

《编译原理》期末试题(五)

1.语言是A.句子的集合 B.产生式的集合 C.符号串的集合 D.句型的集合2.编译程序前三个阶段完成的工作是A.词法分析、语法分析和代码优化 B.代码生成、代码优化和词法分析

x***2 2年前 上传724   0

编译原理-实验报告2-递归下降分析法

计算机硬件实验室实验报告姓名学号班 级成 绩 设备名称及软件环境递归下降分析一、实验目的: 根据某一文法编制调试递归下降分析程序,以便对任意输入的符号串进行分析。本次实验的目的主要是加深对递归下降分析法的理解。二、实验要求:对下列文法,用递归下降分析法对任意输入的符号串进行分析: (1)E->TG(2)G->+TG|—TG(3)G->ε(4)T

文***品 3年前 上传598   0

编译原理期末试题附答案

《编译原理》期末试题(一)一、是非题(请在括号内,正确的划√,错误的划×)(每个2分,共20分)1.编译程序是对高级语言程序的解释执行。(× )2.一个有限状态自动机中,有且仅有一个唯一的终态。(×)3.一个算符优先文法可能不存在算符优先函数与之对应。 (√ )4.语法分析时必须先消除文法中的左递归 。 (×)5.LR分析法在自左至右扫描输入串时就能发现错误,但不能准确地指出出错地点

z***u 1年前 上传407   0

编译原理课程设计LR(0)分析器自动构造程序

XX学院工科课程设计 -《编译原理》课程设计报告 题 目: LR(0)分析器自动构造程序的实现 学 号: 姓 名: 班 级:

文***品 2年前 上传397   0

《数值分析》课程实验报告

《数值分析》课程实验报告姓 名: 学 号: 学 院: 机 电 学 院 日 期: 2015 年 X 月X 日 目 录实验一 函数插值方法 1实验二 函数逼近与曲线拟合 5实验三 数值积分与数值微分 7实验四 线方程组的直接解法 9实验五 解线性方程组的迭代法

文***品 3年前 上传2088   0

编译原理实验3-4预测分析表方法

实验3-4 预测分析表方法班级:_ _ 学号:_ _ 姓名:_ _ 得分:_ _一、实验目的理解预测分析表方法的实现原理。二、实验内容: 编写一通用的预测法分析程序,要求有一定的错误处理能力,出错后能够使程序继续运行下去,直到分析过程结束。可通过不同的文法(通过数据表现)进行测试。 二、实验内容提示1.算法数据构造:

z***u 1年前 上传316   0

编译原理课后习题第三版答案

第二章P36-6(1)是0~9组成的数字串(2)最左推导:最右推导:P36-7G(S)P36-8文法:最左推导:最右推导:语法树:/*************************************************/P36-9句子iiiei有两个语法树:P36-10/****************************

z***u 2年前 上传503   0

西电编译原理上机报告DBMS的设计与实现

编译原理上机报告《DBMS的设计与实现》学号: 姓名: 手机: 邮箱: 完成时间:2013 年X月X日目 录1. 项目概况 31.1 基本目标 31.2 完成情况 32. 项目实现方案 42.1 逻辑结构与物理结构 42.2 语法结构与数据结构 72.3 执行流程 1

z***u 2年前 上传309   0

广东海洋大学编译原理期末复习资料

广东海洋大学《编译原理》期末试题(一) 一、是非题(请在括号内,正确的划√,错误的划×)(每个2分,共20分) 1.编译程序是对高级语言程序的解释执行。(× ) 2.一个有限状态自动机中,有且仅有一个唯一的终态。(×)(终态一个或多个) 3.一个算符优先文法可能不存在算符优先函数与之对应。 (√ ) 4.语法分析时必须先消除文法中的左递归 。 (×) 5.LR分析法在自左至右扫描输入

文***品 5年前 上传1759   0

《数据库原理及应用》实验报告

 数据库原理及应用 实验报告 实验课程: 学 号: 学生姓名: 班级: XXX年

文***享 5年前 上传4471   0

计算机组成原理实验报告 (2)

计 算 机 组 成 原 理 实 验 报 告Computer Organization Lab Reports______________________________________________________________________________班级: ___ 姓名:__ _ 学号:_____ 实验日期:_____________学院: ___ _ 专业:_ ___

z***u 1年前 上传474   0

计算机组成原理实验报告

计算机组织与体系结构实 验 报 告评 语:成绩教 师: 年 月 日班 级: ________学 号: ____________姓 名: ______实验地点: E-Ⅱ区 311 _实验时间: 第三批 实验一 存储器实验

z***u 1年前 上传433   0

计算机组成原理实验报告 (1)

郑州航空工业管理学院计算机科学与应用系实验报告课 程 名: 计算机组成原理 学 号: 姓 名: 指导教师: 成 绩; 计算

文***品 1年前 上传386   0

《化工原理》课程信息与描述

个人整理精品文档,仅供个人学习使用《化工原理》(上)课程信息与描述课程名称:化工原理(上)学分数:课程属性:专业基础课 □专业必修课 √专业选修课 □课程边界描述:本课程是《食品工厂设计》 、《食品加工原理》、《食品工艺学》课程的前置课程;本课程的前置课程:《物理化学》、《工程制图》。课程重要知识点描述:主题模

文库小子 3年前 上传425   0

交通规划原理课程设计

 交通规划课程设计Course Exercise in Traffic Planning专业班级:交通工程姓名: 班级: 交工班 学号: 设计时间:2012\6\4-2012\6\10 指导教师: 成绩综合评定表1出勤及平时表现(40%)考核项目成绩分布优良中

文***享 1年前 上传317   0