編譯原理第六章上機(jī)輔導(dǎo).ppt

上傳人:max****ui 文檔編號:14568253 上傳時間:2020-07-24 格式:PPT 頁數(shù):52 大?。?12.86KB
收藏 版權(quán)申訴 舉報 下載
編譯原理第六章上機(jī)輔導(dǎo).ppt_第1頁
第1頁 / 共52頁
編譯原理第六章上機(jī)輔導(dǎo).ppt_第2頁
第2頁 / 共52頁
編譯原理第六章上機(jī)輔導(dǎo).ppt_第3頁
第3頁 / 共52頁

下載文檔到電腦,查找使用更方便

14.9 積分

下載資源

還剩頁未讀,繼續(xù)閱讀

資源描述:

《編譯原理第六章上機(jī)輔導(dǎo).ppt》由會員分享,可在線閱讀,更多相關(guān)《編譯原理第六章上機(jī)輔導(dǎo).ppt(52頁珍藏版)》請在裝配圖網(wǎng)上搜索。

1、1,編譯原理上機(jī)內(nèi)容,上機(jī)目的 題目與要求 參考解決方案 數(shù)據(jù)庫存儲結(jié)構(gòu) CREATE TABLE詞法語法分析 SELECT詞法語法分析,2,1 上機(jī)目的,通過做上機(jī)題加深對編譯原理和數(shù)據(jù)庫管理系統(tǒng)的理解,鞏固所學(xué)知識。 學(xué)會使用LEX// 類別 char char_var; char *yych; int yyint; ...... ; 4. SQL語言中記號的分類:關(guān)鍵字、標(biāo)示符、數(shù)字、其它符號。,20,3.2 詞法分析器,SQL語句中的記號: 例 CREATE TABLE Student ( Sno CHAR(9), Sname CHAR(20), Ssex CHAR(2), S

2、age INT ); 上邊的SQL語句包括哪些記號? 關(guān)鍵字:CREATE TABLE CHARINT 標(biāo)示符:Student Sno Sname Ssex Sage 數(shù)字: 9,20,2 其他符號: ( ) , ; ,,LEX源程序基本結(jié)構(gòu)如下: 聲明 %% 翻譯規(guī)則 %% 用戶定義子程序,21,22,3.2 詞法分析器,用正則式識別記號 CREATE TABLE對應(yīng)的LEX源程序: CREATEreturn CREATE; TABLEreturn TABLE; CHARreturn CHAR; INTreturn INT; A-Za-zA-Za-z0-9_*yylval

3、.yych=(char *)malloc(strlen(yytext)+1); strcpy(yylval.yych,yytext); return IDENTIFIER;,23,3.2 詞法分析器,0-9+yylval.yych=(char *)malloc(strlen(yytext)+1); strcpy(yylval.yych,yytext); return NUMBER; ;| (| )| ,return yytext0; 經(jīng)過詞法分析,CREATE TABLE語句被識別為: CREATE TABLE IDENTIFIER1 (IDENTIFIER2 CHAR(NUMBER), ID

4、ENTIFIER3 CHAR(NUMBER), IDENTIFIER4 CHAR(NUMBER), IDENTIFIER5 INT);,24,3.3 語法分析器,語法分析器的任務(wù):分析語言的結(jié)構(gòu) 為句子構(gòu)造語法樹; 檢查輸入序列中的錯誤。 主要工作: 設(shè)計SQL語言的文法; 設(shè)計語法樹的節(jié)點,用于存放表達(dá)式的語法樹; 利用YACC工具分析SQL語句,并構(gòu)造語句的語法樹; 設(shè)計測試程序和測試用例,檢驗分析器是否正確。,25,3.3 語法分析器,1. 設(shè)計CREATE TABLE語言的文法 statement createsql | selectsql | ...... createsql

