1编译原理上机报告《DBMS的设计与实现》完成时间:20年月日2目录1.项目概况..................................................................................................................31.1基本目标.............................................................................................................31.2完成情况.............................................................................................................31.3逻辑结构与物理结构(由于语义制导没做,所以这部分没写)................61.4语法结构与数据结构(由于语义制导没做,这里只给出语法结构)........61.5执行流程.............................................................................................................71.6功能测试.............................................................................................................82.总结与未来工作......................................................................................................92.1未完成功能.........................................................................................................92.2未来实现方案.....................................................................................................931.项目概况1.1基本目标本次项目主要的目标是DBMS的设计与实现,即完成SQL语句的语法制导解释,通过这次项目,加深对《编译原理》课程的理解,掌握词法与语法的制导过程,熟悉Lex和Yacc的使用。1.2完成情况目前完成的功能是SQL词法分析器和语法分析器,下面介绍一下具体的实现情况。1.完成的语句:CREATEDATABASESxCREATETABLExSHOWTABLESDROPTABLESINSERTINTOxVALUESxSELECTxFROMxSELECTxFROMxWHERExSELECTxFROMxGROUPBYxDELETEFROMxWHERExUPDATExSETxWHEREx2.识别出的关键字如下:IDNUMBERCREATETABLECHARINTSELECTGROUPFROMWHEREANDORDROPSHOWINSERTINTOBYVALUESDATABASETABLESUPDATEDELETESETORAND3.识别出的符号如下:=()!,;*.44.识别标示符的说明:[0-9]的NUMBER,[0-9][a-zA-Z]的字符型。5.lex进行的词法分析如下:%{#includemyparser.h%}char[a-zA-Z_]digit[0-9]digits{digit}+optional_fraction(.{digits})?optional_exponent(E[+-]?{digits})?%%[]+;{digits}{optional_fraction}{optional_exponent}{returnNUMBER;}////SQL关健字的识别////////CREATE{returnCREATE;}DATABASE{returnDATABASE;}TABLE{returnTABLE;}GROUP{returnGROUP;}BY{returnBY;}CHAR{returnCHAR;}INT{returnINT;}SELECT{returnSELECT;}FROM{returnFROM;}WHERE{returnWHERE;}AND{returnAND;}OR{returnOR;}DROP{returnDROP;}SHOW{returnSHOW;}INSERT{returnINSERT;}UPDATE{returnUPDATE;}DELETE{returnDELETE;}TABLES{returnTABLES;}INTO{returnINTO;}VALUES{returnVALUES;}SET{returnSET;}{char}({char}|{digit})*{returnID;}//////对特殊符号的识别{return'';}5{return'';}={return'=';}!{return'!';}({return'(';}){return')';},{return',';};{return';';}*{return'*';}.{return'.';}%%6.yacc进行的语法分析如下:statements:statementsstatement|statement;statement:createdatabase|createtable|selectsql|droptable|showtables|insertsql|deletesql|updatesql;对于所给语句分别写出它们的文法如下:CREATEDATABASE的文法:createdatabase:CREATEDATABASEdatabase';'{printf(createdatabase!);};database:ID;CREATETABLE的文法:createtable:CREATETABLEtable'('fieldsdefinition')'';'{printf(createtable!\n);};table:ID;fieldsdefinition:field_type|fieldsdefinition','field_type;field_type:fieldtype;field:ID;type:CHAR'('NUMBER')'|INT;SELECT的文法:selectsql:SELECTfields_starFROMtables';'{printf(youuseSELECT!\n);}|SELECTfields_starFROMtablesWHEREconditions';'{printf(youuseSELECT!\n);}|SELECTfields_starFROMtablesGROUPBYfields_star';'{printf(youuseSELECT!\n);};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;comp_right:table_field|NUMBER;6comp_op:''|''|'='|'!''=';DROP语句的文法:droptable:DROPtable';'{printf(youdroptable!\n);};SHOWTABLES语句的文法:showtables:SHOWTABLES';'{printf(showalltables!\n);};INSERT语句的文法:insertsql:INSERTINTOtable'('fieldname')'VALUES'('fieldvalues')'';'{printf(insertdatasuccessfully!\n);}|INSERTINTOtableVALUES'('fieldvalues')'';'{printf(insertdatasuccessfully!\n);};fieldname:field|fieldname','field;fieldvalues:fieldvalue|fieldvalues','fieldvalue;fieldvalue:ID|NUMBER;DELETE语句的文法:deletesql:DELETEFROMtableWHEREconditions';'{printf(deletetable!\n);};UPDATE语句的文法:updatesql:UPDATEtableSETconditionWHEREconditions';'{printf(updatetable!\n);};7.语义制导:这部分目前还没有完成。1.3逻辑结构与物理结构(由于语义制导没做,所以这部分没写)1.4语法结构与数据结构(由于语义制导没做,这里只给出语法结构)逐条一一说明增加SQL语句的语法结构与数据结构。语法结构用产生式说明,其中非终结符的属性用结构体表示,所用数据结构需要说明,并且最后用图形说明整个SQL语句的数据结构。CREATE语句的产生式语法结构:createsql:CREATETABLEtable'('fieldsdefinition')'';'SELECT语句的产生式语法结构:7selectsql:SELECTfields_starFROMtables';'|SELECTfields_starFROMtablesWHEREconditions';'|SELECTfields_starFROMtablesGROUPBYfields_star';'DROP语句的产生式语法结构:droptable:DROPtable';'SHOWTABLES语句的产生式语法结构:showtables:SHOWTABLES';'INSERT语句的产生式语法结构:insertsql:INSERTINTOtable'('fieldname')'VALUES'('fieldvalues')'';'|INSERTINTOtableVALUES'('fieldvalues')'';'DELETE语句的产生式语法结构:deletesql:DELETEFROMtableWHEREconditions';'UPDATE语句的产生式语法结构:updatesql:UPDATEtableSETconditionWHEREconditions';'1.5执行流程逐条一一说明增加SQL语句的执行流程,并且配以流程图。流程中涉及到的函数需要对其名称、说明、输入参数、输出参数、执行流程进行一一说明。函数名称:CreateValueIndex(intdatasetID,intdocID)函数说明:结合XML文档的Schema信息对一个给定文档上所有节点及属性值建立值索引输入参数:datasetIDdataset编号,docIDdoc编号输出参数:0表示正确,其他表示错误执行流程:???81.6功能测试测试所实现的SQL语句的基本功能,框架如下:测试1输入:CREATEDATABASEmydb;输出:createdatabase!测试2输入:CREATET