编译技术课设 实验报告

编译技术课设 实验报告
编译技术课设 实验报告

课程设计报告

( 2010 -- 2011年度第 1 学期)

名称:编译技术课程设计B

题目:词法分析器设计

算符优先分析程序设计

基于算符优先分析方法的语法制导翻译程序设计院系:计算机系

班级:网络0802

学号:

学生姓名:

指导教师:黄志强阎蕾岳燕

设计周数:1周

成绩:

日期:2010年12月31

一、课程设计的目的与要求

1.词法分析器设计的目的与要求

1.1 词法分析器设计的实验目的

本实验是为计算机科学与技术专业的学生在学习《编译技术》课程后,为加深对课堂教学内容的理解,培养解决实际问题能力而设置的实践环节。通过这个实验,使学生应用编译程序设计的原理和技术设计出词法分析器,了解扫描器的组成结构,不同种类单词的识别方法。能使得学生在设计和调试编译程序的能力方面有所提高。为将来设计、分析编译程序打下良好的基础。

1.2 词法分析器设计的实验要求

设计一个扫描器,该扫描器是一个子程序,其输入是源程序字符串,每调用一次识别并输出一个单词符号。为了避免超前搜索,提高运行效率,简化扫描器的设计,假设该程序设计语言中,基本字(也称关键词)不能做一般标识符用,如果基本字、标识符和常数之间没有确定的运算符或界符作间隔,则用空白作间隔。

单词符号及其内部表示如表1-1所示,单词符号中标识符由一个字母后跟多个字母、数字组成,常数由多个十进制数字组成。单词符号的内部表示,即单词的输出形式为二元式:(种别编码,单词的属性值)。

表1-1 单词符号及其内部表示

2.算符优先分析程序设计的目的和要求

2.1 算符优先分析程序设计的实验目的

本实验是为计算机科学与技术专业的学生在学习《编译技术》课程后,为加深对课堂教学内容的理解,培养解决实际问题能力而设置的实践环节。通过这个实验,使学生应用编译程序设计的原理和技术, 设计、编写和调试算符优先分析程序,了解算符优先分析程序的组成结构,掌握实现通用算符优先分析算法的方法。能使得学生在设计和调试编译程序的能力方面有所提高。为将来设计、分析编译程序打下良好的基础。

2.2 算符优先分析程序设计的实验要求

