西电编译原理上机报告文档格式.docx

上传人:b****4 文档编号:16579037 上传时间:2022-11-24 格式:DOCX 页数:38 大小:628.88KB
下载 相关 举报
西电编译原理上机报告文档格式.docx_第1页
第1页 / 共38页
西电编译原理上机报告文档格式.docx_第2页
第2页 / 共38页
西电编译原理上机报告文档格式.docx_第3页
第3页 / 共38页
西电编译原理上机报告文档格式.docx_第4页
第4页 / 共38页
西电编译原理上机报告文档格式.docx_第5页
第5页 / 共38页
点击查看更多>>
下载资源
资源描述

西电编译原理上机报告文档格式.docx

《西电编译原理上机报告文档格式.docx》由会员分享,可在线阅读,更多相关《西电编译原理上机报告文档格式.docx(38页珍藏版)》请在冰豆网上搜索。

西电编译原理上机报告文档格式.docx

类型

name

数据库的名称

char(20)

dbfile

数据库的元数据文件名称

char(40)

datfile

数据库的基本数据文件名称

(2)用户数据库

由于在我的设计中,为数据库中每个表创建一个基本数据文件,所以不需要ppt中的“起始页”,添加了一个“表中列的数目”的列,如下表所示:

表2用户数据库的元数据的逻辑结构

tname

表的名称

col_count

表中列的数目

int(4)

表的名称,与前面的一样

col_num

列号

col_name

char(10)

col_type

列的类型

offset

偏移

width

宽度

说明:

表中col_type列,取值为整数,1表示字符串,2表示整型

与ppt中的参考方案不同的是,对于数据库中的每一个表,我并不是把每个表的基本数据均存放在一个与数据库同名的基本数据文件中,而是为每个表创建一个与表同名的基本数据文件。

因此,基本数据的逻辑结构与每个表的结构有关。

当然,虽然为每个表创建一个与表同名的基本数据文件,但是为了与系统数据库的基本数据相匹配,仍然创建了一个与数据库同名的基本数据文件,只是文件为空,没有逻辑结构。

2.物理结构

所有的数据库文件均存放在名为“mydb”的根文件夹下。

在根文件夹下,创建元数据文件sys.db,创建基本数据文件sys.dat。

当创建一个数据库(如xjgl)时,在根文件夹下创建一个与数据库同名的文件夹(xjgl),在此文件夹下,创建与数据库同名的元数据文件(如xjgl.db),创建与数据库同名的基本数据文件(如xjgl.dat)。

当创建一个表(如student)时,在表所属的数据库的文件夹下,创建表的基本数据文件(student.dat)。

(1)系统数据库

1)元数据的物理结构

在我设计的数据库中,仅仅是在“mydb”根文件夹下创建了一个sys.db文件,但是文件中没有任何数据。

2)基本数据的物理结构

在“mydb”根文件夹下创建了一个sys.dat文件,文件中数据的保存实例如下表:

表3系统数据库的基本数据的物理结构

xjgl

xjgl.db

xjgl.dat

在每个数据库(如xjgl)的同名文件夹下,创建与数据库同名的元数据文件(如xjgl.db),文件中数据的保存实例如下表:

表4用户数据库的元数据的物理结构

student

3

sname

1

20

sage

2

4

ssex

24

course

cname

cid

cs

在每个数据库(如xjgl)的同名文件夹下,创建与数据库同名的基本数据文件(如xjgl.dat),但是文件中不存放任何表的基本数据。

每个表的基本数据均存放在与表同名的基本数据文件中。

如student表中的基本数据存放在student.dat文件中,course表中的基本数据存放在course.dat文件中,sc表中的基本数据存放在sc.dat文件中,文件中数据的保存实例如下两表:

表5用户数据库的student表的基本数据的物理结构

zhangsan

22

lisi

23

wangwu

21

zhouliu

xiaobai

xiaohei

19

表6用户数据库的course表的基本数据的物理结构

db

complier

c

3.优缺点

(1)优点:

一个表对应一个基本数据文件,对表的操作容易理解,文件指针移动不易出错。

(2)缺点:

存在空的文件,浪费存储空间。

2.2语法结构与数据结构

1.CREATEDATABASE语句

(1)产生式语法结构:

create_database:

CREATEDATABASEdatabase'

;

'

;

非终结符create_database的属性使用如右结构说明:

char*yych;

非终结符database的属性:

database:

ID(字符串)

(2)以实例说明该数据结构:

CREATEDATABASEXJGL;

对应的数据结构如下图所示:

图1数据结构图

2.SHOWDATABASES语句

show_databases:

SHOWDATABASES'

非终结符show_databases无属性

SHOWDATABASES;

