ImageVerifierCode 换一换
格式:DOCX , 页数:38 ,大小:628.91KB ,
资源ID:7225520      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/7225520.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(西电编译原理上机报告.docx)为本站会员(b****5)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

西电编译原理上机报告.docx

1、西电编译原理上机报告编译原理上机报告DBMS的设计与实现学号: 姓名: 手机: 邮箱: 完成时间:2013 年 6月21日1. 项目概况1.1 基本目标设计并实现一个DBMS原型系统,可以接受基本的SQL语句,对其进行词法分析、语法分析,然后解释执行SQL语句,完成对数据库文件的相应操作,实现DBMS的基本功能。1.2 完成情况1.CREATE DATABASE 创建数据库2.SHOW DATABASES 显示数据库名3.DROP DATABASE 删除数据库4.USE DATABASE 选择数据库5.CREATE TABLE 创建表6.SHOW TABLES 显示表名7.DROP TABLE

2、 删除表8.INSERT 插入元组9.SELECT 查询元组10.DELETE 删除元组11.UPDATE 更新元组12.EXIT 退出系统2. 项目实现方案2.1 逻辑结构与物理结构1.逻辑结构(1)系统数据库1)元数据的逻辑结构在我设计的系统数据库中,虽然建有元数据的文件,但是文件中没有任何数据,所以元数据的逻辑结构不存在。2)基本数据的逻辑结构表1 系统数据库的基本数据的逻辑结构 列名说明类型name数据库的名称char(20)dbfile数据库的元数据文件名称char(40)datfile数据库的基本数据文件名称char(40)(2)用户数据库1)元数据的逻辑结构由于在我的设计中,为数

3、据库中每个表创建一个基本数据文件,所以不需要ppt中的“起始页”,添加了一个“表中列的数目”的列,如下表所示:表2 用户数据库的元数据的逻辑结构列名说明类型tname表的名称char(20)col_count表中列的数目int(4)tname表的名称,与前面的一样char(20)col_num列号int(4)col_name列名char(10)col_type列的类型int(4)offset偏移int(4)width宽度int(4)说明:表中col_type列,取值为整数,1表示字符串,2表示整型2)基本数据的逻辑结构与ppt中的参考方案不同的是,对于数据库中的每一个表,我并不是把每个表的基本

4、数据均存放在一个与数据库同名的基本数据文件中,而是为每个表创建一个与表同名的基本数据文件。因此,基本数据的逻辑结构与每个表的结构有关。当然,虽然为每个表创建一个与表同名的基本数据文件,但是为了与系统数据库的基本数据相匹配,仍然创建了一个与数据库同名的基本数据文件,只是文件为空,没有逻辑结构。2.物理结构所有的数据库文件均存放在名为“mydb”的根文件夹下。在根文件夹下,创建元数据文件sys.db,创建基本数据文件sys.dat。当创建一个数据库(如xjgl)时,在根文件夹下创建一个与数据库同名的文件夹(xjgl),在此文件夹下,创建与数据库同名的元数据文件(如xjgl.db),创建与数据库同名

5、的基本数据文件(如xjgl.dat)。当创建一个表(如student)时,在表所属的数据库的文件夹下,创建表的基本数据文件(student.dat)。 (1)系统数据库1)元数据的物理结构在我设计的数据库中,仅仅是在“mydb”根文件夹下创建了一个sys.db文件,但是文件中没有任何数据。2)基本数据的物理结构在“mydb”根文件夹下创建了一个sys.dat文件,文件中数据的保存实例如下表:表3 系统数据库的基本数据的物理结构namedbfiledatfilexjglxjgl.dbxjgl.dat(2)用户数据库1)元数据的物理结构在每个数据库(如xjgl)的同名文件夹下,创建与数据库同名的元

6、数据文件(如xjgl.db),文件中数据的保存实例如下表:表4 用户数据库的元数据的物理结构student3student0sname1020student1sage2204student2ssex2244course2course0cname1020course1cid2204cs2cs0sname1020cs1cid22042)基本数据的物理结构在每个数据库(如xjgl)的同名文件夹下,创建与数据库同名的基本数据文件(如xjgl.dat),但是文件中不存放任何表的基本数据。每个表的基本数据均存放在与表同名的基本数据文件中。如student表中的基本数据存放在student.dat文件中,c