算符优先分析属于自下而上的分析方法,该语法分析程序的输入是终结符号串(即单词符号串,以一个“#”结尾),如果输入串是句子则输出“YES”,否则输出“NO”和错误信息。

算符优先分析过程与非终结符号无关,当由文法产生了优先关系之后文法也就失去了作用,本题目给出文法的目的是为了便于对语法分析结果进行验证。

(1)文法设算符优先文法G为:

+

E|

E

T

T

*

T|

F

F

T

F|

P

P

F

(

i

P|)

E

说明:i为整型常数或者为标识符表示整型变量;使用中↑用**表示。

(2)优先关系表设优先关系表如表1-2所示。

表1-2 优先关系表

3.基于算符优先分析方法的语法制导翻译程序设计的目的和要求

3.1基于算符优先分析方法的语法制导翻译程序设计的实验目的

本实验是为计算机科学与技术专业的学生在学习《编译技术》课程后,为加深对课堂教学内容的理解,培养解决实际问题能力而设置的实践环节。通过这个实验,使学生应用编译程序设计的原理和技术, 通过设计、编写和调试语法制导翻译程序,掌握从一种语句的语法和语义出发,构造相应的语义子程序,实现基于算符优先分析方法的语法制导翻译的方法。能使得学生在设计和调试编译程序的能力方面有所提高。为将来设计、分析编译程序打下良好的基础。

3.2 基于算符优先分析方法的语法制导翻译程序设计的实验要求

算符优先分析方法是通过反复把输入符号移进分析栈,使用优先关系表在分析栈顶寻找最左素短语,将其归约为一个非终结符号而实现的。这个分析过程与非终结符号无关,当由文法产生了优先关系之后文法也就失去了作用(所以本题目无需给出文法)。

基于算符优先分析方法的语法制导翻译是在算符优先语法分析的基础上进行翻译工作(即语义分析),每当将一个最左素短语归约为一个非终结符号时,就调用对应产生式的语义子程序,去完成相应的语义翻译工作,这步归约使用的产生式对非终结符号不加区分(即将所有的非终结符号用一个通用的非终结符号表示)。

语法制导翻译程序的输入是终结符号串(即单词符号串,以一个“#”结尾),如果输入符号串是句子,则按照其语义进行翻译,输出等价的四元式序列(作为练习应显示输出)。

二、课程设计正文

1.词法分析器设计

1.1 以文件流的方式对词法进行输入句子。

1.2 标识符和常数的属性值

(1)标识符和常数的属性值为该单词在名次表或常数表中登机项的相对地址;

(2)当识别出一个标识符或常数时,要查名字表或常数表,若表中有其登记项,则把得到的登记项地址作为其属性值;

(3)若表中没有其登记项,则建立一个新登记项,该登记项地址作为其属性值,此处的地址为在表中的下标。

1.3 主要数据结构

(1)属性类Dog,内含某一单词的显示字符串和类别,类别包括关键字、标识符、常数;

(2)输入缓冲区Buffer[100],类型为字符型;

(3)关键字表Letter[],类型为Dog;

(4)标识符表Varible[],类型为Dog,存储在句子中出现过的标识符;

(5)常数表Constant[],类型为Dog,存储在句子中出现过的常数;

(6)设置全局变量b,v,c,l记录输入缓冲区、标识符表、常数表、关键字表的当前最后一个指针。

1.4 词法错误处理:出错则显示错误所在字符位置。

2.算符优先分析程序设计

2.1 以文件流的方式对词法进行输入句子。

2.2 主要数据结构

(1)优先关系表XX[],全局变量,事先设定;

(2)分析栈类Stack,内含数组array[]存储终结符号、“#”、非终结符N,和数组array[]的长度size;

(3)数组str[],用于存放输入字符串。

2.3 算法主要使用两个while嵌套循环,外层为当前字符a不为#则继续,内层循环当前

字符a与其后一个终结符的相对优先关系为大于时,则进行规约,否则执行移入操作;

2.4 当分析栈中进入‘#’,且分析栈中只剩三个字符时,表示分析成功,否则失败。

2.5 出错则显示错误所在字符位置。

3.基于算符优先分析方法的语法制导翻译程序的设计

3.1 该实验算法是在第二个实验的基础上,将规约后产生的N变为临时变量Ei或中间变量Ti,当产生中间变量的四元式时,则输出该四元式。

3.2 为实现算法,这里用到词法分析的思想,将输入字符串先通过词法分析,转化为各单词的属性值或地址值。此做法便于实现数组的输出和查看。

三、课程设计总结或结论

1.词法分析器设计

在做这个实验以前一直认为编译的词法分析器是计算机内部某个硬件部分。由于该门课程结课较早,有些内容需要重新翻书查找。

通过这次实验,我对之前学过的内容有了更深的理解,了解了扫描器的组成结构、不同种类单词的识别方法,掌握了由单词的语法规则触发、画出识别单词的状态转换图、然后再用程序实现的扫描器设计方法。

2.算符优先分析程序设计

该程序的主要难点在于何时规约和何地规约,以及规约前后对几个指针位置的处理。通过本次实验一定程度上提高了软件开发能力,对编译原理这一门课程也有了比较

深刻的了解,掌握了算符优先分析方法。最后,由于所学知识不够全面,实验在很多方面还有待完善,在以后的学习过程中,会掌握更多知识,力求做到更好。

3.基于算符优先分析方法的语法制导翻译程序的设计

关于语法制导的内容之前未在课堂上有学过,首先锻炼了我的自学能力,通过学习和实践掌握了从一种语句的语法和语义出发,构造相应的语义子程序,实现语法制导翻译的方法。

这个实验有着第二个实验的基础,保持算符优先分析的整体思想,在此基础上利用词法分析器的思想设计了一段模数转换程序,将字符串转换为数字形式。通过自己思考摸索,不断调试,最终使程序得以正常运行。

四、参考文献

[1] 陈火旺,刘春林. 程序设计语言编译原理. 北京:国防工业出版社,第三版. 2008,

9

[2] 宋雨,程晓荣,黄志强. 计算机综合实践指导. 北京:清华大学出版社,第一版.

2004,2

附录(设计流程图、程序、运行结果等)(一)流程图

1.词法分析器设计

2.算符优先分析程序设计

3.基于算符优先分析方法的语法制导翻译程序的设计

(二)程序代码

1.词法分析器设计

#include

#include

#include

#include

using namespace std;

char strToken[20];//存当前构成字符串

class Dog

{

char info[20];

int race;

public:

Dog(char cc[20],int rr)//构造函数

{

strcpy(info,cc);

race=rr;

}

int comp(char ss[20])//比较strToken是否为此类别,否返回0

{

if(strcmp(info,ss)==0)

return race;

return 0;

}

};

char Buffer[100];//输入缓冲区

int b;//Buffer指针

char ch;//当前读进字符

Dog* Varible[20];//符号表

Dog* Constant[20];//常数表

Dog* Letter[20];//已有单词表

int v,c,l;//对应尾指针的后一个

int a[2];

void init0()

{

b=0;

v=0;

c=0;

l=0;

Letter[l++]=new Dog("BEGIN",1);

Letter[l++]=new Dog("IF",2);

Letter[l++]=new Dog("THEN",3);

Letter[l++]=new Dog("ELSE",4);

Letter[l++]=new Dog("END",5);

}

void init()

{

ch=' ';

a[0]=-1;

a[1]=-1;

strcpy(strToken,"");

}

void GetChar()//取当前字符

{

ch=Buffer[b];

b++;

}

void GetBC()//取字符直到不为空格

{

while(ch==' ')

GetChar();

}

bool IsLetter()//判断是否为字母

{

if(ch>='A'&&ch<='Z')

return 1;

else if(ch>='a'&&ch<='z')

return 1;

return 0;

}

bool IsDigit()//判断是否为数字

{

if(ch>='0'&&ch<='9')

return 1;

return 0;

}

void Concat()//把字符连接到当前短语后边

{

strcat(strToken,&ch);

}

void Retract()//回退一个字符

{

ch=' ';

b--;

}

int Reserve()/*整型函数过程,对strToken则可回送0值中的字符串查找保留字表,若它是一个保留字则返回它的编码;否则返回非保留字信息,譬如若0不是保留字的编码*/

{

int i,x;

for(i=0;i

{

x=Letter[i]->comp(strToken);

if(x>0)

return x;

}

return 0;

}

int InsertId()//整型函数过程,将strToken中的标识符插入符号表,返回符号表指针{

Varible[v]=new Dog(strToken,v+1);

v++;

int i=v;

return i;

}

int InsertConst()//整型函数过程,将strToken中的常数插入常数表,返回常数表指针{

Constant[c]=new Dog(strToken,c+1);

c++;

return c;

}

void ProError()

{

cout<

}

void f()//词法分析器

{

int code, value;

init();

// int a[2];//作为return(种别,属性)

GetChar(); GetBC();

if(IsLetter())

{

while (IsLetter()||IsDigit())

{

Concat(); GetChar();

}

Retract();

code=Reserve();

if (code==0)

{

value=InsertId();

a[0]=6;//该单词为标识符

a[1]=value;

return;//return a;

}

else

{

a[0]=code;//该单词为保留字

a[1]=-1;

return;//return a;

}

}

else if (IsDigit())

{

while(IsDigit())

{

Concat();GetChar();

}

Retract();

value=InsertConst();

a[0]=7;//该单词为常数

a[1]=value;

return;//return a;

}

else if (ch=='=')

{

a[0]=8;

a[1]=-1;

return;//return a;

}

else if (ch=='+')

{

a[0]=9;

a[1]=-1;

return;//return a;

}

else if (ch=='*')

{

GetChar();

if (ch=='*')

{

a[0]=11;

a[1]=-1;

return;//return a;

}

Retract();

a[0]=10;

a[1]=-1;

return;//return a;

}

else if (ch==',')

{

a[0]=12;

a[1]=-1;

return;//return a;

}

else if (ch=='(')

{

a[0]=13;

a[1]=-1;

return;//return a;

}

else if (ch==')')

{

a[0]=14;

a[1]=-1;

return;//return a;

}

else ProError(); /*错误处理*/

a[0]=-1;

a[1]=-1;

return;//return a;

}

void disp()

{

char x;

// if(a[0]==-1)

// ProError();

if(a[1]==-1)

{

x='-';

cout<<"("<

}

else

cout<<"("<

void main()

{

init0();

// strcpy(Buffer,"BEGIN IF ELSE abcde 1234");

////////////////////////////////////////////////////////////////////

char in[100]; //用于接收输入文件名

// char str[100];//存句子

FILE *fin; //用于指向输入文件的指针

cout<<"请输入所需文件名(xxx.txt):";

cin>>in;

while((fin=fopen(in,"r"))==NULL) //判断输入文件名是否正确

{

cout<

cout<<"请重新输入:";

strcpy(in,"");

cin>>in;

}

int m=0;//记录str句子串的长度

char ch1='a';

while (ch1!='#')//从文件中读入一串字符

{

ch1=getc(fin);

Buffer[m++]=ch1;

}

// cin>>Buffer;

int lllong=m-1;

// cout<

while(b

{

init();

f();

disp();

}

cout<

// return;

}

2.算符优先分析程序设计

#include

#include

#include

#include

using namespace std;

const int maxsize=100; //为数组str[]、in[]分配的最大存储空间

const int length=100;//为数组array[]分配的最大存储空间

char XX[8][8]={' ','+','*','!','i','(',')','#',

'+','>','<','<','<','<','>','>',

'*','>','>','<','<','<','>','>',

'!','>','>','<','<','<','>','>',

'i','>','>','>',' ',' ','>','>',

'(','<','<','<','<','<','=',' ',

')','>','>','>',' ',' ','>','>',

'#','<','<','<','<','<',' ','='};

class Stack

{

private:

int size;//size为当前数组array[]的大小

char array[length];//用于存储读入的字符public:

Stack()

{

size=0;//数组array[]的初始长度为0 }

void push(char ch)

{

if(size

{

array[size]=ch;

size++;

}

else//若数组已满,则给出出错信息

cout<<"overflow!"<

}

int pop(char ch[],int len)//弹出字符准备规约{

if(size-len>=0)

{

for(int i=0;i

ch[i]=array[size-len+i];

size-=len;

return len;

}

else

{

cout<<"参数错误!"<

return 0;

}

}

char judge(int pos)//判断大小是否合法

{

if(pos>=0&&pos

return array[pos];

return '\0';

}

void disp_all()//输出当前数组中的字符

{

for(int i=0;i

{

if(judge(i)=='!')

cout<<"**";

else

cout<

}

if(size>7)

cout<<'\t'<<'\t';

else

cout<<'\t'<<'\t'<<'\t';

}

int getsize()//返回当前数组大小

{

return size;

}

};

char guiyue(char ch[])//规约为'N'

{

return 'N';

}

int isnumch(char ch)//判断ch是不是数字或小写字母

{

return (ch>='0'&&ch<='9'||ch>='a'&&ch<='z');

}

int getrank(char ch1,char ch2)//根据算符优先分析矩阵设置读入优先次序

{ //0表示等于,1表示大于,-1表示小于,2表示没有优先关系

int i,j;

if(isnumch(ch1))

ch1='i';

if(isnumch(ch2))

ch2='i';

switch(ch1)

{

case '+':i=1;break;

case '*':i=2;break;

case '!':i=3;break;

case 'i':i=4;break;

case '(':i=5;break;

case ')':i=6;break;

case '#':i=7;break;

}

switch(ch2)

{

case '+':j=1;break;

case '*':j=2;break;

case '!':j=3;break;

case 'i':j=4;break;

case '(':j=5;break;

case ')':j=6;break;

case '#':j=7;break;

}

if(XX[i][j]=='>')

return 1;

else if(XX[i][j]=='<')

return -1;

else if(XX[i][j]=='=')

return 0;

else

return 2;

}

int isvt(char ch)//区别参加规约的资格

{

if(ch>='a'&&ch<='z')

return 1;

if(ch>='0'&&ch<='9')

return 1;

for(int i=0;i<8;i++)

{

if(ch==XX[0][i])

return 1;

}

return 0;

}

/****************主函数**************/

void main()

{

cout<<"====================该文法的算符优先矩阵如下==================="<

int i;

for(i=0;i<8;i++) //输出算符优先矩阵

{

for(int j=0;j<8;j++)

{

if(XX[i][j]=='!')

cout<<"**"<<'\t';

else

cout<

}

cout<

}

char in[maxsize]; //用于接收输入文件名

char str[maxsize];//存句子

FILE *fin; //用于指向输入文件的指针

cout<<"请输入所需文件名(xxx.txt):";

cin>>in;

while((fin=fopen(in,"r"))==NULL) //判断输入文件名是否正确

{

cout<

cout<<"请重新输入:";

strcpy(in,"");

cin>>in;

}

int m=0;//记录str句子串的长度

char ch1='a';

while (ch1!='#')//从文件中读入一串字符

{

ch1=getc(fin);

str[m++]=ch1;

}

str[m]='#';//将'#'赋给字符串尾

Stack s;//定义Stack类的变量s

int len;

len=int(strlen(str));//取出输入字符串的长度

s.push('#');//先把'#'压入数组array[]

int k=s.getsize()-1;//k为当前数组array[]读入已读入字符的位置标识,

int t=0;//t为输入字符串数组str[]即将被读的字符位置标识,

int j;//j用于记录当前数组array[]中的最后一个非终结符的位置

char a=str[0];//a用于传递即将读入的字符

char ch[10];//存规约串

while(a!='#')//如果a不等于'#',则继续读入操作或规约操作

{

a=str[t];

if(a=='*')

{

if(str[t+1]=='*')

{

a='!';

t++;

}

}

if(isvt(s.judge(k)))

j=k;

else

j=k-1;

while(isvt(a)&&getrank(s.judge(j),a)==1)//判断是否满足规约的条件>

{

s.disp_all();//规约后输出当前数组array[]中的字符

int h=j,low=j-1;//h记录要规约的位置,low记录规约后数组array[]中的最qian一个非终结符的位置

if(!isvt(s.judge(low)))

low--;

while(getrank(s.judge(low),s.judge(h))!=-1)//寻找最前一个非终结符的位置用low记录

{

h=low;

low--;

if(!isvt(s.judge(low)))

low--;

}

h=s.getsize();//array的长度

low++;//规约的起始位置

int len=h-low; //len记录要规约的长度

for(int p=0;p<10;p++)

ch[p]='\0';

s.pop(ch,len);//弹出要规约的字符用字符串ch存储

char c=guiyue(ch);//将ch规约为N

s.push(c);//再将规约后的N压入数组中

cout<<" 规约: ";

for(i=0;i

{

if(ch[i]=='!')

cout<<"**";

else

cout<

}

cout<<" --> "<

j=s.getsize()-1;

if(!isvt(s.judge(j)))

j--;

}

// s.disp_all();

if(!(a>='A'&&a<='Z')&&getrank(s.judge(j),a)==2)//当待输入字符不是大写字母且与前一个

{ //非终结符无优先关系则提示出错并给出提示

cout<<"出错!"<

cout<<"错误为第"<

exit(0);

}

else

{

s.disp_all();

if(a=='!')

cout<<"移进: **"<

else

cout<<"移进: "<

s.push(a);//将a压入数组array[]//读入后输出当前数组array[]中的字符

t++;

k=s.getsize()-1;

}

}

s.disp_all();

char temp[10];

s.pop(temp,3);

if(s.getsize()==0)//如果最后数组array[]的长度size的值为0,则分析成功cout<<"成功!"<

else//否则,分析失败

cout<<"失败!"<

fclose(fin);//关闭输入文件

}

3.基于算符优先分析方法的语法制导翻译程序的设计

#include

#include

#include

#include

using namespace std;

typedef class Four *C;

char XX[8][8]={' ','+','*','!','i','(',')','#',

'+','>','<','<','<','<','>','>',

'*','>','>','<','<','<','>','>',

'!','>','>','<','<','<','>','>',

'i','>','>','>',' ',' ','>','>',

'(','<','<','<','<','<','=',' ',

')','>','>','>',' ',' ','>','>',

'#','<','<','<','<','<',' ','='};

const int maxsize=100; //为数组str[]、in[]分配的最大存储空间

const int length=100;//为数组array[]分配的最大存储空间

int digital[maxsize];

int d_len=0;

char B[21];//标识符,b[0]记录最后一个的下标

int E[21];//临时变量,e[0]记录最后一个的下标,1xx为标识符地址,2xx为临时变量地址

C Gama[21];//一个中间变量即一个四元式,gama[i]记录最后一个下标

int a=0,b=0,c=0;//B,E,Gama的最后一个下标

int ATD(char ch);//将单个字符转为为数字

int entry(char ch);//查找ch是否在名字表内,返回名字表内的下标+100,如没有则将其加入表中----------ok

int newtemp(int t[3]);//新建一个临时变量,返回其在临变表中的下标+200

void fuzhi(int m,int n);//m.place:=n.place

int guiyue(int ch[],int ll);//规约为'N'

int getrank(int i,int j);//根据算符优先分析矩阵设置读入优先次序

int isword(char ch);//判断是否为字母//////////////////////////gai!!

void disp_one(int i);//输出单个i代码的字符,标识符或符号

void disp_deep_one(int i);//输出单个i代码的字符,标识符或符号

typedef class Four//四元式

{

char fuhao;//

int s2,s3,s4;//(fuhao,s2,s3,s4)

public:

Four(int f,int a1,int a2)//双目运算符,本题只有双目运算符...a1,a2均为地址位移量

{

fuhao=XX[0][f];

s2=a1;

s3=a2;

s4=c+300;

}

void disp_four()

{

cout<<"产生"<

if(fuhao=='!')

cout<<"**,";

else

cout<

disp_deep_one(s2);

cout<<",";

disp_deep_one(s3);

cout<<",";

disp_deep_one(s4);

cout<<")";

}

void disp_simple()

{

cout<<"(";

if(fuhao=='!')

cout<<"**,";

else

cout<

disp_deep_one(s2);

数据库设计性实验报告

数据库系统概论实验报告 一、实验题目 小型CMS博客系统的设计与实现 二、实验要求 利用学习的数据库设计的方法和步骤,为选择的应用设计数据库、必要的索引、视图、编写应用程序。 三、总的设计思想,及环境语言、工具等 1、建立系统的目的,系统总体概况的介绍 进行博客系统开发的主要目的是为了提高自己的实践能力、学会自主开发独立程序,学会将所学知识应用于实践中,并在实践中不断学习。在大学里本人所学的知识大多数是从课本上得到的,而这次是要通过动手来实践,实习对本人来说是一次很好的锻炼。 本人所要实现的是一个小型CMS博客系统,用户在注册后可以实现在后台操作数据库更改网站标题、版本号、管理博客、管理日志分类等,在前台可以查看已公开的博客等。本次课程设计初步目标是实现博客的基本功能,在这个基础上对功能进行扩充。 2、选用的语言 利用WINDOWS XP结合DREAMWEAVER和access搭建ASP的环境平台,语言采用强大的vbscript。采用了IIS5.1。 3、需求分析的方法和结果 通过对现行博客系统的基本功能进行调查,明确了CMS博客系统由查看博客、发表博客、回复博客、管理员通过后台管理登录管理日志分类、修改删除博客、发表新文章、设置主页信息等等。用户对系统的描述如下。 a)用户基本功能 1)匿名用户可以查看用户公开的博客,并且可以通过注册申请成为正式用户。 b)管理员基本功能 1)发表新文章。 2)管理文章、如添加删除等。 3)管理分类,如添加、删除、重命名。 4)设置主页上显示的博客条数或者版本号。 数据流图

数据库逻辑模型 将图书馆管理系统的E-R图转换为关系数据库的数据模型,其关系模式为: 博客用户(用户,密码,邮箱),其中用户为主码; 版本信息(版本ID,URL,主页底部信息,副标题),其中版本ID为主码; 日志分类信息(编号,分类名称,基本表述(在鼠标放到分类上后显示的小标签)) 将CMS系统的数据库名定为“SimpleCMS” 数据库模式的规范化 各表的函数依赖集: F博客用户={用户→密码}; F类别={分类ID→名称,分类ID→基本描述}; F版本信息={编号→网站名,编号→网址,编号→底部信息,编号→副标题信息}; 上述关系模式中不存在对非码依赖的表达式,所有的非主属性对码完全并直接依赖,由此证明,博客数据库中各表均服从BCNF,其规范化程度较高,数据库设计合理。 4、E-R图

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

编译原理实验报告实验名称:实验一编写词法分析程序 实验类型:验证型实验 指导教师:何中胜 专业班级:13软件四 姓名:丁越 学号: 电子邮箱: 实验地点:秋白楼B720 实验成绩: 日期:2016年3 月18 日

一、实验目的 通过设计、调试词法分析程序,实现从源程序中分出各种单词的方法;熟悉词法分析 程序所用的工具自动机,进一步理解自动机理论。掌握文法转换成自动机的技术及有穷自动机实现的方法。确定词法分析器的输出形式及标识符与关键字的区分方法。加深对课堂教学的理解;提高词法分析方法的实践能力。通过本实验,应达到以下目标: 1、掌握从源程序文件中读取有效字符的方法和产生源程序的内部表示文件的方法。 2、掌握词法分析的实现方法。 3、上机调试编出的词法分析程序。 二、实验过程 以编写PASCAL子集的词法分析程序为例 1.理论部分 (1)主程序设计考虑 主程序的说明部分为各种表格和变量安排空间。 数组 k为关键字表,每个数组元素存放一个关键字。采用定长的方式,较短的关键字 后面补空格。 P数组存放分界符。为了简单起见,分界符、算术运算符和关系运算符都放在 p表中 (编程时,还应建立算术运算符表和关系运算符表,并且各有类号),合并成一类。 id和ci数组分别存放标识符和常数。 instring数组为输入源程序的单词缓存。 outtoken记录为输出内部表示缓存。 还有一些为造表填表设置的变量。 主程序开始后,先以人工方式输入关键字,造 k表;再输入分界符等造p表。 主程序的工作部分设计成便于调试的循环结构。每个循环处理一个单词;接收键盘上 送来的一个单词;调用词法分析过程;输出每个单词的内部码。 ⑵词法分析过程考虑 将词法分析程序设计成独立一遍扫描源程序的结构。其流程图见图1-1。 图1-1 该过程取名为 lexical,它根据输入单词的第一个字符(有时还需读第二个字符),判断单词类,产生类号:以字符 k表示关键字;i表示标识符;c表示常数;p表示分界符;s表示运算符(编程时类号分别为 1,2,3,4,5)。 对于标识符和常数,需分别与标识符表和常数表中已登记的元素相比较,如表中已有 该元素,则记录其在表中的位置,如未出现过,将标识符按顺序填入数组id中,将常数 变为二进制形式存入数组中 ci中,并记录其在表中的位置。 lexical过程中嵌有两个小过程:一个名为getchar,其功能为从instring中按顺序取出一个字符,并将其指针pint加1;另一个名为error,当出现错误时,调用这个过程, 输出错误编号。 2.实践部分

流体静力学实验报告终结版

中国石油大学(华东)流体静力学实验报告 实验日期:成绩: 班级:石工09-8 学号:09021374 姓名:李陆伟教师:王连英同组者:李凯蒋光磊 实验一、流体静力学实验 一、实验目的 1.掌握用液式测压及测量流体静压强的技能。 2.验证不可压缩流体静力学基本方程,加深对位置水头,压力水头和测压管水头的理解。 3.观察真空度(负压)的生产过程,进一步加深对真空度的理解。 4.测量油的相对密度。 5.通过对诸多流体静力学现象的实验分析,进一步提高解决静力学实际问题的能力。 二、实验装置 本实验的装置如图1-1所示。 1. 测压管; 2. 代表吃的测压管; 3. 连通管; 4. 通气阀; 5. 加压打气球; 6. 真空测压管; 7. 截止阀;8. U型测压管;9. 油柱; 10. 水柱;11. 减压放水阀 图1-1 流体静力学实验装置图

三、实验原理 1.在重力作用下不可压缩流体静力学基本方程。 形式一: z+p/r=const (1-1-1a) 形式二: P=po+rh (1-1-1b) 式中z-测点在基准面上的位置高度; P-测点的静水压强(用相对压强表示,以下同); Po-水箱中液面的表面压强; r-液体的重度; h-测点的液体深度; 2.有密度测量原理。 当U型管中水面与油水界面齐平(见图1-1-2),取油水界面为等压面时,有:Po1=rwh1=roH 另当U型管中水面与油面齐平(见图1-1-3),取油水界面为等压面时,有:Po2+rwH=roH (1-1-2) 即 Po2=-rwh2=roH-rwH (1-1-3) 由式(1-1-2),式(1-1-3)两式联立可解得: H=h1+h2 代入式(1-1-2)可得油的相对密度do为: do=ro/rw=h1/(h1+h2) (1-1-4) 根据式(1-1-4),可以用仪器直接测得do。 图1-2 图1-3

数据库课程设计实验报告

数据库课程设计报告 课程名称数据库课程设计__ __ _ ___ 题目______ 教务管理系统___ 指导教师卢益清 设计起止日期 2014-5-15至2014-6-2 学院信息管理学院 专业电子商务 组号 组长陈哲

北京信息科技大学 计算机信息系统系 (课程设计)实验报告 课程名称: 数据库课程设计专业: 电子商务班级: 商务1201学号: 姓名: 成绩: 2.课程设计内容: (1)数据库设计 教师讲解数据库的设计方法以及PowerDesigner的使用,布置题目(或学生自选题目),要求学生根据题目的需求描述,进行实际调研,提出完整的需求分析报告、用PowerDesigner 建立概念模型、物理模型。在物理模型中根据需要添加必要的约束、视图、触发器和存储过程等数据库对象,最后生成创建数据库的脚本,提出物理设计的文档。要求学生提交的报告包含: 需求说明书 概念数据模型(E-R数据模型) 物理数据模型(含约束、视图、触发器和存储过程等) 创建数据库的脚本(数据库对象的定义语言) 物理设计的文档(数据库的实施规划) (2)数据库开发 在数据库设计的基础上开发一个基本的数据库应用系统,要求有基本的数据查询功能和数据管理功能,并能将存储过程、触发器、事务控制等运用其中。 开发工具学生可以自己选择。

1.课程名称、课程设计目的、课程设计内容、课程设计要求由教师确定,实验前由教师事先填好,然后作为实验报告模版供 学生使用; 2.实验条件由学生在实验或上机之前填写,教师应该在实验前检查并指导; 3.实验过程由学生记录实验的过程,包括操作过程、遇到哪些问题以及如何解决等; 4.实验总结由学生在实验后填写,总结本次实验的收获、未解决的问题以及体会和建议等; 5.源程序、代码、具体语句等,若表格空间不足时可作为附录另外附页。

B2B实验报告终极版

B2B实验报告 【实验目的及要求】 按照实验指导书的流程和要求,完成B2B实验 实验目的: 1了解B2B 实验中各个角色的功能和任务。 2. 掌握电子商务B2B 系统的交易流程和电子商务B2B 实验中角色的配合。 3. 构建B2B 交易流程,分析B2B 交易中服务增值的环节。 4. 体会电子商务B2B 运用的原理及相互配合的团队精神。 实验要求: 1. 了解B2B 实验中三个角色:企业用户、货场、管理员的功能和实验任务。 2. 分角色完成B2B 交易实验流程,记录交易流程。 3. 小组通过流程的讨论全面认识B2B 电子商务交易流程,绘制完整的交易流程图。 4. 分析比较实验环境下的B2B 电子商务流程与真实的B2B 流程的差异,提出在各个环节中需要改善的流程和服务。 【实验原理】 通过网络平台来实验商务的电子化,在博星卓越电子商务教学试验系统模拟虚构的B2B 电子商务。 【实验环境】 博星卓越电子商务教学实验系统 实验内容: 【实验方案设计】 实验由小组共同来完成,每组角色主要包括企业用户(2个),商城管理者(1个),货场(2个)。大家齐心合力,分工合作,根据B2B 实验所要求的和课堂所学的电子商务知识,最终完成B2B 任务。 【实验过程】(实验步骤、记录、数据、分析) 实验步骤: 1.点击“日志查看” 2.查看小组成员,知道各自的角色及任务。 3. 管理员作为实验环节的组长,协调和管理组内的配合和活动 4. 回忆课堂学过的知识,联系实验一完成的网上订购实验,初步构建B2B 实验的流程 5. 点击“上课中,请点击进入”,完成第一轮B2B 实验。 5.我是货场的角色,主要完成以下几个任务:

最新数据库管理系统实验报告含答案

武汉纺织大学《最新数据 库管理系统》课程实验报告 班级: _______姓名:实验时间:年月日指导教师:_______ 一、实验目的 1、通过实验,使学生全面了解最新数据库管理系统的基本内容、基本原理。 2、牢固掌握SQL SERVER的功能操作和Transact-SQL语言。 3、紧密联系实际,学会分析,解决实际问题。学生通过小组项目设计,能够运用最新数据库管理系统于管理信息系统、企业资源计划、供应链管理系统、客户关系管理系统、电子商务系统、决策支持系统、智能信息系统中等。 二、实验内容 1.导入实验用示例数据库: f:\教学库.mdf f:\教学库_log.ldf f:\仓库库存.mdf f:\仓库库存_log.ldf 1.1 将数据库导入 在SqlServer 2005 导入已有的数据库(*.mdf)文件,在SQL Server Management Studio 里连接上数据库后,选择新建查询,然后执行语句 EXEC sp_attach_db @dbname = '教学库', @filename1 = 'f:\教学库.mdf', @filename2 = 'f:\教学库_log.ldf' go use [教学库] EXEC sp_changedbowner 'sa' go EXEC sp_attach_db @dbname = '仓库库存',

@filename1 = 'f:\仓库库存.mdf', @filename2 = 'f:\仓库库存_log.ldf' go use [仓库库存] EXEC sp_changedbowner 'sa' go 1.2 可能出现问题 附加数据库出现“无法打开物理文件"X.mdf"。操作系统错误5:"5(拒绝访问。)"。(Microsoft SQL Server,错误: 5120)”。 解决:找到要附加的.mdf文件-->右键-->属性-->安全-->选择当前用户-->编辑-->完全控制。对.log文件进行相同的处理。 2.删除创建的数据库,使用T-SQL语句再次创建该数据库,主文件和日志文件的文件名同上,要求:仓库库存_data最大尺寸为无限大,增长速度为20%,日志文件初始大小为2MB,最大尺寸为5MB,增长速度为1MB。 CREATE DATABASE仓库库存 (NAME = '仓库库存_data', FILENAME = 'F:\仓库库存_data.MDF' , SIZE = 10MB, FILEGROWTH = 20%) LOG ON (NAME ='仓库库存_log', FILENAME = 'F:\仓库库存_log. LDF', SIZE = 2MB, MAXSIZE = 5MB, FILEGROWTH = 1MB) 2.1 在数据库“仓库库存”中完成下列操作。 (1)创建“商品”表,表结构如表1:

编译原理实验报告

编译原理实验报告 班级 姓名: 学号: 自我评定:

实验一词法分析程序实现 一、实验目的与要求 通过编写和调试一个词法分析程序,掌握在对程序设计语言的源程序进行扫描的过程中,将字符形式的源程序流转化为一个由各类单词符号组成的流的词法分析方法。 二、实验内容 根据教学要求并结合学生自己的兴趣和具体情况,从具有代表性的高级程序设计语言的各类典型单词中,选取一个适当大小的子集。例如,可以完成无符号常数这一类典型单词的识别后,再完成一个尽可能兼顾到各种常数、关键字、标识符和各种运算符的扫描器的设计和实现。 输入:由符合或不符合所规定的单词类别结构的各类单词组成的源程序。 输出:把单词的字符形式的表示翻译成编译器的内部表示,即确定单词串的输出形式。例如,所输出的每一单词均按形如(CLASS,VALUE)的二元式编码。对于变量和常数,CLASS字段为相应的类别码;VALUE字段则是该标识符、常数的具体值或在其符号表中登记项的序号(要求在变量名表登记项中存放该标识符的字符串;常数表登记项中则存放该常数的二进制形式)。对于关键字和运算符,采用一词一类的编码形式;由于采用一词一类的编码方式,所以仅需在二元式的CLASS字段上放置相应的单词的类别码,VALUE字段则为“空”。另外,为便于查看由词法分析程序所输出的单词串,要求在CLASS字段上放置单词类别的助记符。 三、实现方法与环境 词法分析是编译程序的第一个处理阶段,可以通过两种途径来构造词法分析程序。其一是根据对语言中各类单词的某种描述或定义(如BNF),用手工的方式(例如可用C语言)构造词法分析程序。一般地,可以根据文法或状态转换图构造相应的状态矩阵,该状态矩阵同控制程序便组成了编译器的词法分析程序;也可以根据文法或状态转换图直接编写词法分析程序。构造词法分析程序的另外一种途径是所谓的词法分析程序的自动生成,即首先用正规式对语言中的各类单词符号进行词型描述,并分别指出在识别单词时,词法分析程序所应进行的语义处理工作,然后由一个所谓词法分析程序的构造程序对上述信息进行加工。如美国BELL实验室研制的LEX就是一个被广泛使用的词法分析程序的自动生成工具。 总的来说,开发一种新语言时,由于它的单词符号在不停地修改,采用LEX等工具生成的词法分析程序比较易于修改和维护。一旦一种语言确定了,则采用手工编写词法分析程序效率更高。 四、实验设计 1)题目1:试用手工编码方式构造识别以下给定单词的某一语言的词法分析程序。 语言中具有的单词包括五个有代表性的关键字begin、end、if、then、else;标识符;整型常数;六种关系运算符;一个赋值符和四个算术运算符。参考实现方法简述如下。 单词的分类:构造上述语言中的各类单词符号及其分类码表。 表I 语言中的各类单词符号及其分类码表 单词符号类别编码类别码的助记符单词值

数据库课程设计实验报告

《数据库原理及应用》课程设计报告题目:计算机学院选课管理系统 学号:10903060137 姓名朱子奇 2011年6月

数据库课程设计实验报告系统名称:计算机学院选课管理系统 课程名称:数据库课程设计 课程设计时间:为期五天(2011.6.20-2011.6.24)课程设计内容: 一开发背景 1.1 背景 1.2 目的 二功能描述 2.1 系统目的与要求 2.2 系统可行性分析 三业务流程分析 四数据流程分析 4.1 数据流程图 4.2 数据字典 4.3 E-R图 五概念模型设计 六物理模型设计与优化 七课程设计心得体会 八参考文献

一开发背景 1.1 背景: 大学的课程按大类来说一般分为必修课和选修课。必修一般指学校或院系规定学生必须修习某课程,学校对必修课程一般有统一的要求和安排。选修是指根据学生个人兴趣或专业需要自由选择修习某课程。简言之,必修就是必须修读,选修就是选择性修读。一般来说,基础性的知识都作为必修课程。有些知识不是基础性的,与兴趣和研究方向有关,这部分知识可以选择。这是大学与中学最大的不同之处。90年代中期,由于Internet 的迅速普及,使Intranet成为Internet技术在企业管理信息系统中的应用和延伸,形成了集计算机,计算机网络、数据库、分布式计算等于一体的信息技术综合体,它打破了时间和地域的界限,使信息交流变得快捷、准确,为建立现代高校管理信息系统提供了充足的条件,用计算机数据库系统的形式来管理选课成为了既方便又快捷的一种方式。因此开发选课管理系统是十分有前景的工作。 1.2 目的: 利用计算机支持学校高效率完成选课操作,是适应现代管理要求、推动企业劳动型治理走向科学化、规范化的必要条件;而选课管理是一项琐碎、复杂而又十分细致的工作,学生的基本资料,所开设的课程条目,选课资料的保存,选课条件的约束,一般不允许出错,假如实行手工操作,须手工填制大量的表格,这就会耗费工作人员大量的时间和精力,而计算机选课操作,不仅能够保证各项信息准确无误、快速输出,同时计算机具有手工治理所无法比拟的优点.例如:检索迅速、查找方便、可靠性高、存储量大、保密性好、寿命长、成本低等。这些

《编译原理》课程实验报告(词法分析)完整版

《编译原理》课程实验报告 题目词法分析 专业计算机 指导教师签名 华东理工大学信息学院计算机系 2013年4月10日

一.实验序号:《编译原理》第一次实验 二.实验题目:词法分析 三.实验日期:2013.3.27-2013.4.10 四.实验环境(操作系统,开发语言) 操作系统:Windows 开发语言:C 五.实验要求 ●修改词法: 1)将标识符的词法改为“以大写字母或小写字母开头,后面可以跟大写字母 或小写字母或数字或下划线”。 把while ((isalpha(buffer))||(isdigit(buffer)))改成while ((isalpha(buffer))||(isdigit(buffer))||buffer==’_’) 2)将<条件>中的表示相等关系的单词“=”改为“= =” char *relation[6]={"<","<=","=",">",">=","<>"}; 把其中的=改成==即可 3)将原来无小数的数改为可以有小数的数 把while (isdigit(buffer))改成while (isdigit(buffer)||buffer==’.’) ●用C语言开发词法分析程序。读入用PL/0语言编写的测试用例源程序, 将识别出的一个个单词组成单词流依序同时输出到屏幕和文件中。 六.实验步骤 1)根据修改词法后的PL/0语言编写测试用例源程序。 2)用C语言编写词法分析程序。读入PL/0语言的测试用例源程序,进行 词法分析,将识别出的一个个单词组成单词流依序同时输出到屏幕和文 件中。 3)设立断点,单步运行词法分析程序,依次单个输出单词。分析和理解词 法分析程序,解释词法分析程序中的数据和变量变化的原因和输出结果。 七.实验结果(测试用例源程序,运行结果部分截图,词法分析函数主要部分源程序 PL0程序: const a=6,b=81; var x,y; procEdure p; procedure q; x:=2; begin

BB实验报告终极版

B B实验报告终极版 集团文件版本号:(M928-T898-M248-WU2669-I2896-DQ586-M1988)

B2B实验报告 【实验目的及要求】 按照实验指导书的流程和要求,完成B2B实验 实验目的: 1了解 B2B 实验中各个角色的功能和任务。 2. 掌握电子商务 B2B 系统的交易流程和电子商务 B2B 实验中角色的配合。 3. 构建 B2B 交易流程,分析 B2B 交易中服务增值的环节。 4. 体会电子商务 B2B 运用的原理及相互配合的团队精神。 实验要求: 1. 了解 B2B 实验中三个角色:企业用户、货场、管理员的功能和实验任务。 2. 分角色完成 B2B 交易实验流程,记录交易流程。 3. 小组通过流程的讨论全面认识 B2B 电子商务交易流程,绘制完整的交易流程图。 4. 分析比较实验环境下的 B2B 电子商务流程与真实的 B2B 流程的差异,提出在各个环节中需要改善的流程和服务。 【实验原理】 通过网络平台来实验商务的电子化,在博星卓越电子商务教学试验系统模拟虚构的 B2B 电子商务。 【实验环境】 博星卓越电子商务教学实验系统

实验内容: 【实验方案设计】 实验由小组共同来完成,每组角色主要包括企业用户(2个),商城管理者(1个),货场(2个)。大家齐心合力,分工合作,根据 B2B 实验所要求的和课堂所学的电子商务知识,最终完成 B2B 任务。 【实验过程】(实验步骤、记录、数据、分析) 实验步骤: 1.点击“日志查看” 2.查看小组成员,知道各自的角色及任务。 3. 管理员作为实验环节的组长,协调和管理组内的配合和活动 4. 回忆课堂学过的知识,联系实验一完成的网上订购实验,初步构建 B2B 实验的流程 5. 点击“上课中,请点击进入”,完成第一轮 B2B 实验。 5.我是货场的角色,主要完成以下几个任务: 记录: 我的完成记录如下: 数据 我的角色有关数据的过程包括订单处理(例如新订单、正常订单、缺货订单等等)和财务收支查看。 分析: 在这个过程中我觉得要注意一下几点: 1)企业用户尽可能制造非常规订单(如:大批量订购,退货申请)。

