实验一、词法分析实验
实验一、词法分析实验
专业::商业软件工程1班 姓名:许演杰 学号:201506110096
一、 实验目的
编制一个词法分析程序
二、 实验内容和要求
—输入:源程序字符串
—输出:二元组(种别,单词本身)
—待分析语言的词法规则
三、 实验方法、步骤及结果测试
1. 源程序名:压缩包文件(rar或zip)中源程序名词法分析.c
可执行程序名:词法分析.exe
2. 原理分析及流程图
3.主要程序段及其解释:
#include<stdio.h> #include<string.h> #include<iostream.h> char prog[80],token[8]; char ch; int syn,p,m=0,n,row,sum=0; char *rwtab[6]={"begin","if","then","while","do","end"}; void scaner() { for(n=0;n<8;n++) token[n]=NULL; ch=prog[p++]; while(ch==' ') { ch=prog[p]; p++; } if((ch>='a'&&ch<='z')||(ch>='A'&&ch<='Z')) { m=0; while((ch>='0'&&ch<='9')||(ch>='a'&&ch<='z')||(ch>='A'&&ch<='Z')) { token[m++]=ch; ch=prog[p++]; } token[m++]='\0'; p--; syn=10; for(n=0;n<6;n++) if(strcmp(token,rwtab[n])==0) { syn=n+1; break; } } else if((ch>='0'&&ch<='9')) { { sum=0; while((ch>='0'&&ch<='9')) { sum=sum*10+ch-'0'; ch=prog[p++]; } } p--; syn=11; if(sum>32767) syn=-1; } else switch(ch){ case'<':m=0;token[m++]=ch; ch=prog[p++]; if(ch=='>') { syn=21; token[m++]=ch; } else if(ch=='=') { syn=22; token[m++]=ch; } else { syn=23; p--; } break; case'>':m=0;token[m++]=ch; ch=prog[p++]; if(ch=='=') { syn=24; token[m++]=ch; } else { syn=20; p--; } break; case':':m=0;token[m++]=ch; ch=prog[p++]; if(ch=='=') { syn=18; token[m++]=ch; } else { syn=17; p--; } break; case'*':syn=13;token[0]=ch;break; case'/':m=0;m=0;token[m++]=ch; if(ch=='*') { syn=14;token[0]=ch;} if(ch=='/') { token[m++]=ch; ch=prog[p++]; } break; case'+':syn=15;token[0]=ch;break; case'-':syn=16;token[0]=ch;break; case'=':syn=25;token[0]=ch;break; case';':syn=26;token[0]=ch;break; case'(':syn=27;token[0]=ch;break; case')':syn=28;token[0]=ch;break; case'#':syn=0;token[0]=ch;break; case'\n':syn=-2;break; default:syn=-1;break; } } int main() { p=0; row=1; cout<<"Please input string:"<<endl; do { cin.get(ch); prog[p++]=ch; } while(ch!='#'); p=0; do { scaner(); switch(syn) { case 11: cout<<"("<<syn<<","<<sum<<")"<<endl; break; case -1: cout<<"Error in row"<<row<<"!"<<endl; break; case -2: row=row++;break; default: cout<<"("<<syn<<","<<token<<")"<<endl;break; } } while(syn!=0); }
4. 运行结果及分析
四 、 实验总结
一开始是卡在了标识符和关键字的输入输出的识别分析,然后其实关键字可以当作数组,标识符当作是一个字符串,问题就很好解决了,if语句和switch语句的灵活运用也非常重要。总之,我觉的遇到不懂的不会的,首先不要放弃,要懂得寻找问题所在,找到解决方法,这个是最重要的,这次试验完成也让我有了自信。
转载于:https://www.cnblogs.com/a305810827/p/5961354.html
实验一、词法分析实验相关推荐
- 语法分析器c语言实验报告,词法分析实验报告(C++)..doc
词法分析实验报告(C). 词法分析实验报告 一.实验目的 1. 掌握词法分析的原理. 2. 熟悉保留字表等相关的数据结构与单词的分类方法. 3. 掌握词法分析器的设计与调试. 二.实验内容 根据编译中 ...
- 词法分析实验报告(一)
实验一 词法分析实验 专业:商业软件三班 姓名:曾铭杰 学号:201506110197 一. 实验目的 用C语言设计一个词法分析程序,将字符流的源程序进行分析,从左到右逐个字符地 ...
- c语言词法分析程序实验报告,实验一词法分析程序设计与实现
实验一 词法分析程序设计与实现 一.实验目的: 加深对词法分析器的工作过程的理解:加强对词法分析方法的掌握:能够采用一种编程语言实现简单的词法分析程序:能够使用自己编写的分析程序对简单的程序段进行词法 ...
- 编译实验(一)词法分析
编译原理课程即将结束,开始了在校中最麻烦的实验,编译实验......同在一个系,其他班的编译实验分成好几块,简短的文法, 完成一些小功能,就我们班的老师,撂下一句话:参考书本,把编译器实现了,可以一组 ...
- 201506110135陈若倩词法分析实验报告
实验一.词法分析实验 商业软件工程专业 陈若倩 201506110135 一. 实验目的 通过设计一个词法分析程序,对词法进行分析,加强对词法的理解,掌握对程序设计语言的分解和理解. 二. 实验 ...
- 编译原理:词法分析实验报告
词法分析实验报告 文章目录 词法分析实验报告 一.实验目的 二.实验原理 三.实验要求 四.实验步骤(利用Java语言来进行词法分析) ① 待分析的语言词法 ② 单词符号对应的种别码 ③ 词法分析程序 ...
- c++实现编译原理词法分析实验(含代码)
c++实现编译原理词法分析实验(含代码) 一.实验目的: 通过设计编制调试一个具体的词法分析程序,加深对词法分析原理的理解.并掌握在对程序设计语言源程序进行扫描过程中将其分解为各类单词的词法分析方法. ...
- 编译原理实验:词法分析
编译原理实验:词法分析 1. 实验题目:词法分析 实验目的 实验内容 实验要求 输入输出 2. 设计思想 3.算法流程 4. 源程序 5. 调试数据 1. 实验题目:词法分析 实验目的 根据PL/0语 ...
- 基于LEX的词法分析实验
基于 LEX 的词法分析实验 实验目的 熟悉 Lex 基本语法,掌握 ParserGenerator 软件的使用 通过设计 开发通用高级语言一个单词种类的词法分析程序,加深对课堂教学内容(包括正规文法 ...
最新文章
- Navicat连接Oracle的几个问题及解决方案
- jekins构建触发器详解
- Codeforces Round #148 (Div. 2)
- 华为p9 android版本,华为P9的手机系统是什么
- SharePoint中文WiKi
- Java 核心 API 必须掌握的程度
- 18秋学期计算机基础在线作业2,东北大学(本部)18秋学期《计算机应用基础》在线作业2答案解析.doc...
- MTK 三星处理器一览表
- Mujoco-小球建模与控制
- mysql localhost可以连接,输入ip地址连接访问被拒绝
- Ubuntu 20.04安装velodyne_simulator
- php 法定节假日接口,通过百度接口获取每一个月的工作和法定假日
- 服务器主机进不去系统,服务器主机进不了系统
- G711音频编码格式
- facebook分享 whatsapp分享 点击按钮复制链接 常用js分享内容
- 外贸人必备的实用工具
- Python中的break语句
- Python核心编程读书笔记
- CSS灯光效果,背景黑金效果
- STM32串口通信代码正确串口却没反应