5、 CREATE TABLE table ( fieldsdefinition ) ; table IDENTIFIER fieldsdefinition field_type | fieldsdefinition , field_type field_type field type field IDENTIFIER type CHAR ( NUMBER ) | INT,26,3.3 語法分析器,2. 設(shè)計CREATE TABLE語法樹的節(jié)點 typedef struct_createstruct/*create語法樹根節(jié)點*/ char*table; _createfieldsdef_ty

6、pe*fdef; _createstruct_type; typedef struct _createfieldsdef/*create語句中的字段定義*/ char*field; enum TYPE type; intlength; struct _createfieldsdef *next_fdef; _createfieldsdef_type; enum Type INT,CHAR;/*字段類型*/,27,YACC源程序基本結(jié)構(gòu)如下: 聲明 %% 翻譯規(guī)則 %% 用戶定義子程序 我們來看一個具體例子:,28,3.3 語法分析器,CREATE TABLE對應(yīng)的yacc源程序: %

7、 _createfieldsdef_type*cfdef_end; % %union/*定義yylval的格式*/ charchar_var; char*yych; intyyint; /*屬于create語法樹的類型*/ _createfieldsdef_type*cfdef_var; _createstruct_type*cs_var; ,29,3.3 語法分析器,%start statement %tokenCREATE TABLE CHAR INT %typeIDENTIFIERNUMBER %typetablefield %typetype %typefieldsdefinitio

8、nfield_type %typecreatesql %% --聲明部分,30,3.3 語法分析器,statement:selectsql |createsql create_table($1); | ......; createsql: CREATE TABLE table ( fieldsdefinition ) ; $$=(_createstruct_type *)malloc( sizeof(_createstruct_type)); $$-table=$3; $$-fdef=$5; ;,31,3.3 語法分析器,table

9、:IDENTIFIER $$=$1; ; fieldsdefinition:field_type $$=$1; cfdef_end=$1; |fieldsdefinition , field_type $$=$1; cfdef_end-next_fdef=$3; cfdef_end=$3; ;,32,3.3 語法分析器,field_type:field type $$=(_createfieldsdef_type *)malloc( sizeof(_createfieldsdef_type)); $$-field=$1; if (strlen($2)==0) /

10、*表示類型為int的時候,用INT表示類型,長度定為4*/ $$-type=INT; $$-length=4; $$-next_fdef=NULL; ,33,3.3 語法分析器,else/*類型為CHAR:用CHAR表示類型,長度定為$2*/ $$-type=CHAR; $$-length=atoi($2); $$-next_fdef=NULL; ; field:IDENTIFIER $$=$1; ; type:CHAR ( NUMBER ) $$=$3; |INT $$=0;;,34,3.4 SELECT 語句的實現(xiàn),詞法分析部分: SELECTreturn SELECT; FROMret

11、urn FROM; WHEREreturn WHERE; ANDreturn AND; ORreturn OR; ;| (| )| ,| | .| =| return yytext0;,35,3.4 SELECT 語句的實現(xiàn),1.設(shè)計SELECT語言文法 select 語句文法: statementselectsql| ...... selectsqlSELECT fields_star FROM tables ; | SELECT fields_star FROM tables WHERE conditions ; fields_startable_fields | * tablest

12、able | tables , table table_fieldstable_field | table_fields , table_field table_fieldfield | table . field table IDENTIFIER field IDENTIFIER,36,3.4 SELECT 語句的實現(xiàn),設(shè)計語法樹的節(jié)點,用于存放表達(dá)式的語法樹; typedefstruct_selectedfields/*select語句中選中的字段*/ char *table; char *field; struct _selectedfields*next_sf; _selectedfi

13、elds_type; typedef struct_selectedtables/*select語句中選中的表*/ char*table; struct_selectedtables*next_st; _selectedtables_type; typedef struct_selectstruct/*select語法樹的根節(jié)點*/ _selectedfields_type *sf; _selectedtables_type*st; _conditions_type*cons; _selectstruct_type;,37,3.4 SELECT 語句的實現(xiàn),typedef struct_con