实验一 数据库模式设计及建立实验报告

长春大学计算机学院科学与技术专业 数据库原理实验报告 实验名称:实验一数据库模式设计及建立 班级:姓名:学号: 实验地点:日期: 一、实验目的: 1.了解SQL SERVER 2005/2008系统或KingBase ES V7.0的使用; 2.基本掌握SQL的数据定义。 二、实验内容、要求和环境: 【实验要求】 注:将完成的实验报告重命名为:班级+学号+姓名+(实验一),(如:041540538张三(实验一)),提交到SPOC学堂。 1.实验课要携带教材、学习辅导、老师下发的实验报告文档等。 2.课前要对实验内容和步骤部分进行预习。 3.将本次实验所建的数据库做好备份,以备以后实验使用。 【实验环境】 1.SQL SERVER 2005/20085; 1.KingBase ES V7.0 ,人大金仓。 【实验内容和步骤】 1.熟悉SQL SERVER 2005/2008系统。 (1)启动“SQL Server Managemet Studio”,新建数据库和关系(表) ①鼠标单击“开始/所有程序/Microsoft SQL server 2008/SQL Server Managemet Studio”启动“SQL Server Managemet Studio”,SQL Server Managemet Studio(SSMS)是一个集成环境,用于访问、配置、控制、管理和开发SQL Server 的所有组件,SSMS将大量图形工具与丰富的脚本编辑器相结合,使各种技术水平的开发人员和管理员都可以访问SQL Server; ②在“SQL Server Managemet Studio”中左窗口“对象资源管理器”中,单击“SQLEXPRESS”的左侧“+”,弹出下拉菜单; ③在上一步的下拉菜单中,鼠标右键单击“数据库”,在弹出的菜单中选择“新建数据库”,在弹出的对话框中,输入数据库名,同时可以进行存储位置的设置; ④在数据库文件夹下,出现新建的数据库文件夹; ⑤点击所建数据库文件名左侧的“+”,弹出下拉菜单; ⑥在上一步弹出的下拉菜单中,鼠标右键单击“表”,弹出下拉菜单,单击“新建表”即可在此数据库文件夹中建立关系(表)了。 (2)在“对象资源管理器”的上方有一个“新建查询”图标,单击“新建查询”,可使用SQL 语言进行对关系的操作 ①单击“新建查询”后,在“对象资源管理器”窗口上部出现一个工具栏,右侧弹出一个窗

