编译原理上机报告.docx

上传人:b****3 文档编号:13265870 上传时间:2023-06-12 格式:DOCX 页数:16 大小:206.77KB
下载 相关 举报
编译原理上机报告.docx_第1页
第1页 / 共16页
编译原理上机报告.docx_第2页
第2页 / 共16页
编译原理上机报告.docx_第3页
第3页 / 共16页
编译原理上机报告.docx_第4页
第4页 / 共16页
编译原理上机报告.docx_第5页
第5页 / 共16页
编译原理上机报告.docx_第6页
第6页 / 共16页
编译原理上机报告.docx_第7页
第7页 / 共16页
编译原理上机报告.docx_第8页
第8页 / 共16页
编译原理上机报告.docx_第9页
第9页 / 共16页
编译原理上机报告.docx_第10页
第10页 / 共16页
编译原理上机报告.docx_第11页
第11页 / 共16页
编译原理上机报告.docx_第12页
第12页 / 共16页
编译原理上机报告.docx_第13页
第13页 / 共16页
编译原理上机报告.docx_第14页
第14页 / 共16页
编译原理上机报告.docx_第15页
第15页 / 共16页
编译原理上机报告.docx_第16页
第16页 / 共16页
亲,该文档总共16页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

编译原理上机报告.docx

《编译原理上机报告.docx》由会员分享,可在线阅读,更多相关《编译原理上机报告.docx(16页珍藏版)》请在冰点文库上搜索。

编译原理上机报告.docx

编译原理上机报告

 

编译原理上机报告

 

《DBMS的设计与实现》

 

学号:

03111295姓名:

王永刚

手机:

XXXXXXX邮箱:

XXXXXX@

 

完成时间:

2014年6月9日

目录

1.项目概况3

1.1基本目标3

1.2完成情况4

1.3逻辑结构与物理结构5

1.4语法结构与数据结构6

1.5执行流程9

a)功能测试13

2.总结与未来工作19

a)未完成功能19

b)未来实现方案19

1.

项目概况

1.1基本目标

设计并实现一个DBMS原型系统,可以接受基本的SQL语句,对其进行词法分析、语法分析,然后解释执行SQL语句,完成对数据库文件的相应操作,实现DBMS的基本功能。

1.CREATEDATABASE创建数据库

2.USEDATABASE选择数据库

3.CREATETABLE创建表

4.SHOWTABLES显示表名

5.INSERT插入元组

6.SELECT查询元组

7.UPDATE更新元组

8.DELETE删除元组

9.DROPTABLE删除表

10.DROPDATABASE删除数据库

11.EXIT退出系统

注:

支持数据类型有INT、CHAR(N)等

加深编译原理基础知识的理解:

词法分析、语法分析、语法制导翻译等;

加深相关基础知识的理解:

数据库系统、数据结构、操作系统等。

 

1.2完成情况

已经实现全部的词法分析和语法分析,以及大部分语义分析。

已经实现的功能、语句:

CREATEDATABASE

USEDATABASE

CreateTABLE

INSERT

SELECT

DROPTABLE

DROPDATABASE

EXIT

 

项目实现方案

1.3逻辑结构与物理结构

该物理结构的优点、缺点分析。

表1用户元数据的逻辑结构

列名

说明

类型

User

用户名

Char(20)

Pwd

密码

Char(20)

表2表数据的逻辑结构

表名

列集合

行数据

Stu

列名集合

行数据集合

表3表数据的逻辑结构

数据库名

表集合

Dbname

Alltables

 

数据库物理结构:

其中sys.txt为系统表。

第一个数字表示当前系统中有两个数据库

下边有两行,每行中第一个数字表示后面字符串的长度,后面的字符串是数据库的名字

每个文件夹中是本数据库的信息,如xjgl这个数据库中:

其中sys.txt是本数据库表,其中记录本数据库中有多少个表,以及各表的信息。

Stu.txt存放Stu这个表的数据。

该物理结构的优点:

文件内容为文本,易于调试程序。

结构简单,易于操作。

缺点:

不利于扩充。

1.4语法结构与数据结构

structlistdblist;

structdb*curdb;

%union/*定义yylval的格式*/

{/*属于create语法树的类型*/

char*idvalue;

structtbl*tbs;

enumtypes*tps;

structcol*col;

structtbl*tb;

structintypes*itps;

intintval;

structlist*L;

structforcol*fc;

}

1.CREATE:

CREATEDATABASEsqlID创建数据库

用到的数据结构:

structlistdblist;

structdb

{

structlist_elemelem;

structlisttbs;

char*name;

};

其中dblist是在系统启动时初始化的。

