编译原理上机报告.docx
- 文档编号:2901281
- 上传时间:2022-11-16
- 格式:DOCX
- 页数:14
- 大小:125.73KB
编译原理上机报告.docx
《编译原理上机报告.docx》由会员分享,可在线阅读,更多相关《编译原理上机报告.docx(14页珍藏版)》请在冰豆网上搜索。
编译原理上机报告
编译原理上机报告
《DBMS的设计与实现》即miniSQL
专业:
计算机科学与技术
班级:
030814
2011年05月08日
目录
1项目概况3
1.1人员组成及分工3
1.2项目完成情况4
2项目实现方案——编译部分5
2.1编程环境及工具5
2.2词法分析5
2.3语法分析6
3项目实现方案——DBMS部分12
3.1物理结构12
3.2主要功能15
4报告总结18
4.1上机心得18
1项目概况
1.1人员组成及分工
项目miniSQL实现简单的SQL语句功能,数据类型仅支持INTCHAR类型。
以学会yacc&lex的使用,加深对于数据库管理系统的理解。
项目分为词法分析、语法分析、存储结构设计与语义实现四个方面。
其中黄建财负责词法分析,王志彪负责语法分析,袁兆祎设计数据库系统的存储结构以及语法数结构,刘德龙完成数据库的语义实现和报告的撰写。
项目总体流程:
1.2项目完成情况
语法分析阶段实现识别上机要求的全部SQL语句。
miniSQL实现语句有:
1.CREATEDATABASE创建数据库
2.USEDATABASE选择数据库
3.CREATETABLE创建表
4.SELECTFROMWHERE查询
5.INSERTINTOVALUES插入元组
6.DELETE删除元组
7.DROPTABLE删除表
8.SHOWTABLES显示所有表的名称
9.QUIT
对于删除语句:
6.DELETE删除元组
7.DROPTABLE删除表
数据库系统对于表和元组的删除操作和操作系统类似,并为真正删除而是设置删除标记,这就需要前期数据结构设计增加标志域。
删除数据时只需设标志域为0(假设1数据有效)。
2项目实现方案——编译部分
2.1编程环境及工具
Lex&Yacc工具:
parsergenerator
C编译器:
visualc++6.0
2.2词法分析
词法分析不仅要实现识别miniSQL的关键字,还需识别相关符号以及标识符和数字。
符号正规式:
";"|"("|")"|"'"|"<"|">"|
"="|"!
"|"*"|'''|'\"'|","
[]空白符正规式,即忽略空格
数字:
[0-9]+
标识符:
[A-Za-z][a-zA-Z0-9_.]*
关键字正规式:
create|CREATE{returnCREATE;}
DATABASE|database{returnDATABASE;}
DATABASES|databases{returnDATABASES;}
use|USE{returnUSE;}
table|TABLE{returnTABLE;}
tables|TABLES{returnTABLES;}
select|SELECT{returnSELECT;}
from|FROM{returnFROM;}
where|WHERE{returnWHERE;}
AND|and{returnAND;}
OR|or{returnOR;}
insert|INSERT{returnINSERT;}
into|INTO{returnINTO;}
values|VALUES{returnVALUES;}
update|UPDATE{returnUPDATE;}
set|SET{returnSET;}
delete|DELETE{returnDELETE;}
drop|DROP{returnDROP;}
show|SHOW{returnSHOW;}
quit|q|QUIT{returnQUIT;}
help|HELP{returnHELP;}
INT|int{returnINT;}
CHAR|char{returnCHAR;}
2.3语法分析
语句产生式和语法树结构说明:
语句create和usedatabase较简单,只需记录数据库名db_name;
1 CREATEDATABASE创建数据库
sql_create_db:
CREATEDATABASEdb_name';';
db_name:
ID;
2 USEDATABASE选择数据库
sql_use_db:
USEdb_name';';
db_name:
ID;
3 CREATETABLE创建表
createtable语法树结构,存储字段名和表名
structTable{//create根节点
char*tab_name;
structColumn*root_col;
};
structColumn{//表中字段定义
char*col_name;
inttype;
intlength;
structColumn*next_col;
};
structTabs{//表名
char*tab_name;
structTabs*next_tab;
};
文法:
sql_create_tab:
CREATETABLEtab_name'('col_fld')'';';
tab_name:
ID;
col_fld:
col_type
|col_fld','col_type;
col_type:
IDtype;
type:
CHAR'('NUMBER')'
|INT;
4 SELECTFROMWHERE查询
select语法树结构,存储表名,字段和条件
structSelect{//select根节点
structTabs*tabs;
structCols*cols;
structCondition*cons;
};
structTabs{//select表结构,存储表名
char*tab_name;
structTabs*next_tab;//指向下一表名(用于多表查询)
};
structCols{//列结构,
char*col_name;
structCols*next_col;
};
structCondition{//select条件结构
char*col_name;//字段
charop;//操作符
structValues*values;//值
structCondition*next_ORcon;//指向下一条件
structCondition*next_ANDcon;
};
structValues{//values结构存储值(int或char类型)
inttype;
union{char*str;intnum;}val;
structValues*next_val;
};
文法:
sql_select:
SELECTselect_fldFROMtables';'//Nowhere选择所有元组
|SELECTselect_fldFROMtablesWHEREconditions';';
tables:
tab_name
|tables','tab_name;
select_fld:
columns
|'*';//符号*选择所有字段
columns:
col_name
|columns','col_name;
col_name:
ID;
conditions:
condition
|conditionsORcondition//目前只能实现两个条件查询
|conditionsANDcondition;
condition:
s1
|'('condition')';
s1:
IDopvalues;条件中的字段和值
op:
'='|'<'|'>'|'!
''=';
5 INSERTINTOVALUES插入元组
insert语法树结构,存储表名,字段,值
structInsert{
char*tab_name;
structCols*cols;
structValues*values;
};
structValues{//values结构和select中的相同
inttype;
union{char*str;intnum;}val;
structValues*next_val;
};
文法:
sql_insert:
INSERTINTOtab_nameins_colsVALUES'('ins_values')'';';//重要的是记录values
ins_cols:
|'('columns')';
ins_values:
values
|ins_values','values;
6 DELETE删除元组
sql_delete:
DELETEFROMtab_nameWHEREconditions';';
条件结构conditions和select的相同
7 DROPTABLE删除表
sql_drop:
DROPTABLEtab_name';';
8 SHOWTABLES显示当前数据库中表信息,
sql_show:
SHOWTABLESshow_name';'
|SHOWTABLEshow_name';';
show_name:
//show_name为空时列出所有表信息
|ID;//否则列出表名为ID的表信息
9 QUIT
sql_quit:
QUIT;
3项目实现方案——DBMS部分
3.1物理结构
(1)、DBMS物理结构的特点
数据库系统对于信息的处理主要是表的处理。
表结构由字段和元组构成,当表建立时每一元组的大小即确定了。
数据库处理的都是确定大小的信息,为了便于管理和扩展把一个数据库文件分成若干块,数据库的所有信息——数据库名字、表名、字段名、元组等加入数据结构头后写入相应的文件块中。
下面是数据库结构的图形说明:
1 块使用分配
为简便起见,假设数据库文件128K。
每文件块大小为1024B,每个表至少分配一个文件块。
其中:
第0块,用一个数组管理128块的使用情况,0表示为使用,1已使用。
在地址128,132,136处分别存放freeid,表个数,
第1块,第2块,分别存放表信息和字段信息。
第
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 编译 原理 上机 报告
![提示](https://static.bdocx.com/images/bang_tan.gif)