博文

词法分析程序的设计与实现(2007-11-16 16:06:00)

摘要:   实验一  词法分析程序的设计与实现 一、实验目的:词法分析程序是编译程序的一个构成成分,它的主要任务是扫描源程序,按构词规则识别单词,并报告发现的词法错误。其中涉及到的主要理论和技术是正则表达式(也叫正规式:regular expression)和有穷自动机(finite automata)。本实验是让学生根据所给的某一较为简单的语言的单词,完成该语言的词法分析程序的设计、编写和调试,并在此过程中掌握相关的理论和方法技术。 二、要求: (1)    按照下面给出的语言单词,编制一个词法分析程序,该程序应该具有以下功能: (a)输入字符串(待进行词法分析的源程序),输出为单词串,即由(单词、类别)所组成的二元组序列。 (b)有一定的检查错误的能力。      (2) 提交实验报告。报告内容如下:实验目的、算法描述、程序结构、程序清单、主要变量名说明、调试情况、设计技巧、心得体会。      (3) 上机时间:4~6小时 三、实验环境:PC机,Windows系列版本,任何版本的C语言。 四、词法分析实验题目:设某一语言有如下单词: 关键字:BEGIN , END , IF , THEN ,ELSE 标识符 无符号整常数 运算符: < ,<= , = ,<> ,> , >=     请编写出识别该语言的词法分析程序。 提示:      1、实验步骤: 正规文法→NFA → DFA →程序流程图→编写代码      2、要建立数组,存放输入字符串 3、搜索注意①超前搜索和回退字符②检查错误; 4、注意不同类型的单词的截止标记。            一个关键字往往以空格和界限符等结束;            一个标识符往往以运算符......

阅读全文(13726) | 评论:0

简单词法分析程序(2007-11-16 15:58:00)

摘要:#include <iostream>#include <list>#include <iterator> using namespace std; int static biaozi=1;class str{public: str(int t,char a[],int len) {  for(int i=0;i<len;i++)   name[i]=a[i];  type=t;  leng=len; } void show() {  cout<<'('<<type<<',';  for(int i=0;i<leng;i++)   cout<<name[i];  cout<<')'; }private:   int type; char name[10]; int leng;}; void change_input(char a[],int &len)   //获取IO_BUFFER中的字符串到a数组{ char c; c=getchar(); while(c!='#') {  a[len++]=c;  c=getchar(); } a[len++]='#'; }void insert(list<str > &l,int t,char a[],int indexon,int leng)//把每个词法成分放入表中{ char temp[20]; for(int i=0;i<leng;i++)  temp[i]=a[indexon+i]; l.push_back(str(t,temp,leng));}void check(list<str> &l,ch......

阅读全文(2975) | 评论:0

迷宫(2007-07-06 21:27:00)

摘要:头文件 #define D 10struct node1{ int x; int y;};struct node2{ int x; int y; int d;};#ifndef migongtou_H#define migongtou_Hclass M{public:  M( int [][10] ); void zoulu(); void printf(); void chenggong();private: node1 fangxiang[8]; node2 first[30]; int a[D][D]; int top; int InX,InY,OutX,OutY,d;};#endifCPP文件 #include<iostream>#include"migongtou.h"using namespace std;M::M( int b[][10] ){ for(int i=0;i<D;i++)  for(int j=0;j<D;j++)   a[i][j]=b[i][j]; InX=1;InY=1;OutX=6;OutY=8; top=0; fangxiang[7].x=-1;fangxiang[7].y= 1; fangxiang[0].x= 0;fangxiang[0].y= 1; fangxiang[1].x= 1;fangxiang[1].y= 1; fangxiang[2].x= 1;fangxiang[2].y= 0; fangxiang[3].x= 1;fangxiang[3].y=-1; fangxiang[4].x= 0;fangxiang[4].y=-1; fangxiang[5].x=-1;fangxiang[5].y=-1; fangxiang[6].x=-1;fangxiang[6].y= 0;   first[top].x=1;first[top].y=1;first[top].d=-1; top++; fir......

阅读全文(2496) | 评论:0

心灵火花--------确定正确的模型(2007-07-06 21:03:00)