编译原理课程设计词法分析(有代码)

《编译原理》课程 实验报告 题目词法分析 专业计算机科学与技术 班级2013级计双班 学号2013708033 姓名刘畅 指导老师郑瑶 石河子大学信息学院计算机系 2014 年11 月20 日

一. 实验序号:《编译原理》词法分析实验 二. 实验题目:词法分析 三. 实验日期: 2014年11月20日 四. 实验环境(操作系统,开发语言) 操作系统:Windows 开发语言:C 五. 实验要求 1)将标识符的词法改为“以大写字母或小写字母开头或下划线开头,后面 可以跟大写字母或小写字母或数字或下划线”。 2)将<条件>中的表示相等关系的单词“=”改为“= =”;增加用于识别自增、 自减、关系运算符、逻辑运算符及逗号运算符的相关语句。 3)将原来无小数的数改为可以识别整数和小数的数。 4)增加识别字符常量和字符串常量的识别。 5)或按C语言要求编写一个完整的用于识别C语言中各类单词的词法分析 程序。 六. 实验步骤 1)用PL/0语言编写测试用例源程序。用C语言编写词法分析程序。 2)运行词法分析程序,读入PL/0语言的测试用例源程序,进行词法分析。 3)设立断点,单步运行词法分析程序,依次单个输出单词。分析和理解词 法分析程序,解释词法分析程序中的数据和变量变化的原因和输出结果。 4)根据上述“实验要求”修改词法分析程序,同时也应修改PL/0语言测试 用例源程序中的相应的单词。 5)运行修改后的词法分析程序,读入修改后的PL/0语言测试用例源程序, 进行词法分析。 七. 实验结果(测试用例源程序,运行结果截图) 测试用例源程序: const c1=5.61,c2=20,c3='S',c4="abc"; var num1,num2,count,sum1,sum2; procedure func1; var y1,y2; begin y1:=1; y2:=x2 end;