7、ourse表中的基本数据存放在course.dat文件中,sc表中的基本数据存放在sc.dat文件中,文件中数据的保存实例如下两表:表5 用户数据库的student表的基本数据的物理结构snamesagessexzhangsan221lisi230wangwu210zhouliu221xiaobai230xiaohei190 表6 用户数据库的course表的基本数据的物理结构cnameciddb1complier2c3 3.优缺点(1)优点:一个表对应一个基本数据文件,对表的操作容易理解,文件指针移动不易出错。(2)缺点:存在空的文件,浪费存储空间。2.2 语法结构与数据结构1.CREATE

8、 DATABASE语句(1)产生式语法结构:create_database : CREATE DATABASE database ; ;非终结符create_database的属性使用如右结构说明:char *yych;非终结符database的属性:database : ID (字符串)(2)以实例说明该数据结构:CREATE DATABASE XJGL ;对应的数据结构如下图所示:图1 数据结构图2.SHOW DATABASES语句(1)产生式语法结构:show_databases : SHOW DATABASES ; ;非终结符show_databases无属性(2)以实例说明该数据结构

9、:SHOW DATABASES ;无数据结构3.DROP DATABASE语句(1)产生式语法结构:drop_database : DROP DATABASE database ; ;非终结符drop_database的属性使用如右结构说明:char *yych;非终结符database的属性:database : ID (字符串)(2)以实例说明该数据结构:DROP DATABASE XJGL ;对应的数据结构如下图所示:图2 数据结构图4.USE DATABASE语句(1)产生式语法结构:use_database : USE database ; ;非终结符use_database的属性使

10、用如右结构说明:char *yych;非终结符database的属性:database : ID (字符串)(2)以实例说明该数据结构:USE XJGL ;对应的数据结构如下图所示:图3 数据结构图5.CREATE TABLE语句(1)产生式语法结构:createsql : CREATE TABLE table ( fieldsdefinition ) ; ;table : ID ;fieldsdefinition : field_type | fieldsdefinition , field_type ;field_type : field type ;field : ID ;type :

11、CHAR ( NUMBER ) | INT ;非终结符createsql的属性使用如下结构说明:struct Createstruct /create语法树根节点 char *table; struct Createfieldsdef *fdef; ;非终结符fieldsdefinition与field_type的属性使用如下结构说明:struct Createfieldsdef / create语句中的字段定义 char *field; int type; int length; struct Createfieldsdef *next_fdef; ;非终结符type的属性使用如下结构说明:

12、struct Type_def /create语句中的字段的类型定义 int type; int length;(2)以实例说明该数据结构:CREATE TABLE Student (Sname CHAR(20), Sage INT, Ssex INT );对应的数据结构如下图所示:图4 数据结构图6.SHOW TABLES语句(1)产生式语法结构:show_tables : SHOW TABLES ; ;非终结符show_tables无属性(2)以实例说明该数据结构:SHOW TABLES ;无数据结构7.DROP TABLE语句(1)产生式语法结构:drop_table : DROP TA

13、BLE table ; ;非终结符drop_table的属性使用如右结构说明:char *yych;非终结符table的属性:table : ID (字符串)(2)以实例说明该数据结构:DROP table course;对应的数据结构如下图所示:图5 数据结构图8.INSERT语句(1)产生式语法结构:insertsql : INSERT INTO table VALUES ( insert_values ) ; | INSERT INTO table ( insert_fields ) VALUES ( insert_values ) ; ;insert_fields : insert_f

14、ield | insert_fields , insert_field ;insert_field : ID ;insert_values : insert_value | | insert_values , insert_value ;insert_value : ID | NUMBER ;非终结符insertsql的属性使用如下结构说明:struct Insertstruct /insert语法树根节点 char *table; struct Insertedfields *insert_fields; struct Insertedvalues *insert_values;非终结符in

15、sert_fields与insert_field的属性使用如下结构说明:struct Insertedfields /insert语句中插入的列的定义 char *field; struct Insertedfields *next_field;非终结符insert_values与insert_value的属性使用如下结构说明: struct Insertedvalues /insert语句中插入的值的定义 int type; char *value; struct Insertedvalues *next_value; ;(2)以实例说明该数据结构:INSERT INTO Student(S

16、name,Sage,Ssex) VALUES(“zhangsan”,22,1) ;对应的数据结构如下图所示:图6 数据结构图9.SELECT语句(1)产生式语法结构:selectsql : SELECT fields_star FROM tables ; | SELECT fields_star FROM tables WHERE conditions ; ;fields_star : table_fields | * ;table_fields : table_field | table_fields , table_field ;table_field : field | table .

