资源描述:
《编译原理上机报告.doc》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、编译原理上机报告《DBMS的设计与实现》即miniSQL专业:计算机科学与技术班级:0308142011年05月08日目录1项目概况31.1人员组成及分工31.2项目完成情况42项目实现方案——编译部分52.1编程环境及工具52.2词法分析52.3语法分析63项目实现方案——DBMS部分123.1物理结构123.2主要功能154报告总结184.1上机心得181项目概况1.1人员组成及分工项目miniSQL实现简单的SQL语句功能,数据类型仅支持INTCHAR类型。以学会yacc&lex的使用,加深对于数据库管理系统的理解。项目分为词法分析、语法分析、存储结构设计与语义实现四个方面。
2、其中黄建财负责词法分析,王志彪负责语法分析,袁兆祎设计数据库系统的存储结构以及语法数结构,刘德龙完成数据库的语义实现和报告的撰写。项目总体流程:词法分析输出词法单元语法分析语法树存储信息语法树结构到物理结构的转换利用结构信息处理执行语句语义分析阶段1.2项目完成情况语法分析阶段实现识别上机要求的全部SQL语句。miniSQL实现语句有:1.CREATEDATABASE创建数据库2.USEDATABASE选择数据库3.CREATETABLE创建表4.SELECTFROMWHERE查询5.INSERTINTOVALUES插入元组6.DELETE删除元组7.DROPTABLE删除表8.S
3、HOWTABLES显示所有表的名称9.QUIT对于删除语句:6.DELETE删除元组7.DROPTABLE删除表数据库系统对于表和元组的删除操作和操作系统类似,并为真正删除而是设置删除标记,这就需要前期数据结构设计增加标志域。删除数据时只需设标志域为0(假设1数据有效)。2项目实现方案——编译部分2.1编程环境及工具Lex&Yacc工具:parsergeneratorC编译器:visualc++6.02.2词法分析词法分析不仅要实现识别miniSQL的关键字,还需识别相关符号以及标识符和数字。符号正规式:";"
4、"("
5、")"
6、"'"
7、"<"
8、">"
9、"="
10、"!"
11、"*"
12、'''
13、
14、'"'
15、","[]空白符正规式,即忽略空格数字:[0-9]+标识符:[A-Za-z][a-zA-Z0-9_.]*关键字正规式:create
16、CREATE{returnCREATE;}DATABASE
17、database{returnDATABASE;}DATABASES
18、databases{returnDATABASES;}use
19、USE{returnUSE;}table
20、TABLE{returnTABLE;}tables
21、TABLES{returnTABLES;}select
22、SELECT{returnSELECT;}from
23、FROM{returnFROM;}where
24、WH
25、ERE{returnWHERE;}AND
26、and{returnAND;}OR
27、or{returnOR;}insert
28、INSERT{returnINSERT;}into
29、INTO{returnINTO;}values
30、VALUES{returnVALUES;}update
31、UPDATE{returnUPDATE;}set
32、SET{returnSET;}delete
33、DELETE{returnDELETE;}drop
34、DROP{returnDROP;}show
35、SHOW{returnSHOW;}quit
36、q
37、QUIT{returnQUIT;}help
38、HELP{returnHELP;
39、}INT
40、int{returnINT;}CHAR
41、char{returnCHAR;}2.3语法分析语句产生式和语法树结构说明:语句create和usedatabase较简单,只需记录数据库名db_name;① CREATEDATABASE创建数据库sql_create_db:CREATEDATABASEdb_name';';db_name:ID;① USEDATABASE选择数据库sql_use_db:USEdb_name';';db_name:ID;② CREATETABLE创建表createtable语法树结构,存储字段名和表名structTable{//create根节点ch
42、ar*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_fl