软件工程实验报告最终版

合肥师范学院实验报告册 2012 / 2013 学年第一学期 系别计算机科学与技术系 实验课程软件工程 专业计算机科学与技术 班级2010级计算机应用 姓名马军福董国运李思贤 学号1010411024 1010411008 1010411076 指导教师范庆春

实验一:结构化方法建模的基本应用 1.实验目的 (1)了解Visio工具软件的功能特色、安装、工作环境和基本操作等基本知识; (2)掌握应用Visio工具的基本使用方法和基本绘图操作; (3)熟悉结构化分析建模的基本应用。 2.实验内容 (1)使用Visio 建立期刊管理系统的实体-关系图; (2)使用Visio 建立期刊管理系统的数据流图。 3. 实验要求 使用Visio 建立期刊管理系统的实体-关系图、数据流图。数据流图要绘 制三层。 4.实验结果和体会 (1)需求陈述 在图书管理系统中,管理员要为每个读者建立借阅账户,,账户内存储读者的个人信息和借阅记录信息。持有借阅卡的读者可以通过管理员借阅、归还期刊,读者可通过互联网或图书馆内查询终端查询期刊信息和个人借阅情况,以及续借期刊。 借阅期刊时,先输入读者的借阅卡号,系统验证借阅卡的有效性和读者是否可继续借阅图书,无效则提示其原因,有效则显示读者的基本信息。然后输入要借阅的书号,系统查阅图书信息数据库,显示图书的基本信息。最后提交借阅请求,若被系统接受则存储借阅纪录,并修改可借阅图书的数量。归还期刊时,输入读者借阅卡号和期刊号,系统显示读者和期刊的基本信息供管理员人工审核。如果有超期借阅或丢失情况,先转入过期罚款或期刊淘汰处理。然后提交还书请求,系统接受后删除借阅纪录,并登记修改可借阅期刊的数量。 期刊管理系统包括:1.读者信息管理a:借阅请求b归还请求c:查询请求d:修改自身信息2.期刊管理a:修改书目、出版日期、编辑b:增加书目数据、删除书目数据。3.期刊借阅a:增加所借读者信息b:删除所借读者信息4.期刊查询a:已借出图书列表b:未借出图书列表5.期刊的征订6.期刊内容登记题目、作者姓名、作者单位7.期刊内容查询