14、ditions struct _conditions*left; struct _conditions*right; char comp_op;/*(a--and),(o--or), , = */ char type;/*2--是表的字段,1--是字符串型,0--是整型*/ char *table;/*不為NULL就存放表名*/ char *value;/*存放字段名,字符串或整數(shù)的值,要看type的值*/ intintval;/*用于以后計算的時候存儲結(jié)果*/ _conditions_type;,38,3.4 SELECT 語句的實現(xiàn),下邊是語法分析部分需要用到的中間變量 /*select語

15、句中選中的字段*/ _selectedfields_type*sf_var1,*sf_end; /*select語句中選中的表*/ _selectedtables_type*st_var1,*st_end;,39,3.4 SELECT 語句的實現(xiàn),%union/*定義yylval的格式*/ char char_var; char *yych; int yyint; /*屬于select語法樹的類型*/ _selectedfields_type*sf_var; _selectedtables_type*st_var; _selectstruct_type*ss_var; ,40,3.4 SELE

16、CT 語句的實現(xiàn),%token SELECTFROMWHERE %token IDENTIFIERNUMBER %typeselectsql %typefields_startable_fieldstable_field %typetables %typetablefield %left OR %leftAND %typeconditioncomp_leftcomp_right %typetable_field_conditions %typecomp_op,41,3.4 SELECT 語句的實現(xiàn),selectsql:SELECT fields_star FROM tables; $$=(_s

17、electstruct_type *)malloc(sizeof(_selectstruct_type)); $$-sf=$2; $$-st=$4; $$-cons=NULL; printf(SELECTSQLn); |SELECT fields_star FROM tables WHERE conditions ; $$=(_selectstruct_type *)malloc(sizeof(_selectstruct_type)); $$-sf=$2; $$-st=$4; $$-cons=$6;;,42,3.4 SELECT 語句的實現(xiàn),fields_star:table_fields/*

18、如果輸入了具體的字段名稱*/ $$=$1; printf(fields_starn); |*/*如果輸入了星號*/ $$=(_selectedfields_type *)malloc(sizeof(_selectedfields_type)); $$-table=NULL; $$-field=*; $$-next_sf=NULL; printf(fields_starn); ;,43,3.4 SELECT 語句的實現(xiàn),tables:table/*第一個表*/ $$=(_selectedtables_type *)malloc(sizeof(_selectedtables_type)); $$-

19、table=$1; $$-next_st=NULL; st_end=$$; printf(tables %s n,$1); |tables , table/*后面的表*/ $$=$1; st_var1=(_selectedtables_type *)malloc(sizeof(_selectedtables_type)); st_var1-table=$3; st_var1-next_st=NULL; st_end-next_st=st_var1;/*建立表名的連接*/ st_end=st_var1; printf(tablesn);;,44,3.4 SELECT 語句的實現(xiàn),table_fi

20、elds:table_field $$=$1; sf_end=$$;/*第一個字段名稱*/ printf(table_fieldsn); |table_fields , table_field/*后面的字段*/ $$=$1; sf_end-next_sf=$3;/*建立字段名的連接*/ sf_end=$3; printf(table_fieldsn); ;,45,3.4 SELECT 語句的實現(xiàn),table_field:field $$=(_selectedfields_type *)malloc(sizeof(_selectedfields_type)); $$-table=(char *)

21、malloc(sizeof(10));/*為以后填上表名預(yù)留空間*/ $$-table0=0; $$-field=$1; $$-next_sf=NULL; printf(table_field: %sn,$1); |table . field $$=(_selectedfields_type *)malloc(sizeof(_selectedfields_type));$$-table=$1; $$-field=$3; $$-next_sf=NULL; printf(table_fieldn);;,46,3.4 SELECT 語句的實現(xiàn),conditions:condition(文法還有問題,

22、原子條件必須加括號?) $$=$1; |( conditions ) AND ( conditions ) $$=(_conditions_type *)malloc(sizeof(_conditions_type)); $$-left=$2; $$-right=$6; $$-comp_op=a; |( conditions ) OR ( conditions ) $$=(_conditions_type *)malloc(sizeof(_conditions_type)); $$-left=$2; $$-right=$6; $$-comp_op=o;;,47,3.4 SELECT 語句的實現(xiàn)