17、field ;tables : tables , table | table ;conditions : condition | ( conditions ) | conditions AND conditions | conditions OR conditions ;condition : comp_left comp_op comp_right ;comp_left : table_field | NUMBER | ID ;comp_right: table_field | NUMBER | ID ;comp_op : | = | ! = ;非终结符selectsql的属性使用如下结构说

18、明:struct Selectstruct /select语法树根节点 struct Selectedfields *sf; struct Selectedtables *st; struct Conditions *cons; ;非终结符fields_star、table_fields与table_field的属性使用如下结构说明:struct Selectedfields /select语句中查询的列的定义 char *table; char *field; struct Selectedfields *next_sf;非终结符tables的属性使用如下结构说明:struct Select

19、edtables / select语句中查询的表的定义 char *table; struct Selectedtables *next_st; ;非终结符condition、conditions、comp_left、comp_right、comp_op的属性使用如下结构说明:struct Conditions /select语句中查询的条件的定义 struct Conditions *left; struct Conditions *right; char comp_op; int type; char *value; char *table; ;(2)以实例说明该数据结构:SELECT S

20、name,Sage FROM Student WHERE (Sage21) AND (Ssex=0);对应的数据结构如下图所示:图7 数据结构图10. DELETE语句(1)产生式语法结构:deletesql : DELETE FROM table ; | DELETE FROM table WHERE conditions ; ;非终结符deletesql的属性使用如下结构说明:struct Deletestruct /delete语法树根节点 char *table; struct Conditions *cons;(2)以实例说明该数据结构:DELET FROM Student WHER

21、E Sage”,判断条件的左部值是否大于条件的右部值,若是则返回1;否则返回0。同理,可以处理操作符分别为“”、“=”、“!”时的情况。(4) 判断条件中的操作符,若操作符为“a” 以条件左部为参数,递归调用得到左部的返回值,若左部返回值为0,则返回0;若左部返回值为1,以条件右部为参数,递归调用得到右部的返回值。若右部返回值为0,则返回0;若右部返回时为1,则返回1。同理,可以处理操作符为“o”时的情况。(5)若条件的类型是字段,根据表中各个字段的长度偏移,找到该字段在一个元组中的相对位置,接着判断它是上一层条件的左部还是右部。若是左部,则将该字段在元组中的值赋值给左部值变量;若是右部,则将

22、该字段在元组中的值赋值给右部值变量。若条件的类型是字符串或整型,判断它是上一层条件的左部还是右部。若是左部,则将结点p中传来的值赋值给左部值变量;若是右部,则将结点p中传来的值赋值给右部值变量。判断结束,返回2。函数名称:judge_set(struct Updatedfields *p)函数说明:当更新一个表的数据时,判断语句中set部分是否正确,即检查set部分中的字段是否存在,以及字段的类型与更新的值的类型是否一致。输入参数:struct Updatedfields *p,更新字段结点输出参数:1表示正确,0表示错误执行流程:(1)当set结点不为空时,转(2),否则,返回1。(2)检查

23、表中时候存在该字段以及字段的类型与更新的值的类型是否一致,若是,则p转向下一个更新字段结点,转(1);否则,返回0。 函数名称:update_data(struct Updatedfields *p)函数说明:更新数据,当表中的一个元组标记为可更新时,更新元组,然后将改变的元组写进一个新的文件;否则,直接将原来的元组写进此新的文件。输入参数:struct Updatedfields *p,更新字段结点输出参数:无返回值执行流程:(1)判断元组是否标记为可更新,若是,则转(2);否则,转(3)。(2)根据结点p,在元组中将set部分中需要更新的字段进行更新。所有字段更新完成,转(3)。(3)将元组写入一个新的文件。函数名称:judge_sf(struct Selectedfields *p)函数说明:当进行查询时,判断选择的属性列是否正确(在表中是否存在,多表查询不带表的名称时是否唯一)。输入参数:struct Selectedfields *p,查询的属性列结点输出参数:1表示选择属性列正确,0表示选择属性列错误执行流程:(1)判断选择属性列的结点内容是否为空,若为空(表示选择的属性列为“*”),返回1;否则,转(2)。(2)判断选择属性列的结点p是否为空,若为空,转(4);否则,转(3)。(3)判断当前属性列是

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

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