编译原理实验报告总结

学年第学期《编译原理》实验报告 学院(系):计算机科学与工程学院 班级:11303070A 学号:11303070*** 姓名:无名氏 指导教师:保密式 时间:2016 年7 月

目录 1.实验目的 (1) 2.实验内容及要求 (1) 3.实验方案设计 (1) 3.1 编译系统原理介绍 (1) 3.1.1 编译程序介绍 (2) 3.1.2 对所写编译程序的源语言的描述 (2) 3.2 词法分析程序的设计 (3) 3.3 语法分析程序设计 (4) 3.4 语义分析和中间代码生成程序的设计 (4) 4. 结果及测试分析 (4) 4.1软件运行环境及限制 (4) 4.2测试数据说明 (5) 4.3运行结果及功能说明 (5) 5.总结及心得体会 (7)

1.实验目的 根据Sample语言或者自定义的某种语言,设计该语言的编译前端。包括词法分析,语法分析、语义分析及中间代码生成部分。 2.实验内容及要求 (1)词法分析器 输入源程序,输出对应的token表,符号表和词法错误信息。按规则拼单词,并转换成二元形式;滤掉空白符,跳过注释、换行符及一些无用的符号;进行行列计数,用于指出出错的行列号,并复制出错部分;列表打印源程序;发现并定位词法错误; (2)语法分析器 输入token串,通过语法分析,寻找其中的语法错误。要求能实现Sample 语言或自定义语言中几种最常见的、基本的语法单位的分析:算术表达式、布尔表达式、赋值语句、if语句、for语句、while语句、do while语句等。 (3)语义分析和中间代码生成 输入token串,进行语义分析,修改符号表,寻找其中的语义错误,并生 成中间代码。要求能实现Sample语言或自定义语言中几种最常见的、基本的语法单位的分析:算术表达式、布尔表达式、赋值语句、if语句、for语句、while 语句、do while语句等。 实验要求:功能相对完善,有输入、输出描述,有测试数据,并介绍不足。3.实验方案设计 3.1 编译系统原理介绍 编译器逐行扫描高级语言程序源程序,编译的过程如下: (1).词法分析 识别关键字、字面量、标识符(变量名、数据名)、运算符、注释行(给人看的,一般不处理)、特殊符号(续行、语句结束、数组)等六类符号,分别归类等待处理。 (2).语法分析 一个语句看作一串记号(Token)流,由语法分析器进行处理。按照语言的文法检查判定是否是合乎语法的句子。如果是合法句子就以内部格式保存,否则报错。直至检查完整个程序。 (3).语义分析 语义分析器对各句子的语法做检查:运算符两边类型是否相兼容;该做哪些类型转换(例如,实数向整数赋值要"取整");控制转移是否到不该去的地方;是