23、,condition:comp_left comp_op comp_right $$=(_conditions_type *)malloc(sizeof(_conditions_type)); $$-left=$1; $$-comp_op=$2; $$-right=$3;; comp_left:table_field_ $$=$1; $$-comp_op=0; $$-type=2; $$-left=NULL; $$-right=NULL; ;,48,3.4 SELECT 語句的實現(xiàn),comp_right:table_field_ $$=$1; $$-comp_op=0; $$-type=2;

24、$$-left=NULL; $$-right=NULL; | IDENTIFIER $$=(_conditions_type *)malloc(sizeof(_conditions_type)); $$-left=NULL; $$-right=NULL; $$-comp_op=0; $$-type=1; $$-value=$2;,49,3.4 SELECT 語句的實現(xiàn),| NUMBER $$=(_conditions_type *)malloc(sizeof(_conditions_type)); $$-left=NULL; $$-right=NULL; $$-comp_op=0; $$-ty

25、pe=1; $$-value=$2; |NUMBER $$=(_conditions_type *)malloc(sizeof(_conditions_type)); $$-left=NULL; $$-right=NULL; $$-type=0; $$-value=$1; $$-intval=atoi($1);;,50,3.4 SELECT 語句的實現(xiàn),table_field_:field $$=(_conditions_type *)malloc(sizeof(_conditions_type)); $$-table=(char *)malloc(sizeof(10));/*為以后填上表名預(yù)

26、留空間*/ $$-table0=0; $$-value=$1; |table . field $$=(_conditions_type *)malloc(sizeof(_conditions_type)); $$-table=$1; $$-value=$3; ;,51,3.4 SELECT 語句的實現(xiàn),comp_op: $$=; |= $$==; ;,備注:,1.數(shù)據(jù)庫管理系統(tǒng)的重點在于物理結(jié)構(gòu)的設(shè)計。良好的物理結(jié)構(gòu)可以使數(shù)據(jù)存儲、查詢和刪除容易進(jìn)行。 2.使用lex和yacc工具實現(xiàn)詞法和語法分析,可以去網(wǎng)上下載lex和yacc工具。此處建議使用集成的工具Parser Generator。注意配置Parser Generator和VC++。具體配置見word文檔。 3.若只進(jìn)行詞法和語法分析,不用設(shè)計數(shù)據(jù)庫的物理結(jié)構(gòu);若要實現(xiàn)DBMS的功能,則要設(shè)計物理結(jié)構(gòu)。 4.推薦書籍:數(shù)據(jù)庫系統(tǒng)實現(xiàn),MySQL技術(shù)內(nèi)幕:Innodb存儲引擎,教材。,52,

展開閱讀全文
溫馨提示:
1: 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
2: 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
3.本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
5. 裝配圖網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

相關(guān)資源

更多
正為您匹配相似的精品文檔
關(guān)于我們 - 網(wǎng)站聲明 - 網(wǎng)站地圖 - 資源地圖 - 友情鏈接 - 網(wǎng)站客服 - 聯(lián)系我們

copyright@ 2023-2025  zhuangpeitu.com 裝配圖網(wǎng)版權(quán)所有   聯(lián)系電話:18123376007

備案號:ICP2024067431-1 川公網(wǎng)安備51140202000466號


本站為文檔C2C交易模式,即用戶上傳的文檔直接被用戶下載,本站只是中間服務(wù)平臺,本站所有文檔下載所得的收益歸上傳人(含作者)所有。裝配圖網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對上載內(nèi)容本身不做任何修改或編輯。若文檔所含內(nèi)容侵犯了您的版權(quán)或隱私,請立即通知裝配圖網(wǎng),我們立即給予刪除!