无数据结构

3.DROPDATABASE语句

drop_database:

DROPDATABASEdatabase'

非终结符drop_database的属性使用如右结构说明:

DROPDATABASEXJGL;

图2数据结构图

4.USEDATABASE语句

use_database:

USEdatabase'

非终结符use_database的属性使用如右结构说明:

USEXJGL;

图3数据结构图

5.CREATETABLE语句

createsql:

CREATETABLEtable'

('

fieldsdefinition'

)'

'

table:

ID;

fieldsdefinition:

field_type

|fieldsdefinition'

'

field_type;

field_type:

fieldtype;

field:

type:

CHAR'

NUMBER'

|INT;

非终结符createsql的属性使用如下结构说明:

structCreatestruct{//create语法树根节点

char*table;

structCreatefieldsdef*fdef;

};

非终结符fieldsdefinition与field_type的属性使用如下结构说明:

structCreatefieldsdef{//create语句中的字段定义

char*field;

inttype;

intlength;

structCreatefieldsdef*next_fdef;

非终结符type的属性使用如下结构说明:

structType_def{//create语句中的字段的类型定义

CREATETABLEStudent(SnameCHAR(20),SageINT,SsexINT);

图4数据结构图

6.SHOWTABLES语句

show_tables:

SHOWTABLES'

非终结符show_tables无属性

SHOWTABLES;

7.DROPTABLE语句

drop_table:

DROPTABLEtable'

非终结符drop_table的属性使用如右结构说明:

非终结符table的属性:

DROPtablecourse;

图5数据结构图

8.INSERT语句

insertsql:

INSERTINTOtableVALUES'

insert_values'

|INSERTINTOtable'

insert_fields'

VALUES'

insert_fields:

insert_field|insert_fields'

insert_field;

insert_field:

insert_values:

insert_value||insert_values'

insert_value;

insert_value:

\'

ID'

|NUMBER;

非终结符insertsql的属性使用如下结构说明:

structInsertstruct{//insert语法树根节点

structInsertedfields*insert_fields;

structInsertedvalues*insert_values;

非终结符insert_fields与insert_field的属性使用如下结构说明:

structInsertedfields{//insert语句中插入的列的定义

structInsertedfields*next_field;

非终结符insert_values与insert_value的属性使用如下结构说明:

structInsertedvalues{//insert语句中插入的值的定义

inttype;

char*value;

structInsertedvalues*next_value;

INSERTINTOStudent(Sname,Sage,Ssex)VALUES(“zhangsan”,22,1);

图6数据结构图

9.SELECT语句

selectsql:

SELECTfields_starFROMtables'

|SELECTfields_starFROMtablesWHEREconditions'

fields_star:

table_fields|'

*'

table_fields:

table_field|table_fields'

table_field;

table_field:

field|table'

.'

field;

tables:

tables'

table|table;

conditions:

condition|'

conditions'

|conditionsANDconditions

|conditionsORconditions;

condition:

comp_leftcomp_opcomp_right;

comp_left:

table_field|NUMBER|'

comp_right:

comp_op:

<

|'

>

='

!

非终结符selectsql的属性使用如下结构说明:

structSelectstruct{//select语法树根节点

structSelectedfields*sf;

structSelectedtables*st;

structConditions*cons;

非终结符fields_star、table_fields与table_field的属性使用如下结构说明:

structSelectedfields{//select语句中查询的列的定义

char*table;

char*field;

structSelectedfields*next_sf;

非终结符tables的属性使用如下结构说明:

structSelectedtables{//select语句中查询的表的定义

structSelectedtables*next_st;

非终结符condition、conditions、comp_left、comp_right、comp_op的属性使用如下结构说明:

structConditions{//select语句中查询的条件的定义

structConditions*left;

structConditions*right;

charcomp_op;

char*value;

SELECTSname,SageFROMStudentWHERE(Sage>

21)AND(Ssex=0);

图7数据结构图

10.DELETE语句

deletesql:

DELETEFROMtable'

|DELETEFROMtableWHEREconditions'

非终结符deletesql的属性使用如下结构说明:

structDeletestruct{//delete语法树根节点

structConditions*cons;

DELETFROMStudentWHERESage<

21;

图8数据结构图

11.UPDATE语句

updatesql:

UPDATEtableSETfield_expressions'

|UPDATEtableSETfield_expressionsWHEREconditions'

field_expressions:

field_expression

|field_expressions'

field_expression;

field_expression:

field'

expression;

expression:

|NUMBER;

非终结符updatesql的属性使用如下结构说明:

structUpdatestruct{//update语法树根节点

structUpdatedfields*fe;

非终结符field_expressions与field_expression的属性使用如下结构说明:

structUpdatedfields{//update语句中更新的字段定义

structExpression*expression;

structUpdatedfields*next_fe;

非终结符expression的属性使用如下结构说明:

structExpression{//update语句中更新的值的定义

//1表示字符串,2表示整数

UPDATEStudentSETSage=21WHERESsex=1;

图9数据结构图

12.EXIT语句

exit:

EXIT'

(2)以实例说明该数据结构:

EXIT;

无数据结构。

2.3执行流程

使用到的所有外部函数如下:

函数名称:

judge_cons(structConditions*p)

函数说明:

当删除或者更新一个表的数据时,判断语句中的条件是否正确,即检查条件中的字段是否存在,条件中操作符两端的数据类型是否一致。

输入参数:

structConditions*p,条件结点

输出参数:

1表示正确,0表示错误

执行流程:

(1)判断条件左部是否为空,若不为空,转

(2);

若为空,转(3)。

(2)以条件左部为参数,递归调用得到左部的返回值,若左部返回值为0,则返回0;

若左部返回值为1,以条件右部为参数,递归调用得到右部的返回值。

若右部返回值为0,则返回0;

若右部返回时为1,则返回1。

(3)若条件的类型是字段,检查表中是否存在此字段,若不存在,则置标志变量为0;

若存在,则判断它是上一层条件的左部还是右部。

若是左部,则记录下此字段的类型,置标志变量为1;

若是右部,则判断此字段的类型与左部条件的类型是否相同,相同则置标志变量为1,不同则置标志变量为0。

若条件的类型是字符串或整型,判断它是上一层条件的左部还是右部。

若是左部,则记录下此时条件的类型,置标志变量为1;

若是右部,则判断此条件的类型与左部条件的类型是否相同,相同则置标志变量为1,不同则置标志变量为0。

最后,返回标志变量。

judge(structConditions*p)

当删除或者更新一个表的数据时,判断表中一个元组是否满足删除或者更新的条件。

1表示满足条件,0表示不满足条件

若为空,转(5)。

(2)以条件左部与条件右部为参数,递归调用得到左部与右部的返回值,若左部返回值与右部返回值均为2,转(3);

否则,转(4)。

(3)判断条件中的操作符,若操作符为“>

”,判断条件的左部值是否大于条件的右部值,若是则返回1;

否则返回0。

同理,可以处理操作符分别为“>

”、“=”、“!

”时的情况。

(4)判断条件中的操作符,若操作符为“a”以条件左部为参数,递归调用得到左部的返回值,若左部返回值为0,则返回0;

同理,可以处理操作符为“o”时的情况。

(5)若条件的类型是字段,根据表中各个字段的长度偏移,找到该字段在一个元组中的相对位置,接着判断它是上一层条件的左部还是右部。

若是左部,则将该字段在元组中的值赋值给左部值变量;

若是右部,则将该字段在元组中的值赋值给右部值变量。

若条件的类型是字符串或整型,判断它是上一层条件的左部还是右部。

若是左部,则将结点p中传来的值赋值给左部值变量;

若是右部,则将结点p中传来的值赋值给右部值变量。

判断结束,返回2。

judge_set(structUpdatedfields*p)

当更新一个表的数据时,判断语句中set部分是否正确,即检查set部分中的字段是否存在,以及字段的类型与更新的值的类型是否一致。

structUpdatedfields*p,更新字段结点

(1)当set结点不为空时,转

(2),否则,返回1。

(2)检查表中时候存在该字段以及字段的类型与更新的值的类型是否一致,若是,则p转向下一个更新字段结点,转

(1);

否则,返回0。

update_data(structUpdatedfields*p)

更新数据,当表中的一个元组标记为可更新时,更新元组,然后将改变的元组写进一个新的文件;

否则,直接将原来的元组写进此新的文件。

structUpdatedfields*p,更新字段结点

无返回值

(1)判断元组是否标记为可更新,若是,则转

(2);

否则,转(3)。

(2)根据结点p,在元组中将set部分中需要更新的字段进行更新。

所有字段更新完成,转(3)。

(3)将元组写入一个新的文件。

judge_sf(structSelectedfields*p)

当进行查询时,判断选择的属性列是否正确(在表中是否存在,多表查询不带表的名称时是否唯一)。

structSelectedfields*p,查询的属性列结点

1表示选择属性列正确,0表示选择属性列错误

(1)判断选择属性列的结点内容是否为空,若为空(表示选择的属性列为“*”),返回1;

否则,转

(2)。

(2)判断选择属性列的结点p是否为空,若为空,转(4);

(3)判断当前属性列是

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

当前位置:首页 > 求职职场 > 简历

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1