博文
词法分析程序的设计与实现(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、注意不同类型的单词的截止标记。
一个关键字往往以空格和界限符等结束;
一个标识符往往以运算符......
简单词法分析程序(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......
迷宫(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......
魔方阵(2007-07-06 21:24:00)
摘要:#include<iostream>#include<iomanip>using namespace std;#define N 50void mofang(int [][N],int );void printf(const int [][N],int );void main(){ int a[N][N]={0}; int m; cout<<"请输入行列数(要为奇数):"<<endl; cin>>m; mofang(a,m); printf(a,m); return ;}void mofang( int b[][N],int n){ int i,j=n/2;int k=2; b[0][j]=1;i=n-1;j++; while(k<=n*n) { if(b[i][j]==0) { b[i][j]=k;k++;i--;j++;} else {i+=2;j--;} if(i==-1&&j!=n) i=n-1; if(j==n&&i!=-1) j=0; if(i==-1&&j==n) {i+=2;j--;} }}void printf(const int b[][N],int n){ for(int i=0;i<n;i++) { for(int j=0;j<n;j++) cout<<setw(3)<<b[i][j]; cout<<endl; }}......
抽签(2007-07-06 21:23:00)
摘要:#include<iostream>using namespace std;void chouqian(int [],int [][4],int ,int);void main(){ int ren[5]={1,2,3,4,5},haoma[5]={1,2,3,4,5}; int M[8][4]={1,0,1,0,0,1,0,0, 1,0,0,1,1,0,0,0, 0,0,1,0,0,1,0,0, 1,0,1,0,0,0,0,1}; chouqian(ren,M,8,4); for(int i=0;i<5;i++) cout<<"第 "<<haoma[i]<<" 名"<<"被 "<<ren[i]<<" 号人抽到。"<<endl; return ;}void chouqian(int a[],int b[][4],int m,int n){ for(int i=0;i<m;i++) for(int j=0;j<n;j++) if(b[i][j]==1) {int t=a[j];a[j]=a[j+1];a[j+1]=t;}}......
约瑟夫(2007-07-06 21:13:00)
摘要:*********.CPP文件*******
#include<iostream>#include"h.h"using namespace std;template<class T>linklist<T>::linklist(T a[],int n){ first=new Node<T> ; first->data=a[n-1]; first->next=first; int i; for( i=0;i<n-1;i++) { Node<T> *s; s=new Node<T>;s->data=a[i]; s->next=first->next; first->next=s; }}template<class T>void linklist<T>::delate(){ Node<T> *p,*pre; pre=first,p=first->next; int count,m; count=2; cin>>m; while(p!=pre) { if (count==m) { cout<<p->data<<' '; pre->next=p->next;delete p;p=pre->next; count=1; } else p=p->next,pre=pre->next,++count; } cout<<p->data; firs......
心灵火花--------确定正确的模型(2007-07-06 21:03:00)
摘要:
在一个房间外有三个开关来控制房间里的三盏灯
,开关与灯之间是一对一的连接,每个开关恰好控制一
盏灯,现在开关处于关的位置,在房间外看不见房间内
的任何东西。问题是需要判断出那个开关控制那盏灯,
条件是: 你可以任意设置这些开关,然后进入房间,但
是在你进入房间后,不允许再出来控制这些开关......
心灵火花--------确定正确的模型(2007-07-06 21:03:00)
摘要:
在一个房间外有三个开关来控制房间里的三盏灯
,开关与灯之间是一对一的连接,每个开关恰好控制一
盏灯,现在开关处于关的位置,在房间外看不见房间内
的任何东西。问题是需要判断出那个开关控制那盏灯,
条件是: 你可以任意设置这些开关,然后进入房间,但
是在你进入房间后,不允许再出来控制这些开关......
