![編譯原理課程設(shè)計(jì)報(bào)告_第1頁(yè)](http://file3.renrendoc.com/fileroot_temp3/2022-3/9/078e67f2-7683-4231-8bb9-6a9846078877/078e67f2-7683-4231-8bb9-6a98460788771.gif)
![編譯原理課程設(shè)計(jì)報(bào)告_第2頁(yè)](http://file3.renrendoc.com/fileroot_temp3/2022-3/9/078e67f2-7683-4231-8bb9-6a9846078877/078e67f2-7683-4231-8bb9-6a98460788772.gif)
![編譯原理課程設(shè)計(jì)報(bào)告_第3頁(yè)](http://file3.renrendoc.com/fileroot_temp3/2022-3/9/078e67f2-7683-4231-8bb9-6a9846078877/078e67f2-7683-4231-8bb9-6a98460788773.gif)
![編譯原理課程設(shè)計(jì)報(bào)告_第4頁(yè)](http://file3.renrendoc.com/fileroot_temp3/2022-3/9/078e67f2-7683-4231-8bb9-6a9846078877/078e67f2-7683-4231-8bb9-6a98460788774.gif)
![編譯原理課程設(shè)計(jì)報(bào)告_第5頁(yè)](http://file3.renrendoc.com/fileroot_temp3/2022-3/9/078e67f2-7683-4231-8bb9-6a9846078877/078e67f2-7683-4231-8bb9-6a98460788775.gif)
版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、精選優(yōu)質(zhì)文檔-傾情為你奉上 實(shí)驗(yàn)1:用Lex設(shè)計(jì)詞法分析器1實(shí)驗(yàn)?zāi)康模簩W(xué)會(huì)用lex設(shè)計(jì)一個(gè)詞法分析器。實(shí)驗(yàn)內(nèi)容:使用lex為下述文法語(yǔ)言寫(xiě)一個(gè)詞法分析器。實(shí)驗(yàn)要求:輸入為用該語(yǔ)言所寫(xiě)的源程序文件;輸出為記號(hào)序列,每個(gè)記號(hào)顯示為二元組(記號(hào)名,記號(hào)屬性值)的形式。輸出可以在屏幕上,也可以輸出到文件中。不要求建立符號(hào)表。在cygwin下用flex和gcc工具將實(shí)驗(yàn)調(diào)試通過(guò),并能通過(guò)例子parser0中testcases目錄下的測(cè)試?yán)臏y(cè)試。實(shí)驗(yàn)參考:和。語(yǔ)言文法:<程序>à PROGRAM <標(biāo)識(shí)符> ; <分程序><分程序>à
2、<變量說(shuō)明> BEGIN <語(yǔ)句表> END.<變量說(shuō)明> à VAR <變量說(shuō)明表><變量說(shuō)明表>à<變量表>: <類(lèi)型> | <變量表>: <類(lèi)型> <變量說(shuō)明表><類(lèi)型>à INTEGER | REAL<變量表>à <變量> | <變量>, <變量表><語(yǔ)句表>à <語(yǔ)句> | <語(yǔ)句> <語(yǔ)句表><語(yǔ)句&g
3、t;à <賦值語(yǔ)句> | <條件語(yǔ)句> | <WHILE語(yǔ)句> | <復(fù)合語(yǔ)句><賦值語(yǔ)句>à<變量> := <算術(shù)表達(dá)式><條件語(yǔ)句>à IF <關(guān)系表達(dá)式> THEN <語(yǔ)句> ELSE <語(yǔ)句><WHILE語(yǔ)句>à WHILE <關(guān)系表達(dá)式> DO <語(yǔ)句><復(fù)合語(yǔ)句> à BEGIN <語(yǔ)句表> END<算術(shù)表達(dá)式> à &l
4、t;項(xiàng)> | <算術(shù)表達(dá)式> + <項(xiàng)> | <算術(shù)表達(dá)式> - <項(xiàng)><項(xiàng)> à <因式> | <項(xiàng)> * <因式> | <項(xiàng)> / <因式><因式>à <變量> | <常數(shù)> | (<算術(shù)表達(dá)式>)<關(guān)系表達(dá)式>à <算術(shù)表達(dá)式> <關(guān)系符> <算術(shù)表達(dá)式><變量>à <標(biāo)識(shí)符><標(biāo)識(shí)符>
5、4; <標(biāo)識(shí)符><字母> | <標(biāo)識(shí)符><數(shù)字> | <字母><常數(shù)>à <整數(shù)> | <浮點(diǎn)數(shù)><整數(shù)>à <數(shù)字> | <數(shù)字> <整數(shù)><浮點(diǎn)數(shù)>à .<整數(shù)> | <整數(shù)>.<整數(shù)><關(guān)系符>à < | <= | = | > | >=| <><字母>à A | B | | X | Y |
6、Z | a | b | | x | y | z<數(shù)字>à0|1|2|9程序代碼:%#include <> #define LT1#defineLE2#define GT3#defineGE4#defineEQ5#define NE6#define PROGRAM 7#define END13#define VAR9#define IF10#define THEN 11#define ELSE 12#define WHILE18#defineDO19#define ID 20#define NUMBER 21#define RELOP 22#define NEW
7、LINE 23#define ERRORCHAR 24%delim t nwsdelim+letter A-Za-zdigit 0-9id_|letter(letter|digit)*numberdigit+(.digit+)?(E+-?digit+)?int1 digit|digitint1*/%s COMMENT%<INITIAL>"/*"BEGIN COMMENT;ECHO;<COMMENT>"*/"BEGIN INITIAL;ECHO;<COMMENT>.|nECHO; /* ECHO是一個(gè)宏,相當(dāng)于 fpri
8、ntf(yyout, "%s", yytext)*/<INITIAL>ws ;<INITIAL>whilereturn (WHILE);<INITIAL>do return (DO);<INITIAL>PROGRAM return (PROGRAM);<INITIAL>end return (END);<INITIAL>VAR return (VAR);<INITIAL>if return (IF);<INITIAL>then return (THEN);<INITIAL&
9、gt;else return (ELSE);<INITIAL>id return (ID);<INITIAL>number return (NUMBER);<INITIAL>"<" return (RELOP);<INITIAL>"<=" return (RELOP);<INITIAL>"=" return (RELOP);<INITIAL>"<>" return (RELOP);<INITIAL>"
10、;>" return (RELOP);<INITIAL>">=" return (RELOP);<INITIAL>"+" return (RELOP);<INITIAL>"-" return (RELOP);<INITIAL>"*" return (RELOP);<INITIAL>"/" return (RELOP);<INITIAL>":=" return (RELOP);<
11、INITIAL>"" return (RELOP);<INITIAL>"." return (RELOP);<INITIAL>"," return (RELOP);<INITIAL>.return ERRORCHAR;%int yywrap () return 1;void writeout(int c) switch(c) case ERRORCHAR: fprintf(yyout, "(ERRORCHAR, "%s") ", yytext);brea
12、k; case RELOP: fprintf(yyout, "(RELOP, "%s") ", yytext);break; case WHILE: fprintf(yyout, "(WHILE, "%s") ", yytext);break; case DO: fprintf(yyout, "(DO, "%s") ", yytext);break; case NUMBER: fprintf(yyout, "(NUM, "%s") ",
13、 yytext);break; case ID: fprintf(yyout, "(ID, "%s") ", yytext);break; case NEWLINE: fprintf(yyout, "n");break; case PROGRAM: fprintf(yyout, "(PROGRAM, "%s") ", yytext);break; case END: fprintf(yyout, "(END, "%s") ", yytext);break;
14、 case VAR: fprintf(yyout, "(VAR, "%s") ", yytext);break; case IF: fprintf(yyout, "(IF, "%s") ", yytext);break; case THEN: fprintf(yyout, "(THEN, "%s") ", yytext);break; case ELSE: fprintf(yyout, "(ELSE, "%s") ", yytext);
15、break; default:break; return;int main (int argc, char * argv)int c,j=0;if (argc>=2) if (yyin = fopen(argv1, "r") = NULL) printf("Can't open file %sn", argv1); return 1; if (argc>=3) yyout=fopen(argv2, "w"); while (c = yylex()writeout(c);j+;if (j%5 = 0) writeou
16、t(NEWLINE);if(argc>=2) fclose(yyin); if (argc>=3) fclose(yyout);return 0;測(cè)試文件為:PROGRAM test;VAR i, j, k: INTEGER; f0: REAL;BEGIN i := 1; j := 1; k := 0; f0 := ; WHILE k<=100 DO BEGIN IF j <20 THEN BEGIN j := i; k := k+1; f0 := f0* END ELSE BEGIN j := k; k := k-2; f0 := f0/.2 END ENDEND.運(yùn)
17、行結(jié)果:實(shí)驗(yàn)2:用Lex設(shè)計(jì)詞法分析器2實(shí)驗(yàn)?zāi)康模簩W(xué)會(huì)用lex設(shè)計(jì)一個(gè)詞法分析器,并考慮其與后續(xù)語(yǔ)法分析器的鏈接問(wèn)題。實(shí)驗(yàn)內(nèi)容:修改上次實(shí)驗(yàn)1的詞法分析器,使其滿足下列要求。實(shí)驗(yàn)要求:1. 要求每次調(diào)用詞法分析函數(shù)yylex時(shí),只返回一個(gè)記號(hào)(token);2. 為記號(hào)選擇適當(dāng)?shù)膶傩灾?,并且每次詞法分析函數(shù)返回記號(hào)前,都將記號(hào)的屬性值存入全局變量yylval中。(yylval可以自己定義為全局變量);3. 記號(hào)屬性值的選擇:標(biāo)識(shí)符的屬性為標(biāo)識(shí)符的名字字符串(例如,標(biāo)識(shí)符name1的屬性為字符串”name1”),整數(shù)的屬性為整數(shù)值,浮點(diǎn)數(shù)的屬性為浮點(diǎn)數(shù)值。其他記號(hào)屬性值可自己選擇。關(guān)鍵字可以省略
18、屬性。4. 注意:由于屬性值需要存入yylval中,并且記號(hào)屬性值的類(lèi)型比較多(可能為字符串、整數(shù)、浮點(diǎn)數(shù)等),因此yylval必須能同時(shí)存放各種類(lèi)型的值(提示:將yylval設(shè)置為union類(lèi)型)。5. 在cygwin下用flex和gcc工具將實(shí)驗(yàn)調(diào)試通過(guò),并能通過(guò)例子parser0中testcases目錄下的測(cè)試?yán)臏y(cè)試。實(shí)驗(yàn)3:熟悉Yacc的使用實(shí)驗(yàn)?zāi)康模菏煜ふZ(yǔ)法分析器生成工具Yacc的使用,并學(xué)會(huì)在cygwin下使用bison工具編譯Yacc文法說(shuō)明文件。學(xué)習(xí)如何使用lex和yacc合作進(jìn)行語(yǔ)法分析。實(shí)驗(yàn)內(nèi)容:根據(jù)給出的calculator例子(calculator0,calculat
19、or1,calculator2,calculator3)完成下面題目:用lex和yacc寫(xiě)一個(gè)計(jì)算布爾表達(dá)式真值的計(jì)算器。實(shí)驗(yàn)要求:輸入為一個(gè)布爾表達(dá)式,以換行結(jié)束。輸出為這個(gè)布爾表達(dá)式的真值(true或false)。必須用二義文法實(shí)現(xiàn)。布爾表達(dá)式二義文法為:S > S or S | S and S | not S | (S) | true | false,其中優(yōu)先級(jí)or < and < not,or 和 and 左結(jié)合,not 右結(jié)合。用非二義文法實(shí)現(xiàn)作為選作內(nèi)容,非二義文法請(qǐng)參照表達(dá)式非二義文法自己寫(xiě)出來(lái)。在cygwin下用flex,bison和gcc工具將實(shí)驗(yàn)調(diào)試通過(guò),
20、并寫(xiě)出測(cè)試?yán)郎y(cè)試正確性。實(shí)驗(yàn)參考:calculator0-3這四個(gè)例子。程序代碼:文件:%int yylex(); #define YYSTYPE double /* 將Yacc棧定義為double類(lèi)型 printf("nThe value of the expression is %lf.n", $1);*/%token NUM LPAREN RPAREN ENTER %left OR%left AND%right NOT%left PLUS MINUS%left TIMES DIVIDE%right UMINUS% /* 這樣寫(xiě)prog可以讓分析器每次讀入一行進(jìn)行分析,
21、下一行重新分析expr */prog : prog exprp | exprp ;exprp : expr ENTER printf("1 表示 true;0 表示 false %lf.n", $1);shuchu($1); ;expr : expr PLUS expr$ = $1 + $3;| expr MINUS expr $ = $1 - $3;| expr TIMES expr $ = $1 * $3;| expr DIVIDE expr $ = $1 / $3;| LPAREN expr RPAREN $ = $2;| MINUS expr $ = -$2;| N
22、UM $ = $1; | expr OR expr $=panduan($1*$1+$3*$3); | expr AND expr $=panduan($1*$3); | NOT expr $=panduan2($2);%int main()yyparse();return 0;文件:%#include ""#include <> int yywrap(void) return 1;#define LT1#defineLE2#define GT3#defineGE4#defineEQ5#define NE6#define PROGRAM7#define END1
23、3#define VAR9#define IF10#define THEN 11#define ELSE 12#define WHILE18#defineDO19#define ID 20#define RELOP 22#define NEWLINE 23#define ERRORCHAR 24%ws t+digit 0-9inumdigit+fnum digit*.digit+letterA-Za-zid_|letter(letter|digit)*%inum sscanf(yytext, "%lf", &yylval); return NUM;fnumsscan
24、f(yytext, "%lf", &yylval); return NUM;"+"return PLUS;"*"return TIMES;"-"return MINUS;"/"return DIVIDE;"("return LPAREN;")"return RPAREN;"or" return OR;"and" return AND;"not" return NOT;"<&
25、quot;return LT;"<="return LE;">"return GT;">="return GE;"=" return EQ;"!=" return NQ;":=" return FZ;ws;"n"return ENTER;. printf("nLEX:ERROR! c=%sn", yytext);<INITIAL>"/*"BEGIN COMMENT;ECHO;<CO
26、MMENT>"*/"BEGIN INITIAL;ECHO;<INITIAL>whilereturn (WHILE);<INITIAL>do return (DO);<INITIAL>PROGRAM return (PROGRAM);<INITIAL>end return (END);<INITIAL>VAR return (VAR);<INITIAL>if return (IF);<INITIAL>then return (THEN);<INITIAL>else retur
27、n (ELSE);<INITIAL>id return (ID);%int panduan(double a)if(a!=0) a=1;return a;int panduan2(double a)if(a=0) a=1;else if(a!=0) a=0;return a;int shuchu(double a)if(a=0)printf("false");else if (a!=0)printf("true");return 1;運(yùn)行程序:實(shí)驗(yàn)4:用Yacc設(shè)計(jì)語(yǔ)法分析器1實(shí)驗(yàn)?zāi)康模簩W(xué)習(xí)如何使用Yacc設(shè)計(jì)一個(gè)語(yǔ)法分析器,并與用lex寫(xiě)的
28、詞法分析器鏈接起來(lái)。實(shí)驗(yàn)內(nèi)容:使用yacc為課程設(shè)計(jì)實(shí)驗(yàn)1所給的語(yǔ)言寫(xiě)一個(gè)語(yǔ)法分析器(你可以重新設(shè)計(jì)該語(yǔ)言的文法,但不能改變語(yǔ)言)。其中,詞法分析使用課程設(shè)計(jì)實(shí)驗(yàn)2中已完成的詞法分析器(即,你需要將本實(shí)驗(yàn)的語(yǔ)法分析器和實(shí)驗(yàn)2的詞法分析器鏈接起來(lái))。實(shí)驗(yàn)要求:輸入為實(shí)驗(yàn)1所給語(yǔ)言寫(xiě)的源程序文件;輸出為屏幕顯示語(yǔ)法分析是否成功。在語(yǔ)法分析中不能出現(xiàn)任何的沖突(移進(jìn)-歸約或歸約-歸約沖突),或者雖然有沖突,但是你能夠說(shuō)清楚沖突是如何解決的。在cygwin下用flex,bison和gcc工具將實(shí)驗(yàn)調(diào)試通過(guò),并且你寫(xiě)的語(yǔ)法分析器至少應(yīng)該能通過(guò)例子parser0中testcases目錄下的和兩個(gè)測(cè)試?yán)臏y(cè)
29、試。實(shí)驗(yàn)參考:可以在例子parser0的基礎(chǔ)上進(jìn)行修改;如果你尚不能將實(shí)驗(yàn)2的詞法分析器和本實(shí)驗(yàn)的語(yǔ)法分析器鏈接起來(lái),可以暫時(shí)使用parser0給出的詞法分析器(前提是你的語(yǔ)法分析器中終結(jié)符名的定義與parser0的相同)。程序代碼:%int yylex(); #define YYSTYPE double /* 將Yacc棧定義為double類(lèi)型 printf("nThe value of the expression is %lf.n", $1);*/%token NUM LPAREN RPAREN ENTER %left OR%left AND%right NOT%le
30、ft PLUS MINUS%left TIMES DIVIDE END%right UMINUS BEGIN VAR %nonassoc PROGRAM%union int inum; double fnum; char * id;% /* 這樣寫(xiě)prog可以讓分析器每次讀入一行進(jìn)行分析,下一行重新分析expr prog : prog exprp | exprp ;exprp : expr ENTER printf("1 表示 true;0 表示 false %lf.n", $1);shuchu($1); ;expr : expr PLUS expr$ = $1 + $3;
31、| expr MINUS expr $ = $1 - $3;| expr TIMES expr $ = $1 * $3;| expr DIVIDE expr $ = $1 / $3;| LPAREN expr RPAREN $ = $2;| MINUS expr $ = -$2;| NUM $ = $1; | expr OR expr $=panduan($1*$1+$3*$3); | expr AND expr $=panduan($1*$3); | NOT expr $=panduan2($2);*/prog : PROGRAM biaoshifu fenpro |fenpro |biao
32、shifu ;biaoshifu:ID ;fenpro :blsm BEGIN yjb END |blsm printf("BEGIN n "); |yjb printf("END n"); ;blsm: VAR blsmb printf("VAR"); |blsmb ;blsmb:blb MH leixing |blb MH leixing blsmb |blb |leixing ;leixing:INTEGER printf("INTEGER"); |REAL printf("REAL");
33、 ;blb:bl$ = $1; |bl DH blb ;bl:NUM $ = $1; ;yjb:yj |yj yjb ;yj:fzyj |tjyj |whileyj |fhyj ;fzyj:bl FZ bds $ = $3; |bl |bds ;bds:guanxi $ = $1; |suanshu $ = $1; ;tjyj:IF guanxi THEN yj ELSE yj |guanxi |yj ;whileyj:WHILE guanxi DO yj printf("WHILE"); |guanxiprintf("DO"); |yj ;fhyj:B
34、EGIN yjb ENDprintf("BEGIN"); |yjb printf("END"); ;suanshu:xiang |suanshu PLUS suanshu $ = $1 + $3; |suanshu MINUS xiang$ = $1 - $3; ;xiang:yinshi |xiang*yinshi$ = $1 * $3; |xinag/yinshi$ = $1 / $3; ;yinshi:bl$ = $1; |NUM$ = $1; |LPAREN suanshu RPAREN $ = $2; ;guanxi:suanshu LT su
35、anshu $=bijiao1($1,$3); |suanshu GT suanshu $=bijiao2($1,$3); |suanshu LQ suanshu $=bijiao3($1,$3); |suanshu GQ suanshu $=bijiao4($1,$3); |suanshu EQ suanshu $=bijiao5($1,$3); |suanshu NQ suanshu $=bijiao6($1,$3); ;%int main()yyparse();return 0;%#include ""#include <> int yywrap(void
36、) return 1;#define LT1#defineLE2#define GT3#defineGE4#defineEQ5#define NE6#define IF10#define THEN 11#define ELSE 12#define WHILE18#defineDO19#define ID 20#define RELOP 22#define NEWLINE 23#define ERRORCHAR 24%ws t+digit 0-9inumdigit+fnum digit*.digit+letterA-Za-zid_|letter(letter|digit)*%s COMMENT%
37、inum sscanf(yytext, "%lf", &yylval); return INUM;fnumsscanf(yytext, "%lf", &yylval); return FNUM;"+"return PLUS;"*"return TIMES;"-"return MINUS;"/"return DIVIDE;"("return LPAREN;")"return RPAREN;"or" re
38、turn OR;"and" return AND;"not" return NOT;"<"return LT;"<="return LE;">"return GT;">="return GE;"=" return EQ;"!=" return NQ;":=" return FZ;":" return MH;"," return DH;"&quo
39、t; teturn FH;ws;"n"return ENTER;. printf("nLEX:ERROR! c=%sn", yytext);<INITIAL>"/*"BEGIN COMMENT;ECHO;<COMMENT>"*/"BEGIN INITIAL;ECHO;<INITIAL>whilereturn (WHILE);<INITIAL>do return (DO);<INITIAL>PROGRAM return (PROGRAM);<INITI
40、AL>end return (END);<INITIAL>VAR return (VAR);<INITIAL>if return (IF);<INITIAL>then return (THEN);<INITIAL>else return (ELSE);<INITIAL>id return (ID);%int panduan(double a)if(a!=0) a=1;return a;int panduan2(double a)if(a=0) a=1;else if(a!=0) a=0;return a;int shuchu(d
41、ouble a)if(a=0)printf("false");else if (a!=0)printf("true");return 1;int bijiao1(double a,double b)if(a<b)return 1;else return -1;int bijiao2(double a,double b)if(a>b)return 1;else return -1;int bijiao3(double a,double b)if(a<=b)return 1;else return -1;int bijiao4(double
42、 a,double b)if(a>=b)return 1;else return -1;int bijiao5(double a,double b)if(a=b)return 1;else return -1;int bijiao6(double a,double b)if(a!=b)return 1;else return -1;實(shí)驗(yàn)5:用Yacc設(shè)計(jì)語(yǔ)法分析器2實(shí)驗(yàn)?zāi)康模簩W(xué)習(xí)如何使用Lex和Yacc設(shè)計(jì)一個(gè)語(yǔ)法分析器,并學(xué)習(xí)如何在語(yǔ)法分析的同時(shí)生成分析樹(shù)。實(shí)驗(yàn)內(nèi)容:修改實(shí)驗(yàn)4,給產(chǎn)生式加上動(dòng)作,動(dòng)作為生成一棵語(yǔ)法分析樹(shù)。這棵分析樹(shù)的結(jié)構(gòu)可以使用或參照例子parser1中文件中定義的分
43、析樹(shù)結(jié)構(gòu)。實(shí)驗(yàn)要求:輸入為實(shí)驗(yàn)1所給語(yǔ)言寫(xiě)的源程序文件;輸出為一棵語(yǔ)法分析樹(shù),這棵語(yǔ)法分析樹(shù)的表示方法可以是這樣兩種:1.將分析樹(shù)的數(shù)據(jù)結(jié)構(gòu)打印出來(lái);2.按分析樹(shù)的結(jié)構(gòu)輸出一個(gè)C語(yǔ)言源程序文件(即輸入是所給語(yǔ)言的源程序文件,輸出為語(yǔ)義相同的C語(yǔ)言源程序文件)。在cygwin下用flex,bison和gcc工具將實(shí)驗(yàn)調(diào)試通過(guò),并且你寫(xiě)的語(yǔ)法分析器至少應(yīng)該能通過(guò)例子parser1中testcases目錄下的和兩個(gè)測(cè)試?yán)?。?shí)驗(yàn)參考:可以參考例子parser1或在它的基礎(chǔ)上進(jìn)行修改;如果你尚不能將實(shí)驗(yàn)2的詞法分析器和本實(shí)驗(yàn)的語(yǔ)法分析器鏈接起來(lái),可以暫時(shí)使用parser1給出的詞法分析器(前提是你的語(yǔ)法
44、分析器中終結(jié)符名的定義與parser1的相同)。你也可以在自己的語(yǔ)法分析器中直接使用parser1已經(jīng)提供的輸出方式(打印分析樹(shù)的數(shù)據(jù)結(jié)構(gòu)),但前提是你必須使用parser1提供的分析樹(shù)結(jié)構(gòu)()。程序代碼:%#include <>#include "" */ PROGRAM BEGINN END VAR IF WHILE DO /* 關(guān)鍵字:PROGRAM BEGIN END VAR IF WHILE Do */ THEN ELSE /* 關(guān)鍵字:THEN ELSE */ ASSIGN EQ NEQ LT LE GT GE /* 符號(hào) := = <>
45、 < <= > >= */ PLUS MINUS TIMES DIVIDE /* 符號(hào) + = * / */%start program /* 定義各個(gè)非終結(jié)符的屬性值類(lèi)型,實(shí)驗(yàn)8需要修改此處 */%type <prog> program%type <decl> bianliangbiao declist vardec%type <stms> fuhe xunhuan tiaojian fuzhi yuju stmts%type <exp> exp yinshi xiang suanshu %type <bexp&g
46、t; guanxi%program:PROGRAM ID SEMICOLON vardec BEGINN stmts END PERIODprogram = A_Prog(EM_tokPos, $2, $4, $6);vardec : VAR declist $ = $2;declist : bianliangbiao COLON INTEGER SEMICOLON $ = A_DecList(A_VarDec(EM_tokPos, $1, T_int), NULL); | bianliangbiao COLON INTEGER SEMICOLON declist $ = A_DecList(
47、A_VarDec(EM_tokPos, $1, T_int), $5); | bianliangbiao COLON REAL SEMICOLON $ = A_DecList(A_VarDec(EM_tokPos, $1, T_real), NULL); | bianliangbiao COLON REAL SEMICOLON declist $ = A_DecList(A_VarDec(EM_tokPos, $1, T_real), $5); bianliangbiao : ID $ = A_VarList(A_Id(EM_tokPos, $1), NULL); | ID COMMA bianliangbiao $ = A_VarList(A_Id(EM_tokPos, $1), $3); ; stmts : yuju $ = A_StmList($1,NULL); | yuju SEMICOLON stmts $ = A_StmList($1,$3); ;yuju : fuzhi $ = $1; | tiaojian $ = $1
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025至2030年全功能精密線材測(cè)試分析儀項(xiàng)目投資價(jià)值分析報(bào)告
- 2025年外圍驅(qū)動(dòng)器項(xiàng)目可行性研究報(bào)告
- 2025年發(fā)泡PE板項(xiàng)目可行性研究報(bào)告
- 2025至2030年汽油機(jī)械叉車(chē)項(xiàng)目投資價(jià)值分析報(bào)告
- 抗寄生蟲(chóng)病藥項(xiàng)目績(jī)效評(píng)估報(bào)告
- 襯衫、夾克生產(chǎn)項(xiàng)目可行性研究報(bào)告申請(qǐng)備案
- 2025年度新能源車(chē)輛運(yùn)輸合同
- 2025年度建筑防水工程人才培訓(xùn)合同
- 2025年度商業(yè)信用貸款合同公證與風(fēng)險(xiǎn)評(píng)估協(xié)議
- 2025年度PPE產(chǎn)品國(guó)際標(biāo)準(zhǔn)符合性審核合同
- 中國(guó)人口研究專題報(bào)告-中國(guó)2025-2100年人口預(yù)測(cè)與政策建議-西南財(cái)經(jīng)大學(xué)x清華大學(xué)-202501
- 2025年度廚師職業(yè)培訓(xùn)學(xué)院合作辦學(xué)合同4篇
- 《組織行為學(xué)》第1章-組織行為學(xué)概述
- 25版六年級(jí)寒假特色作業(yè)
- 浙江省杭州市9+1高中聯(lián)盟2025屆高三一診考試英語(yǔ)試卷含解析
- 市場(chǎng)營(yíng)銷(xiāo)試題(含參考答案)
- 2024年山東省泰安市高考物理一模試卷(含詳細(xì)答案解析)
- 護(hù)理指南手術(shù)器械臺(tái)擺放
- 腫瘤患者管理
- 四川省成都市高新區(qū)2024年七年級(jí)上學(xué)期語(yǔ)文期末試卷【含答案】
- 2025年中國(guó)航空部附件維修行業(yè)市場(chǎng)競(jìng)爭(zhēng)格局、行業(yè)政策及需求規(guī)模預(yù)測(cè)報(bào)告
評(píng)論
0/150
提交評(píng)論