数据库课程设计实验报告一

一、需要实现得功能 1、1录入学生基本信息得功能 学生基本信息主要包括:学号、姓名、性别、年龄、出生地、专业、班级、总学分,在插入时,如果数据库则已经存在该学号,则不能再插入该学号。 1、2修改学生基本信息得功能 在管理员模式下,只要在表格中选中某个学生,就可以对该学生信息进行修改。 1、3查询学生基本信息得功能 可使用“姓名”对已存有得学生资料进行查询。 1、4删除学生基本信息得功能 在管理员模式下,只要选择表格中得某个学生,就可以删除该学生. 1、5用户登陆 用不同得登录权限可以进入不同得后台界面,从而实现权限操作。 1、6用户登陆信息设置 可以修改用户登陆密码 二、设计得目得 课程设计就是学习完该课程后进行得一次较全面得综合练习。其目得在于通过实践加深学生对面向对象程序设计得理论、方法与基础知识得理解,掌握使用Java语言进行面向对象设计得基本思路与方法;加强学生研发、调试程序得能力;培养学生分析、解决问题得能力;提高学生得科技论文写作能力。 三、总体设计 3、1功能图

3、2 Use Case图

3、3系统执行流程图 3、4、数据库设计

主要就是E-R 图与数据库二维表得设计 3、4、1数据库E-R 模型 3、4、2数据库关系模型—-二维表 学生表(s tu dent ) 字段 数据类型 说明 st uId nvarc har(30) 学号 s tuName n varchar(30) 姓名 st uSe x nva rchar(30) 性别 stuAg e i nt 年龄 s tuJg nvar char (30) 籍贯 stuZy n var cha r(30) 专业 cl as sId nvarch ar(30) 班号 stuSour se numeric(5,2) 总学分 学号 姓名 性别 年龄 出生地 专业 班级 总学分 登陆用户管理 账号 密码 职位 学 生

编译原理-课程设计报告-简单编译器实现-精品

课程设计 题目:简单编译器实现 学院:信息工程学院计算机系专业:计算机科学与技术班级:计科1103班 组长: 小组成员: 指导教师: 2014 年12 月19 日

目录 1 概述 (3) 1.1源、目标语言简介 (3) 1.2实现平台与运行平台简介 (3) 1.3其它 (4) 2简单词法分析器的设计与实现 (4) 2.1 基础理论说明 (4) 2.2 需求分析 (4) 2.3 概要设计 (5) 2.4 详细设计 (5) 2.5 测试数据与结果 (7) 2.6 心得体会 (7) 3 简单语法分析器设计与实现 (8) 3.1 基础理论说明 (8) 3.2 需求分析 (8) 3.3 概要设计 (8) 3.4 详细设计 (8) 3.5 测试数据与结果 (9) 3.6 心得体会 (10) 4 中间代码产生器的设计与实现 (10) 4.1 基础理论说明 (10) 4.2 需求分析 (10) 4.3 概要设计 (10) 4.4 详细设计 (11) 4.5 测试数据与结果 (12) 4.6 心得体会 (12) 附录: (14) 附录A:主要源程序与系统截图 (14) 附录B:任务分配表及个人完成的程序模块 (33) 附录C:小组讨论与研发记录 (34)