2.CREATE:

CREATETABLEtable"("fielddefine")"

structtbl

{

structlistcollist;///所有列名

structlist**data;//表数据

structlist_elemelem;

char*name;//表名

intncol;

intnrow;

intsize;

intcurrow;

};

每个列

structcol

{

char*colname;//列名

enumtypestype;//列类型

intlen;//长度

structlist_elemelem;

};

enumtypes

{

tint,

tchar

};

structintypes

{

enumtypestps;

intlen;

};

3.INSERT:

INSERTINTOtableVALUES"("val")"

unionsqltype//具体数据

{

intd1;

char*d2;

};

structforcol//每列的数据

{

unionsqltyped;

structlist_elemelem;

enumtypestp;

};

4.整体结构

1.5执行流程

INSERT:

INSERTINTOtableVALUES"("val")"{

inti;

structtbl*tb=list_entry(list_find(&curdb->tbs,FindTb,$3),

structtbl,elem);

if(tb->nrow+1>=tb->size)

{

tb->data=realloc(tb->data,(2*tb->size+1)*sizeof(structlist*));

if(tb->data==NULL)

{

printf("Realloctb->datafailed!

\n");

return;

}

tb->size=2*tb->size+1;

}

tb->data[tb->nrow++]=$6;

list_foreach($6,ShowRowVal,tb);

printf("\n");

//printf("%s%s%d\n",tb->data[0].d2,tb->data[1]

}

|INSERTINTOtable"("param")"VALUES"("val")"

;

INSERT:

INSERTsql

;

INTO:

INTOsql

;

VALUES:

VALUESsql

;

val:

tval{$$=(structlist*)malloc(sizeof(structlist));

list_init($$);

list_push_back($$,&$1->elem);

}

|val","tval

{

list_push_back($1,&$3->elem);

$$=$1;

}

;

tval:

"'"NUMBER"'"{$$=(structforcol*)malloc(sizeof(structforcol));

$$->d.d1=$2;

$$->tp=tint;

}

|"'"ID"'"{$$=(structforcol*)malloc(sizeof(structforcol));

$$->d.d2=$2;

$$->tp=tchar;

}

|"'"DOUBLEX"'"

;

param:

ID

|param","ID

;

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

SELECT:

SELECT"*"FROMtbl{

inti;

structtbl*tb=list_entry(list_find(&curdb->tbs,FindTb,$4),

structtbl,elem);

for(i=0;inrow;i++)

{

list_foreach(tb->data[i],ShowRowVal,0);

printf("\n");

}

}

|SELECTparam1FROMtblsWHEREparam2

;

SELECT:

SELECTsql

;

FROM:

FROMsql

;

WHERE:

WHEREsql

;

tbls:

tbls","ID

|ID

;

tbl:

ID{$$=$1;}

;

param1:

param1","ID

|ID

;

param2:

"("param2")"

|param2ANDsqlparam2

|param2ORsqlparam2

|NOTsqlparam2

|IDREL"'"ID"'"

|IDRELNUMBER

;

REL:

"="

|">"

|"<"

|">""="

;

a)功能测试

测试所实现的SQL语句的基本功能,框架如下:

测试1

输入:

createdatabasexjgl

createdatabasetushuguanli

输出:

测试2

输入:

usexjgl

输出:

测试3

输入:

createtableStu(Snamechar(10),Snochar(10),Sageint)

createtableGrade(Snochar(10),Cnamechar(20),Gradeint)

输出:

测试4

输入:

insertintoStuvalues('wyg','x03111295','22')

insertintoStuvalues('wa','x03111294','23')

insertintoStuvalues('wb','x03111293','21')

insertintoStuvalues('xl','x03111291','24')

insertintoGradevalues('x03111295','English','99')

insertintoGradevalues('x03111295','Math','98')

insertintoGradevalues('x03111295','DataBase','80')

insertintoGradevalues('x03111295','OperateSystem','90')

select*fromStu

select*fromGrade

输出:

测试5

输入:

usetushuguanli

createtablebook(BookNamechar(20),Authorchar(20),priceint)

insertintobookvalues('CProgram','wyg','32')

insertintobookvalues('English','al','20')

insertintobookvalues('LinuxNet','xdj','69')

select*frombook

输出:

2.

总结与未来工作

a)未完成功能

没有把数据内容写入到文件,现在的数据库只是存在于内存中。

Select语句没有完全实现,只实现了简单的功能。

b)未来实现方案

预计未来可以把数据写入到文件里。

在DBMS启动时载入数据到内存,在DBMS关闭时把数据写回内存。

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 解决方案 > 解决方案

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2