浙江理工大学编译原理实验一

2015-2016学年第一学期《编译原理》实验一 实验报告

13计科3 夏以彬 [1**********]3

一、实验目的

1、构造一个《科学计算器》的词法分析程序,程序要求能对输入的字符串流进行词法分析。

2、在实验的过程中,学会应用词法分析的方法——构造NFA和DFA。

二、token的正规式描述

数字:(0|1|2...|8|9)*.( 0|1|2...|8|9)*

分隔符:(=|^|!|%|+|-|*|/|(|))

字符串:(a|b|…|y|z)+

因为在实现中,特殊字符串是先取的普通字符串的token,然后与存储的特殊字符表比对,因此这里只给出普通字符串的token。

三、有限状态机状态图

四、词法分析器的数据结构与算法

主要数据结构包括:

主要的算法:根据有限状态机状态图构造类如下二维表格

然后根据表格构造各个事件的处理方法,以及各个动作的处理方法。当然,也需要添加一个辅助方法,以根据输入判断触发的是哪个事件。

源代码:

#include

#include

using namespace std;

int main(){

stringst,st_num="";

charch[100];

doubleresult,point;

cout

cin>>st;

strncpy(ch,st.c_str(),st.length());

//cout

for(int i=0;i

if(ch[i]=='+'){

cout

cout

//point=atof(st_num);

//result=result+point;

st_num="";

}

else if(ch[i]=='-'){

cout

cout

st_num="";

}

else if(ch[i]=='*'){

cout

cout

st_num="";

} else if(ch[i]=='/'){ cout

cout

st_num="";

}

}

else{

st_num=st_num+ch[i];

}

}

}

五、token的输出

输入1.0+2*3=

输出

输入1.0+(2*3+cos3)/3.6-6=

输出

输入tan(1.0+(sin2*3+cos3)/3.6-6)=

输出

输入4.0log(1.0+(sin2*3+cos3)/3.6-6)=

输出

六、思考题:

程序设计中哪些环节影响词法分析的效率?如何提高效率?

对于特殊字符的词法分析,采用了先接收再对比识别,略影响了分析效率。如果可以在完全接受之前就做出判断,则可提高效率。

2015-2016学年第一学期《编译原理》实验一 实验报告

13计科3 夏以彬 [1**********]3

一、实验目的

1、构造一个《科学计算器》的词法分析程序,程序要求能对输入的字符串流进行词法分析。

2、在实验的过程中,学会应用词法分析的方法——构造NFA和DFA。

二、token的正规式描述

数字:(0|1|2...|8|9)*.( 0|1|2...|8|9)*

分隔符:(=|^|!|%|+|-|*|/|(|))

字符串:(a|b|…|y|z)+

因为在实现中,特殊字符串是先取的普通字符串的token,然后与存储的特殊字符表比对,因此这里只给出普通字符串的token。

三、有限状态机状态图

四、词法分析器的数据结构与算法

主要数据结构包括:

主要的算法:根据有限状态机状态图构造类如下二维表格

然后根据表格构造各个事件的处理方法,以及各个动作的处理方法。当然,也需要添加一个辅助方法,以根据输入判断触发的是哪个事件。

源代码:

#include

#include

using namespace std;

int main(){

stringst,st_num="";

charch[100];

doubleresult,point;

cout

cin>>st;

strncpy(ch,st.c_str(),st.length());

//cout

for(int i=0;i

if(ch[i]=='+'){

cout

cout

//point=atof(st_num);

//result=result+point;

st_num="";

}

else if(ch[i]=='-'){

cout

cout

st_num="";

}

else if(ch[i]=='*'){

cout

cout

st_num="";

} else if(ch[i]=='/'){ cout

cout

st_num="";

}

}

else{

st_num=st_num+ch[i];

}

}

}

五、token的输出

输入1.0+2*3=

输出

输入1.0+(2*3+cos3)/3.6-6=

输出

输入tan(1.0+(sin2*3+cos3)/3.6-6)=

输出

输入4.0log(1.0+(sin2*3+cos3)/3.6-6)=

输出

六、思考题:

程序设计中哪些环节影响词法分析的效率?如何提高效率?

对于特殊字符的词法分析,采用了先接收再对比识别,略影响了分析效率。如果可以在完全接受之前就做出判断,则可提高效率。


相关文章

  • 外国教育名著目录
  • 外国教育名著目录 [1] [古希腊]柏拉图.郭斌和.张竹明译.理想国[M].北京:商务印书馆,1986. [2] [古希腊]亚里士多德.吴寿彭译.政治学[M].北京:商务印书馆,1997. [3] [古罗马]昆体良.任钟印译.雄辩术原理[M ...查看


  • 原码一位乘法器
  • 课 程 设 计 报 告 课程设计名称:课程设计题目: 院(系):专 业:班 级:学 号:姓 名:指导教师:完成日期: 计算机组成原理课程设计 定点原码一位乘法器的设计 目 录 第1章 总体设计方案 ..................... ...查看


  • 智能抢答器设计
  • 能力拓展训练 题 目 学 院 专 业 班 级 姓 名 指导教师 智能抢答器设计 2013年6月24日 能力拓展训练任务书 学生姓名: 专业班级: 指导教师: 工作单位: 自动化学院 题 目: 智能抢答器设计 初始条件:计算机.Max+plu ...查看


  • 本专业是计算机硬件与软件相结合
  • 本专业是计算机硬件与软件相结合.面向系统.侧重应用的宽口径专业.通过基础教学与专业训练,培养基础知识扎实.知识面宽.工程实践能力强,具有开拓创新意识,在计算机科学与技术领域从事科学研究.教育.开发和应用的高级人才. 本专业开设的主要课程有: ...查看


  • 广东工业大学2015编译原理课程设计
  • 编译原理课程设计报告 课程名称____编译原理课程设计_ 题目名称PL/0编译器的扩充 学生学院__ 计算机学院______ 专业班级___ 学 号______ 学生姓名____ 指导教师______ 张巍 2015年 12 月 27日 一 ...查看


  • 南理工DDS实验报告
  • 南京理工大学 电子线路课程设计 --直接数字频率合成器 学号:姓名:院系:指导老师: 电光学院姜萍 时间: 摘要 报告内容为设计一个具有清零.使能.频率控制.相位控制.输出多种波形(包括正余弦.锯齿波.方波).提高计算精度,经过D/A转换之 ...查看


  • 通信工程\计算机科学与技术\电子信息工程
  • 信息电子学院专业介绍 电子信息工程(理工类) 本专业是国家特色专业.浙江省重点专业,具有硕士学位授予权.本专业培养具有电子技术和信息系统的基础知识与相应能力,能采用先进的手段从事各类电子设备和信息系统的研究.设计.制造.应用和开发以及大型复 ...查看


  • [教育测量与评价]李爱娟
  • <教育测量与评价>教学方案 (2008-2009学年2学期) 李爱娟 一.课程简介 1. 课程的地位和作用 <教育测量与评价>是一门新兴的.独立的综合应用学科,是公共事业管理专业的专业课程.本课程的目的是促进学生理解 ...查看


  • 湖南工业大学EDA实验报告
  • EDA技术及应用-Verilog HDL版 实 验 报 告 实验一 数字秒表的设计 一. 实验类型 综合性实验 二.实验仪器设备与工具软件 1.PC机(要求内存在256M以上): 2.EDA实验开发系统: 3.Quartus II软件 三. ...查看


热门内容