编译程序的工作过程一般可以分为五个阶段:词法分析、语法分析、语义分析与中间代码产生、优化、目标代码生成。每一个阶段在功能上是相对独立的,它一方面从上一个阶段获取分析的结果来进行分析,另一方面由将结果传递给下一个阶段。由编译程序的五个阶段就对应了编译系统的结构。 其中词法分析器利用超前搜索、状态转换等方法,将源程序转化成为一个一个的单词符号二元式。一般程序语言的单词符号包括关键字、运算符、常数、标识符和界符。语法分析器将这些单词符号作为输入,对它进行语法分析。语法分析分为两种方法:自上而下分析法和自下而上分析法。针对不同程序语言的语法规则可以采取不同的分析方法,当然两种方法也可以同时使用。语法分析器把语法单元作为输入供语义分析器使用。一般的语义分析器主要采用的是语法制导方法,即在语法分析的同时进行语法分析,并产生一定的语义动作,来生成中间代码。上面三个过程可以与硬件无关,而接下来的优化器和目标代码生成器是针对某一种处理器而言的。代码优化是将语义分析生成的中间代码进行优化,产生执行效率更高的代码。目标代码生成器最终生成可以在某种机器上运行的机器语言或者汇编语言。在整个编译过程中还包括对表格的操作和对错误的处理,这些也都是非常重要的环节。 1.1源、目标语言简介 使用C语言做简单语法分析器,C语言是一门高级计算机编程语言,设计目标是提供一种能以简易的方式编译、处理低级存储器、产生少量的机器码以及不需要任何运行环境支持便能运行的编程语言 1.2实现平台与运行平台简介 在win32环境下进行编译,Win32是指Microsoft Windows操作系统的32位环境,是目前使用最多的操作系统。 实验环境:需要TC、VC++ 6.0等开发工具作为本次试验的环境。

编 译 原 理 实 验 报 告

编译原理实验报告 课程:编译原理 系别:计算机系 班级:11网络 姓名:王佳明 学号:110912049 教师:刘老师 实验小组:第二组 1

实验一熟悉C程序开发环境、进行简单程序的调试 实验目的: 1、初步了解vc++6.0环境; 2、熟悉掌握调试c程序的步骤: 实验内容: 1、输入下列程序,练习Turbo C 程序的编辑、编译、运行。 #include main() { printf(“Programming is fun.\n”); } 2、分析程序,预测其运行结果,并上机检测你的预测。 #include main() { printf(“*\n”); printf(“* * *\n”); printf(“* * * * *\n”); printf(“* * * * * * *\n”); } 3、下面是一个加法程序,程序运行时等待用户从键盘输入两个整数,然后求出它们的和并输出。观察运行结果(程序输出),上机验证该程序。 #include main() { int a,b,c; printf(“Please input a,b:”); scanf(“%d,%d”,&a,&b); c=a+b; printf(“%d+%d=%d\n”,a,b,c); } 2

实验二词法分析器 一、实验目的: 设计、编制、调试一个词法分析子程序-识别单词,加深对词法分析原理的理解。 二、实验要求: 1.对给定的程序通过词法分析器弄够识别一个个单词符号,并以二元式(单词种别码,单词符号的属性值)显示。而本程序则是通过对给定路径的文件的分析后以单词符号和文字提示显示。 2.本程序自行规定: (1)关键字"begin","end","if","then","else","while","write","read", "do", "call","const","char","until","procedure","repeat" (2)运算符:"+","-","*","/","=" (3)界符:"{","}","[","]",";",",",".","(",")",":" (4)其他标记如字符串,表示以字母开头的标识符。 (5)空格、回车、换行符跳过。 在屏幕上显示如下: ( 1 , 无符号整数) ( begin , 关键字) ( if , 关键字) ( +, 运算符) ( ;, 界符) ( a , 普通标识符) 三、使用环境: Windows下的visual c++6.0; 四、调试程序: 1.举例说明文件位置:f:、、11.txt目标程序如下: begin x:=9 if x>0 then x:=x+1; while a:=0 do 3

《数据库课程设计实验报告》

《数据库课程设计》 设计题目:音乐播放器 专业: 物联网工程

目录 引言 一、人员分配 原雅丽:ER图绘制,编码和数据库的连接,运行代码的编写和调试。 肖凌云:创建数据库,对设计进行可行性分析、需求分析,绘制系统流程图 孟佳:绘制功能界面,绘制数据流图,数据字典,逻辑结构设计和部分ER图绘制 二、课程设计目的和要求 目的:设计一个音乐播放器 要求:能够满足大部分用户对歌曲进行操作的需求,例如收藏,下载,建立歌单,关注歌手,搜索音乐等。 三、课程设计过程 1需求分析阶段 1.1应用背景 在快生活节奏的今天,人们生活、工作的压力日益增加,迫切需要一个方便、快 捷的放松方式,例如听音乐,看MV等,音乐播放器也就应运而生,展现出了其 巨大的潜在市场价值。 1.2需求分析目标 迎合客户的根本需求,可实现听歌、评论、收藏等基本功能,在此基础上可增加 好友互动、分享歌曲等社交活动。 1.3系统设计概要 本系统主要是设计一个音乐播放器,包括音乐播放功能、用户自定义歌单功能、 歌曲搜索功能、热门榜单推荐功能等。 1.4软件处理对象 评论(用户名,评论内容,点赞数,回复内容) 专辑(歌手,发行时间,歌曲列表,唱片公司,专辑名,歌手简介,封面图片) 歌手(姓名,简介,单曲,专辑,MV,歌手照片,粉丝数) 歌曲信息表(发布年份,专辑,热度指数,标签,词作者,曲作者) 用户个人信息(头像,姓名,账号,关注,等级,收藏,生日,地区,乐龄,听歌时长) 热度指数(分享量,下载量,播放量,收藏量,评论量,搜索量) 歌单(歌单名,制作人,收藏量,歌曲列表) 歌曲(歌名,歌手,专辑,长度,歌词,封面,信息表,评论) 1.5系统可行性分析 使用场景:主要运用于手机上,计算机不适用于本音乐播放器 与现有播放器相比的优越性:操作界面简单明了,占用空间小。 费用支出:小组制作的软件,耗费极低。 人员和设备:三人一小组,利用电脑开发音乐播放器。 1.6系统设计目标及意义 设计出一个简洁、方便的音乐播放器,占用空间不大,能满足用户的基本需求。 1.7系统业务流程及具体功能

BB实验报告终极版

B B实验报告终极版 文件管理序列号:[K8UY-K9IO69-O6M243-OL889-F88688]

B2B实验报告 【实验目的及要求】 按照实验指导书的流程和要求,完成B2B实验 实验目的: 1了解 B2B 实验中各个角色的功能和任务。 2. 掌握电子商务 B2B 系统的交易流程和电子商务 B2B 实验中角色的配合。 3. 构建 B2B 交易流程,分析 B2B 交易中服务增值的环节。 4. 体会电子商务 B2B 运用的原理及相互配合的团队精神。 实验要求: 1. 了解 B2B 实验中三个角色:企业用户、货场、管理员的功能和实验任务。 2. 分角色完成 B2B 交易实验流程,记录交易流程。 3. 小组通过流程的讨论全面认识 B2B 电子商务交易流程,绘制完整的交易流程图。 4. 分析比较实验环境下的 B2B 电子商务流程与真实的 B2B 流程的差异,提出在各个环节中需要改善的流程和服务。 【实验原理】 通过网络平台来实验商务的电子化,在博星卓越电子商务教学试验系统模拟虚构的 B2B 电子商务。 【实验环境】 博星卓越电子商务教学实验系统

实验内容: 【实验方案设计】 实验由小组共同来完成,每组角色主要包括企业用户(2个),商城管理者(1个),货场(2个)。大家齐心合力,分工合作,根据 B2B 实验所要求的和课堂所学的电子商务知识,最终完成 B2B 任务。 【实验过程】(实验步骤、记录、数据、分析) 实验步骤: 1.点击“日志查看” 2.查看小组成员,知道各自的角色及任务。 3. 管理员作为实验环节的组长,协调和管理组内的配合和活动 4. 回忆课堂学过的知识,联系实验一完成的网上订购实验,初步构建 B2B 实验的流程 5. 点击“上课中,请点击进入”,完成第一轮 B2B 实验。 5.我是货场的角色,主要完成以下几个任务: 记录: 我的完成记录如下: 数据 我的角色有关数据的过程包括订单处理(例如新订单、正常订单、缺货订单等等)和财务收支查看。 分析: 在这个过程中我觉得要注意一下几点: 1)企业用户尽可能制造非常规订单(如:大批量订购,退货申请)。

相关文档
最新文档