摘要:  在一个房间外有三个开关来控制房间里的三盏灯 ,开关与灯之间是一对一的连接,每个开关恰好控制一 盏灯,现在开关处于关的位置,在房间外看不见房间内 的任何东西。问题是需要判断出那个开关控制那盏灯, 条件是: 你可以任意设置这些开关,然后进入房间,但 是在你进入房间后,不允许再出来控制这些开关......

阅读全文(1811) | 评论:0

心灵火花--------确定正确的模型(2007-07-06 21:03:00)

摘要:  在一个房间外有三个开关来控制房间里的三盏灯 ,开关与灯之间是一对一的连接,每个开关恰好控制一 盏灯,现在开关处于关的位置,在房间外看不见房间内 的任何东西。问题是需要判断出那个开关控制那盏灯, 条件是: 你可以任意设置这些开关,然后进入房间,但 是在你进入房间后,不允许再出来控制这些开关......

阅读全文(1982) | 评论:0

汉诺塔(2007-05-31 18:37:00)

摘要:#include<iostream.h>void hanno(int,char,char,char);int main(){ int n; cout<<"请输入你要有多少个盘子:"; cin>>n;  hanno(n,'A','B','C'); return 0; }void hanno(int n,char A,char B,char C){ if(n==1)cout<<A<<"->"<<C<<endl; else {  hanno(n-1,A,C,B);  cout<<A<<"->"<<C<<endl;  hanno(n-1,B,A,C); }}......

阅读全文(2183) | 评论:1

helpsvc.exe处理(2007-05-28 22:53:00)

摘要:进程文件: helpsvc 或者 helpsvc.exe 进程名称: Microsoft Helpsvc 描述: helpsvc.exe是Windows 2000以及更高版本Windows的帮助服务。 出品者: Microsoft 属于: Microsoft Help Center Service 系统进程: 否 后台程序: 是 使用网络: 否 硬件相关: 否 常见错误: 未知N/A 内存使用: 未知N/A 安全等级 (0-5): 0 间谍软件: 否 广告软件: 否 病毒: 否 木马: 否    开始->运行->gpedit.msc->用户配置->管理模板->系统-> 不要运行指定的Windows应用程序 双击它,选启用,再选显示,再选添加,输入helpsvc.exe确定,应用,再确定......

阅读全文(3341) | 评论:0

将一个非负的十进制的整数转换成另一个基为B的B进制的数(2007-05-18 18:35:00)

摘要:编写一个完整的程序, 将一个非负的十进制的整数转换成另一个基为B的B进制的数, 其转换的公式如下:  N=bjBJ+bj-1BJ-1+….b1B+b0 =( N/B)*B+N%B=( N/B)*B+ b0再令N=(N/B) 做除B求模运算可求出b1, 依次类推求出b2…..bj                                 提示: 在计算bj时是从低位到高位, 而输出时是从高位到低位, 这正好栈的处理方式, 所以用栈来实现数制间的转换 并假定基B=十六(0,1,2,3…9,A,B,C,D,E,F )......

阅读全文(1852) | 评论:0

将一个非负的十进制的整数转换成另一个基为B的B进制的数(2007-05-18 18:35:00)

摘要:一、 编写一个完整的程序, 将一个非负的十进制的整数转换成另一个基为B的B进制的数, 其转换的公式如下:  N=bjBJ+bj-1BJ-1+….b1B+b0 =( N/B)*B+N%B=( N/B)*B+ b0再令N=(N/B) 做除B求模运算可求出b1, 依次类推求出b2…..bj                                 提示: 在计算bj时是从低位到高位, 而输出时是从高位到低位, 这正好栈的处理方式, 所以用栈来实现数制间的转换 并假定基B=十六(0,1,2,3…9,A,B,C,D,E,F )......

阅读全文(2011) | 评论:0

将一个非负的十进制的整数转换成另一个基为B的B进制的数(2007-05-18 18:35:00)

摘要:一、 编写一个完整的程序, 将一个非负的十进制的整数转换成另一个基为B的B进制的数, 其转换的公式如下:  N=bjBJ+bj-1BJ-1+….b1B+b0 =( N/B)*B+N%B=( N/B)*B+ b0再令N=(N/B) 做除B求模运算可求出b1, 依次类推求出b2…..bj                                 提示: 在计算bj时是从低位到高位, 而输出时是从高位到低位, 这正好栈的处理方式, 所以用栈来实现数制间的转换 并假定基B=十六(0,1,2,3…9,A,B,C,D,E,F )......

阅读全文(2011) | 评论:0