diff --git a/Code/a.txt b/Code/a.txt index 14ce08a1f7034a19e15cfea83d3ab36d0d7c3ead..60f81b389f3957cca8ca3c5899b9b624912211e5 100644 --- a/Code/a.txt +++ b/Code/a.txt @@ -1,1088 +1,52 @@ -Program (3) - ExtDefList (3) - ExtDef (3) - Specifier (3) - TYPE: int - ExtDecList (3) - VarDec (3) - ID: global1 - COMMA - ExtDecList (3) - VarDec (3) - ID: global2 - SEMI - ExtDefList (5) - ExtDef (5) - Specifier (5) - TYPE: int - SEMI - ExtDefList (8) - ExtDef (8) - Specifier (8) - StructSpecifier (8) - STRUCT - LC - DefList (10) - Def (10) - Specifier (10) - TYPE: int - DecList (10) - Dec (10) - VarDec (10) - ID: field1 - SEMI - RC - SEMI - ExtDefList (13) - ExtDef (13) - Specifier (13) - StructSpecifier (13) - STRUCT - LC - DefList (15) - Def (15) - Specifier (15) - TYPE: int - DecList (15) - Dec (15) - VarDec (15) - ID: field1 - SEMI - DefList (16) - Def (16) - Specifier (16) - TYPE: float - DecList (16) - Dec (16) - VarDec (16) - ID: field2 - SEMI - RC - ExtDecList (17) - VarDec (17) - ID: s1 - COMMA - ExtDecList (17) - VarDec (17) - ID: s2 - SEMI - ExtDefList (20) - ExtDef (20) - Specifier (20) - StructSpecifier (20) - STRUCT - OptTag (20) - ID: Complex - LC - DefList (22) - Def (22) - Specifier (22) - TYPE: int - DecList (22) - Dec (22) - VarDec (22) - ID: real - SEMI - DefList (23) - Def (23) - Specifier (23) - TYPE: int - DecList (23) - Dec (23) - VarDec (23) - ID: imag - SEMI - RC - ExtDecList (24) - VarDec (24) - ID: c1 - COMMA - ExtDecList (24) - VarDec (24) - ID: c2 - COMMA - ExtDecList (24) - VarDec (24) - VarDec (24) - ID: carray - LB - INT: 100 - RB - COMMA - ExtDecList (24) - VarDec (24) - VarDec (24) - VarDec (24) - VarDec (24) - ID: multi_dim - LB - INT: 1 - RB - LB - INT: 2 - RB +Program (1) + ExtDefList (1) + ExtDef (1) + Specifier (1) + StructSpecifier (1) + STRUCT + OptTag (1) + ID: asda + LC + DefList (3) + Def (3) + Specifier (3) + TYPE: int + DecList (3) + Dec (3) + VarDec (3) + VarDec (3) + VarDec (3) + VarDec (3) + ID: a LB - INT: 3 + INT: 23 RB + LB + INT: 345 + RB + LB + INT: 43 + RB SEMI - ExtDefList (27) - ExtDef (27) - Specifier (27) - StructSpecifier (27) - STRUCT - OptTag (27) - ID: Complex_pair - LC - DefList (29) - Def (29) - Specifier (29) - StructSpecifier (29) - STRUCT - Tag (29) - ID: Complex - DecList (29) - Dec (29) - VarDec (29) - ID: x - SEMI - DefList (30) - Def (30) - Specifier (30) - StructSpecifier (30) - STRUCT - Tag (30) - ID: Complex - DecList (30) - Dec (30) - VarDec (30) - ID: y - SEMI - DefList (31) - Def (31) - Specifier (31) - StructSpecifier (31) - STRUCT - OptTag (31) - ID: withname - LC - DefList (33) - Def (33) - Specifier (33) - TYPE: int - DecList (33) - Dec (33) - VarDec (33) - ID: field - SEMI - RC - DecList (34) - Dec (34) - VarDec (34) - ID: s1 - SEMI - DefList (35) - Def (35) - Specifier (35) - StructSpecifier (35) - STRUCT - LC - DefList (37) - Def (37) - Specifier (37) - TYPE: float - DecList (37) - Dec (37) - VarDec (37) - ID: field - SEMI - RC - DecList (38) - Dec (38) - VarDec (38) - ID: s2 - SEMI - RC + DefList (4) + Def (4) + Specifier (4) + TYPE: float + DecList (4) + Dec (4) + VarDec (4) + ID: b SEMI - ExtDefList (43) - ExtDef (43) - Specifier (43) - TYPE: int - FunDec (43) - ID: main - LP - RP - CompSt (44) - LC - DefList (46) - Def (46) - Specifier (46) - TYPE: int - DecList (46) - Dec (46) - VarDec (46) - ID: a - SEMI - DefList (47) - Def (47) - Specifier (47) - TYPE: int - DecList (47) - Dec (47) - VarDec (47) - VarDec (47) - VarDec (47) - ID: barray - LB - INT: 10 - RB - LB - INT: 2 - RB - SEMI - DefList (48) - Def (48) - Specifier (48) - TYPE: int - DecList (48) - Dec (48) - VarDec (48) - ID: i - ASSIGNOP - Exp (48) - INT: 0 - SEMI - DefList (49) - Def (49) - Specifier (49) - TYPE: int - DecList (49) - Dec (49) - VarDec (49) - ID: a1 - COMMA - DecList (49) - Dec (49) - VarDec (49) - ID: a2 - COMMA - DecList (49) - Dec (49) - VarDec (49) - ID: a3 - SEMI - DefList (50) - Def (50) - Specifier (50) - StructSpecifier (50) - STRUCT - Tag (50) - ID: Complex - DecList (50) - Dec (50) - VarDec (50) - ID: c - SEMI - DefList (51) - Def (51) - Specifier (51) - StructSpecifier (51) - STRUCT - Tag (51) - ID: Complex_pair - DecList (51) - Dec (51) - VarDec (51) - ID: cp - SEMI - StmtList (54) - Stmt (54) - Exp (54) - ID: nonexist_func - LP - Args (54) - Exp (54) - INT: 1 - COMMA - Args (54) - Exp (54) - INT: 2 - COMMA - Args (54) - Exp (54) - ID: a - COMMA - Args (54) - Exp (54) - Exp (54) - ID: barray - LB - Exp (54) - INT: 1 - RB - COMMA - Args (54) - Exp (54) - ID: barray - RP - SEMI - StmtList (55) - Stmt (55) - Exp (55) - INT: 1 - SEMI - StmtList (56) - Stmt (56) - CompSt (56) - LC - DefList (57) - Def (57) - Specifier (57) - TYPE: int - DecList (57) - Dec (57) - VarDec (57) - ID: x - SEMI - RC - StmtList (60) - Stmt (60) - Exp (60) - Exp (60) - ID: true - ASSIGNOP - Exp (60) - INT: 1 - SEMI - StmtList (61) - Stmt (61) - Exp (61) - Exp (61) - ID: false - ASSIGNOP - Exp (61) - Exp (61) - ID: true - MINUS - Exp (61) - INT: 1 - SEMI - StmtList (62) - Stmt (62) - IF - LP - Exp (62) - ID: true - RP - Stmt (62) - CompSt (62) - LC - StmtList (63) - Stmt (63) - RETURN - Exp (63) - ID: false - SEMI - RC - StmtList (67) - Stmt (67) - IF - LP - Exp (67) - Exp (67) - ID: a - AND - Exp (67) - ID: true - RP - Stmt (68) - IF - LP - Exp (68) - Exp (68) - ID: a - AND - Exp (68) - ID: false - RP - Stmt (69) - RETURN - Exp (69) - ID: true - SEMI - ELSE - Stmt (71) - RETURN - Exp (71) - ID: which_if - SEMI - StmtList (73) - Stmt (73) - WHILE - LP - Exp (73) - Exp (73) - ID: i - RELOP - Exp (73) - INT: 0 - RP - Stmt (73) - CompSt (73) - LC - StmtList (74) - Stmt (74) - Exp (74) - Exp (74) - ID: i - ASSIGNOP - Exp (74) - Exp (74) - ID: i - PLUS - Exp (74) - INT: 1 - SEMI - StmtList (75) - Stmt (75) - IF - LP - Exp (75) - ID: some_condition - LP - Args (75) - Exp (75) - INT: 1 - COMMA - Args (75) - Exp (75) - INT: 2 - COMMA - Args (75) - Exp (75) - INT: 3 - RP - RP - Stmt (75) - CompSt (75) - LC - StmtList (76) - Stmt (76) - Exp (76) - ID: do_nothing - LP - RP - SEMI - RC - RC - StmtList (81) - Stmt (81) - Exp (81) - Exp (81) - Exp (81) - ID: c - DOT - ID: imag - ASSIGNOP - Exp (81) - INT: 1 - SEMI - StmtList (82) - Stmt (82) - Exp (82) - Exp (82) - Exp (82) - ID: c - DOT - ID: real - ASSIGNOP - Exp (82) - INT: 2 - SEMI - StmtList (83) - Stmt (83) - Exp (83) - Exp (83) - Exp (83) - ID: c - DOT - ID: real - ASSIGNOP - Exp (83) - Exp (83) - Exp (83) - ID: c - DOT - ID: imag - PLUS - Exp (83) - Exp (83) - ID: c - DOT - ID: real - SEMI - StmtList (84) - Stmt (84) - Exp (84) - Exp (84) - Exp (84) - Exp (84) - ID: cp - DOT - ID: s1 - DOT - ID: field - ASSIGNOP - Exp (84) - INT: 1 - SEMI - StmtList (85) - Stmt (85) - Exp (85) - Exp (85) - Exp (85) - Exp (85) - Exp (85) - Exp (85) - ID: multi_dim - LB - Exp (85) - INT: 0 - RB - LB - Exp (85) - ID: some_func - LP - RP - RB - LB - Exp (85) - INT: 0 - RB - DOT - ID: real - ASSIGNOP - Exp (85) - INT: 1 - SEMI - StmtList (88) - Stmt (88) - Exp (88) - Exp (88) - ID: non_exist_bool - ASSIGNOP - Exp (88) - Exp (88) - Exp (88) - Exp (88) - ID: true - AND - Exp (88) - ID: false - OR - Exp (88) - Exp (88) - Exp (88) - Exp (88) - LP - Exp (88) - Exp (88) - INT: 1 - PLUS - Exp (88) - INT: 2 - RP - RELOP - Exp (88) - LP - Exp (88) - Exp (88) - INT: 1 - PLUS - Exp (88) - Exp (88) - INT: 2 - STAR - Exp (88) - INT: 3 - RP - RELOP - Exp (89) - Exp (89) - ID: barray - LB - Exp (89) - INT: 7 - RB - RELOP - Exp (89) - Exp (89) - ID: c - DOT - ID: imag - ASSIGNOP - Exp (89) - Exp (89) - LP - Exp (89) - Exp (89) - NOT - Exp (89) - ID: a - DIV - Exp (89) - INT: 8 - RP - RELOP - Exp (89) - INT: 9 - SEMI - StmtList (92) - Stmt (92) - Exp (92) - Exp (92) - ID: a - ASSIGNOP - Exp (92) - MINUS - Exp (92) - MINUS - Exp (92) - MINUS - Exp (92) - MINUS - Exp (92) - ID: b - SEMI - StmtList (93) - Stmt (93) - Exp (93) - Exp (93) - ID: a - ASSIGNOP - Exp (93) - NOT - Exp (93) - NOT - Exp (93) - NOT - Exp (93) - NOT - Exp (93) - NOT - Exp (93) - ID: b - SEMI - StmtList (94) - Stmt (94) - Exp (94) - Exp (94) - ID: a - ASSIGNOP - Exp (94) - Exp (94) - Exp (94) - ID: b - STAR - Exp (94) - ID: c - STAR - Exp (94) - ID: d - SEMI - StmtList (95) - Stmt (95) - Exp (95) - Exp (95) - ID: a - ASSIGNOP - Exp (95) - Exp (95) - Exp (95) - ID: b - DIV - Exp (95) - ID: c - DIV - Exp (95) - ID: d - SEMI - StmtList (96) - Stmt (96) - Exp (96) - Exp (96) - ID: a - ASSIGNOP - Exp (96) - Exp (96) - Exp (96) - ID: b - PLUS - Exp (96) - ID: c - PLUS - Exp (96) - ID: d - SEMI - StmtList (97) - Stmt (97) - Exp (97) - Exp (97) - ID: a - ASSIGNOP - Exp (97) - Exp (97) - Exp (97) - ID: b - MINUS - Exp (97) - ID: c - MINUS - Exp (97) - ID: d - SEMI - StmtList (98) - Stmt (98) - Exp (98) - Exp (98) - ID: a - ASSIGNOP - Exp (98) - Exp (98) - Exp (98) - ID: b - RELOP - Exp (98) - ID: c - RELOP - Exp (98) - ID: d - SEMI - StmtList (99) - Stmt (99) - Exp (99) - Exp (99) - ID: a - ASSIGNOP - Exp (99) - Exp (99) - Exp (99) - ID: b - RELOP - Exp (99) - ID: c - RELOP - Exp (99) - ID: d - SEMI - StmtList (100) - Stmt (100) - Exp (100) - Exp (100) - ID: a - ASSIGNOP - Exp (100) - Exp (100) - Exp (100) - ID: b - RELOP - Exp (100) - ID: c - RELOP - Exp (100) - ID: d - SEMI - StmtList (101) - Stmt (101) - Exp (101) - Exp (101) - ID: a - ASSIGNOP - Exp (101) - Exp (101) - Exp (101) - ID: b - RELOP - Exp (101) - ID: c - RELOP - Exp (101) - ID: d - SEMI - StmtList (102) - Stmt (102) - Exp (102) - Exp (102) - ID: a - ASSIGNOP - Exp (102) - Exp (102) - Exp (102) - ID: b - RELOP - Exp (102) - ID: c - RELOP - Exp (102) - ID: d - SEMI - StmtList (103) - Stmt (103) - Exp (103) - Exp (103) - ID: a - ASSIGNOP - Exp (103) - Exp (103) - Exp (103) - ID: b - RELOP - Exp (103) - ID: c - RELOP - Exp (103) - ID: d - SEMI - StmtList (104) - Stmt (104) - Exp (104) - Exp (104) - ID: a - ASSIGNOP - Exp (104) - Exp (104) - Exp (104) - ID: b - AND - Exp (104) - ID: c - AND - Exp (104) - ID: d - SEMI - StmtList (105) - Stmt (105) - Exp (105) - Exp (105) - ID: a - ASSIGNOP - Exp (105) - Exp (105) - Exp (105) - ID: b - OR - Exp (105) - ID: c - OR - Exp (105) - ID: d - SEMI - StmtList (106) - Stmt (106) - Exp (106) - Exp (106) - ID: a - ASSIGNOP - Exp (106) - Exp (106) - ID: b - ASSIGNOP - Exp (106) - Exp (106) - ID: c - ASSIGNOP - Exp (106) - Exp (106) - ID: d - ASSIGNOP - Exp (106) - INT: 1 - SEMI - StmtList (108) - Stmt (108) - RETURN - Exp (108) - ID: nonexist_func - LP - RP - SEMI - RC - ExtDefList (119) - ExtDef (119) - Specifier (119) - TYPE: int - FunDec (119) - ID: func - LP - VarList (119) - ParamDec (119) - Specifier (119) - TYPE: int - VarDec (119) - ID: ival - COMMA - VarList (119) - ParamDec (119) - Specifier (119) - TYPE: float - VarDec (119) - ID: fval - COMMA - VarList (119) - ParamDec (119) - Specifier (119) - TYPE: float - VarDec (119) - VarDec (119) - ID: arr - LB - INT: 10 - RB - RP - CompSt (120) - LC - DefList (121) - Def (121) - Specifier (121) - TYPE: int - DecList (121) - Dec (121) - VarDec (121) - ID: a - ASSIGNOP - Exp (121) - INT: 1 - SEMI - RC - ExtDefList (126) - ExtDef (126) - Specifier (126) - TYPE: int - FunDec (126) - ID: extra - LP - RP - CompSt (127) - LC - DefList (128) - Def (128) - Specifier (128) - TYPE: int - DecList (128) - Dec (128) - VarDec (128) - ID: oct1 - ASSIGNOP - Exp (128) - INT: 83 - SEMI - DefList (129) - Def (129) - Specifier (129) - TYPE: int - DecList (129) - Dec (129) - VarDec (129) - ID: oct2 - ASSIGNOP - Exp (129) - INT: 8 - SEMI - DefList (130) - Def (130) - Specifier (130) - TYPE: int - DecList (130) - Dec (130) - VarDec (130) - ID: oct3 - ASSIGNOP - Exp (130) - MINUS - Exp (130) - INT: 7 - SEMI - DefList (131) - Def (131) - Specifier (131) - TYPE: int - DecList (131) - Dec (131) - VarDec (131) - ID: hex1 - ASSIGNOP - Exp (131) - INT: 63 - SEMI - DefList (132) - Def (132) - Specifier (132) - TYPE: int - DecList (132) - Dec (132) - VarDec (132) - ID: hex2 - ASSIGNOP - Exp (132) - INT: 11259375 - SEMI - DefList (133) - Def (133) - Specifier (133) - TYPE: int - DecList (133) - Dec (133) - VarDec (133) - ID: hex3 - ASSIGNOP - Exp (133) - INT: 11259375 - SEMI - DefList (134) - Def (134) - Specifier (134) - TYPE: float - DecList (134) - Dec (134) - VarDec (134) - ID: f1 - ASSIGNOP - Exp (134) - FLOAT: 0.000105 - SEMI - DefList (135) - Def (135) - Specifier (135) - TYPE: float - DecList (135) - Dec (135) - VarDec (135) - ID: f2 - ASSIGNOP - Exp (135) - FLOAT: inf - SEMI - DefList (136) - Def (136) - Specifier (136) - TYPE: float - DecList (136) - Dec (136) - VarDec (136) - ID: f3 - ASSIGNOP - Exp (136) - FLOAT: inf - SEMI - DefList (137) - Def (137) - Specifier (137) - TYPE: float - DecList (137) - Dec (137) - VarDec (137) - ID: f4 - ASSIGNOP - Exp (137) - FLOAT: 699999977472.000000 - SEMI - RC + RC + ExtDecList (5) + VarDec (5) + VarDec (5) + ID: s1 + LB + INT: 3 + RB + COMMA + ExtDecList (5) + VarDec (5) + ID: s2 + SEMI diff --git a/Code/data.c b/Code/data.c index 1c19a7dab175f721a2fb89fb9b0449954ba41e3c..deecd7cbaa1b1ec3c883395434fac35c61065543 100644 --- a/Code/data.c +++ b/Code/data.c @@ -2,7 +2,7 @@ #include "debug.h" static MultiwayTree_t * MultiwayTree_init(MultiwayTree_t * t) { - t->root = tree->Node_alloc("begin",0); +// t->root = tree->Node_alloc("begin",0); return t; } @@ -14,6 +14,7 @@ static Node_t * MultiwayTree_leftmostinsert(Node_t * cur ,Node_t * node) { cur->lchild = node; node->right = lastleft; lastleft->left = node; + node->left = NULL; } return cur; } @@ -28,6 +29,7 @@ static Node_t * MultiwayTree_rightmostinsert(Node_t * cur ,Node_t * node) { cur->rchild = node; node->left = lastright; lastright->right = node; + node->right = NULL; } return cur; } @@ -39,17 +41,14 @@ static Node_t * MultiwayTree_remove(Node_t * cur ,Node_t * node) { static Node_t * MultiwayTree_Node_alloc(char * content,int line) { Node_t * new_node = (Node_t*)malloc(sizeof(Node_t)); + //char * newstr = (char *)malloc(strlen(content)+5); - char * newstr = (char *)malloc(strlen(content)+5); - - new_node->text[0] = 0; + memset(new_node->text,0,NAME_LENGTH); // Log("%s %d",content,line); - strcpy(newstr,content); - new_node->content = newstr; + strcpy(new_node->content,content); new_node->line = line; - new_node->type = NONE; - new_node->rchild = new_node->lchild = new_node->right = new_node->left = NULL; + new_node->rchild = new_node->lchild = new_node->right = new_node->left = NULL; return new_node; } diff --git a/Code/data.h b/Code/data.h index 71aad0a50311ddca2036e534cba8ba2c3948b0d4..dce2faf18a01a78bedb1631ab21467e3a6e1ee38 100644 --- a/Code/data.h +++ b/Code/data.h @@ -15,12 +15,9 @@ //璇硶鏍戠粨鏋� typedef struct Tree_node_t { - char * content; - enum { - NONE,Sentinel, - }type; + char content[NAME_LENGTH]; int line; - char text[32]; + char text[NAME_LENGTH]; struct Tree_node_t * lchild,* rchild,* left,* right; }Node_t; diff --git a/Code/lex.yy.c b/Code/lex.yy.c index 94b77ff733867140565b2c5f5655bdbe3119859c..c8e8b398718e392fe97820e88c2493892448858c 100644 --- a/Code/lex.yy.c +++ b/Code/lex.yy.c @@ -1,6 +1,6 @@ -#line 1 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/lex.yy.c" +#line 1 "./lex.yy.c" -#line 3 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/lex.yy.c" +#line 3 "./lex.yy.c" #define YY_INT_ALIGNED short int @@ -523,8 +523,8 @@ int yy_flex_debug = 0; #define YY_MORE_ADJ 0 #define YY_RESTORE_YY_MORE_OFFSET char *yytext; -#line 1 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/lexical.l" -#line 2 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/lexical.l" +#line 1 "./lexical.l" +#line 2 "./lexical.l" #include <stdio.h> #include "debug.h" #include "syntax.tab.h" @@ -535,8 +535,8 @@ char *yytext; extern int syntax; int last_lineno = 0,cur_lineno = 0; static Node_t* add_node_text(char * content,char *text,int len); -#line 538 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/lex.yy.c" -#line 539 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/lex.yy.c" +#line 538 "./lex.yy.c" +#line 539 "./lex.yy.c" #define INITIAL 0 @@ -753,9 +753,9 @@ YY_DECL } { -#line 44 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/lexical.l" +#line 44 "./lexical.l" -#line 758 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/lex.yy.c" +#line 758 "./lex.yy.c" while ( /*CONSTCOND*/1 ) /* loops until end-of-file is reached */ { @@ -814,163 +814,163 @@ do_action: /* This label is used only to access EOF actions. */ case 1: YY_RULE_SETUP -#line 45 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/lexical.l" +#line 45 "./lexical.l" { ELEMENT("STRUCT"); return STRUCT; } YY_BREAK case 2: YY_RULE_SETUP -#line 46 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/lexical.l" +#line 46 "./lexical.l" { ELEMENT("RETURN"); return RETURN; } YY_BREAK case 3: YY_RULE_SETUP -#line 47 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/lexical.l" +#line 47 "./lexical.l" { ELEMENT("IF"); return IF; } YY_BREAK case 4: YY_RULE_SETUP -#line 48 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/lexical.l" +#line 48 "./lexical.l" { ELEMENT("ELSE"); return ELSE; } YY_BREAK case 5: YY_RULE_SETUP -#line 49 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/lexical.l" +#line 49 "./lexical.l" { ELEMENT("WHILE"); return WHILE; } YY_BREAK case 6: YY_RULE_SETUP -#line 50 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/lexical.l" +#line 50 "./lexical.l" { ELEMENT("TYPE"); return TYPE; } YY_BREAK case 7: YY_RULE_SETUP -#line 51 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/lexical.l" +#line 51 "./lexical.l" { ELEMENT("INT"); return INT;} YY_BREAK case 8: YY_RULE_SETUP -#line 52 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/lexical.l" +#line 52 "./lexical.l" { ELEMENT("FLOAT"); return FLOAT;} YY_BREAK case 9: YY_RULE_SETUP -#line 53 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/lexical.l" +#line 53 "./lexical.l" { ELEMENT("ID"); return ID; } YY_BREAK case 10: YY_RULE_SETUP -#line 54 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/lexical.l" +#line 54 "./lexical.l" { ELEMENT("SEMI"); return SEMI;} YY_BREAK case 11: YY_RULE_SETUP -#line 55 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/lexical.l" +#line 55 "./lexical.l" { ELEMENT("COMMA"); return COMMA;} YY_BREAK case 12: YY_RULE_SETUP -#line 56 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/lexical.l" +#line 56 "./lexical.l" { ELEMENT("ASSIGNOP"); return ASSIGNOP;} YY_BREAK case 13: YY_RULE_SETUP -#line 57 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/lexical.l" +#line 57 "./lexical.l" { ELEMENT("RELOP"); return RELOP;} YY_BREAK case 14: YY_RULE_SETUP -#line 58 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/lexical.l" +#line 58 "./lexical.l" { ELEMENT("PLUS"); return PLUS;} YY_BREAK case 15: YY_RULE_SETUP -#line 59 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/lexical.l" +#line 59 "./lexical.l" { ELEMENT("MINUS"); return MINUS;} YY_BREAK case 16: YY_RULE_SETUP -#line 60 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/lexical.l" +#line 60 "./lexical.l" { ELEMENT("STAR"); return STAR;} YY_BREAK case 17: YY_RULE_SETUP -#line 61 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/lexical.l" +#line 61 "./lexical.l" { ELEMENT("DIV"); return DIV;} YY_BREAK case 18: YY_RULE_SETUP -#line 62 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/lexical.l" +#line 62 "./lexical.l" { ELEMENT("AND"); return AND;} YY_BREAK case 19: YY_RULE_SETUP -#line 63 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/lexical.l" +#line 63 "./lexical.l" { ELEMENT("OR"); return OR;} YY_BREAK case 20: YY_RULE_SETUP -#line 64 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/lexical.l" +#line 64 "./lexical.l" { ELEMENT("DOT"); return DOT;} YY_BREAK case 21: YY_RULE_SETUP -#line 65 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/lexical.l" +#line 65 "./lexical.l" { ELEMENT("NOT"); return NOT;} YY_BREAK case 22: YY_RULE_SETUP -#line 66 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/lexical.l" +#line 66 "./lexical.l" { ELEMENT("LP"); return LP;} YY_BREAK case 23: YY_RULE_SETUP -#line 67 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/lexical.l" +#line 67 "./lexical.l" { ELEMENT("RP"); return RP;} YY_BREAK case 24: YY_RULE_SETUP -#line 68 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/lexical.l" +#line 68 "./lexical.l" { ELEMENT("LB"); return LB;} YY_BREAK case 25: YY_RULE_SETUP -#line 69 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/lexical.l" +#line 69 "./lexical.l" { ELEMENT("RB"); return RB;} YY_BREAK case 26: YY_RULE_SETUP -#line 70 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/lexical.l" +#line 70 "./lexical.l" { ELEMENT("LC"); return LC;} YY_BREAK case 27: YY_RULE_SETUP -#line 71 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/lexical.l" +#line 71 "./lexical.l" { ELEMENT("RC"); return RC;} YY_BREAK case 28: YY_RULE_SETUP -#line 72 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/lexical.l" +#line 72 "./lexical.l" { strcat(linetext," ");} YY_BREAK case 29: YY_RULE_SETUP -#line 73 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/lexical.l" +#line 73 "./lexical.l" { yycolumn += 3; strcat(linetext,"\t");} YY_BREAK case 30: /* rule 30 can match eol */ YY_RULE_SETUP -#line 74 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/lexical.l" +#line 74 "./lexical.l" { yycolumn = 1; yylineno += 1; memset(linetext,0,sizeof(linetext)); } YY_BREAK case 31: YY_RULE_SETUP -#line 75 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/lexical.l" +#line 75 "./lexical.l" { char c = input(); while(c != '\n') { c = input(); } yylineno += 1; } YY_BREAK case 32: YY_RULE_SETUP -#line 76 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/lexical.l" +#line 76 "./lexical.l" { char c1 = input(),c2 = input(); if (c1 == '\n') { @@ -993,15 +993,15 @@ YY_RULE_SETUP YY_BREAK case 33: YY_RULE_SETUP -#line 95 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/lexical.l" +#line 95 "./lexical.l" { LexicalError("%s",yytext); syntax++; } YY_BREAK case 34: YY_RULE_SETUP -#line 97 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/lexical.l" +#line 97 "./lexical.l" ECHO; YY_BREAK -#line 1004 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/lex.yy.c" +#line 1004 "./lex.yy.c" case YY_STATE_EOF(INITIAL): yyterminate(); @@ -2006,7 +2006,7 @@ void yyfree (void * ptr ) #define YYTABLES_NAME "yytables" -#line 97 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/lexical.l" +#line 97 "./lexical.l" extern int syntax; diff --git a/Code/main.c b/Code/main.c index 1850dab83160cec1329166fbbc4a9422b935739c..f4193ecd92a5f4831bd2bda9beda8ceade91fc3e 100755 --- a/Code/main.c +++ b/Code/main.c @@ -9,7 +9,7 @@ void yyerror(char* s); int syntax = 0; extern int yycolumn,yylineno; -void end_free(); +static void end_free(); int main(int argc,char *argv[]) { @@ -40,15 +40,23 @@ int main(int argc,char *argv[]) { test->main(); } end_free(); -#ifndef FINAL - if(syntax != 0) - tree->traverse(tree->root,0); -#endif } return 0; } -void end_free() { + +static void free_Traverse(Node_t * cur) { + if (cur == NULL) return; + Node_t * child = cur->lchild, * temp; + while (child != NULL) { + temp = child->right; + free_Traverse(child); + child = temp; + } + free(cur); +} + +static void end_free() { for(int i = 0;i < symbol_table->table_size;i++) { if(symbol_table->table[i]) { free(symbol_table->table[i]->head.name); @@ -56,4 +64,6 @@ void end_free() { free(symbol_table->table[i]); } } -} \ No newline at end of file + free(symbol_table->table); + free_Traverse(tree->root); +} diff --git a/Code/parser b/Code/parser index 95046cc4bacb32f6956cfa194ae1be30d984f4e8..8512791898f9c61de7cc072c92f7306fa95136ab 100755 Binary files a/Code/parser and b/Code/parser differ diff --git a/Code/syntax.tab.c b/Code/syntax.tab.c index f4495d2d77fb36d827669756bfc85c2bb863cb3b..b046cbd9045206a91572c7c6e3676ee2f65a1b24 100644 --- a/Code/syntax.tab.c +++ b/Code/syntax.tab.c @@ -67,7 +67,7 @@ /* First part of user prologue. */ -#line 1 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.y" +#line 1 "./syntax.y" int yycolumn = 1; char linetext[128]; @@ -78,7 +78,7 @@ yycolumn += yyleng; //#define YYDEBUG 1 //int yydebug = 1; -#line 13 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.y" +#line 13 "./syntax.y" #include <stdio.h> #include "lex.yy.c" @@ -93,7 +93,7 @@ extern int syntax; -#line 97 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.tab.c" +#line 97 "./syntax.tab.c" # ifndef YY_CAST # ifdef __cplusplus @@ -1367,457 +1367,457 @@ yyreduce: switch (yyn) { case 2: /* Program: ExtDefList */ -#line 105 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.y" +#line 105 "./syntax.y" { tree->root = (yyval.node) = Operator((yyval.node),"Program",(yyloc).first_line,1,(yyvsp[0].node)); } -#line 1373 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.tab.c" +#line 1373 "./syntax.tab.c" break; case 3: /* ExtDefList: ExtDef ExtDefList */ -#line 107 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.y" +#line 107 "./syntax.y" { (yyval.node) = Operator((yyval.node),"ExtDefList",(yyloc).first_line,2,(yyvsp[-1].node),(yyvsp[0].node)); } -#line 1379 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.tab.c" +#line 1379 "./syntax.tab.c" break; case 4: /* ExtDefList: %empty */ -#line 108 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.y" +#line 108 "./syntax.y" { (yyval.node) = NULL; } -#line 1385 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.tab.c" +#line 1385 "./syntax.tab.c" break; case 5: /* ExtDef: Specifier ExtDecList SEMI */ -#line 110 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.y" +#line 110 "./syntax.y" { (yyval.node) = Operator((yyval.node),"ExtDef",(yyloc).first_line,3,(yyvsp[-2].node),(yyvsp[-1].node),(yyvsp[0].node)); } -#line 1391 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.tab.c" +#line 1391 "./syntax.tab.c" break; case 6: /* ExtDef: Specifier SEMI */ -#line 111 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.y" +#line 111 "./syntax.y" { (yyval.node) = Operator((yyval.node),"ExtDef",(yyloc).first_line,2,(yyvsp[-1].node),(yyvsp[0].node)); } -#line 1397 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.tab.c" +#line 1397 "./syntax.tab.c" break; case 7: /* ExtDef: Specifier FunDec CompSt */ -#line 112 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.y" +#line 112 "./syntax.y" { (yyval.node) = Operator((yyval.node),"ExtDef",(yyloc).first_line,3,(yyvsp[-2].node),(yyvsp[-1].node),(yyvsp[0].node)); } -#line 1403 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.tab.c" +#line 1403 "./syntax.tab.c" break; case 8: /* ExtDef: Specifier FunDec SEMI */ -#line 113 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.y" +#line 113 "./syntax.y" { (yyval.node) = Operator((yyval.node),"ExtDef",(yyloc).first_line,3,(yyvsp[-2].node),(yyvsp[-1].node),(yyvsp[0].node)); } -#line 1409 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.tab.c" +#line 1409 "./syntax.tab.c" break; case 9: /* ExtDef: error SEMI */ -#line 114 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.y" +#line 114 "./syntax.y" { (yyval.node) = NULL;yyerror("ExtDef"); } -#line 1415 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.tab.c" +#line 1415 "./syntax.tab.c" break; case 10: /* ExtDef: Specifier error */ -#line 115 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.y" +#line 115 "./syntax.y" { (yyval.node) = NULL;yyerror("ExtDef,missing ;"); } -#line 1421 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.tab.c" +#line 1421 "./syntax.tab.c" break; case 11: /* ExtDef: Specifier error SEMI */ -#line 116 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.y" +#line 116 "./syntax.y" { (yyval.node) = NULL;yyerror("ExtDef"); } -#line 1427 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.tab.c" +#line 1427 "./syntax.tab.c" break; case 12: /* ExtDef: Specifier error CompSt */ -#line 117 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.y" +#line 117 "./syntax.y" { (yyval.node) = NULL;yyerror("ExtDef"); } -#line 1433 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.tab.c" +#line 1433 "./syntax.tab.c" break; case 13: /* ExtDecList: VarDec */ -#line 119 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.y" +#line 119 "./syntax.y" { (yyval.node) = Operator((yyval.node),"ExtDecList",(yyloc).first_line,1,(yyvsp[0].node)); } -#line 1439 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.tab.c" +#line 1439 "./syntax.tab.c" break; case 14: /* ExtDecList: VarDec COMMA ExtDecList */ -#line 120 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.y" +#line 120 "./syntax.y" { (yyval.node) = Operator((yyval.node),"ExtDecList",(yyloc).first_line,3,(yyvsp[-2].node),(yyvsp[-1].node),(yyvsp[0].node)); } -#line 1445 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.tab.c" +#line 1445 "./syntax.tab.c" break; case 15: /* Specifier: TYPE */ -#line 125 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.y" +#line 125 "./syntax.y" { (yyval.node) = Operator((yyval.node),"Specifier",(yyloc).first_line,1,(yyvsp[0].node)); } -#line 1451 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.tab.c" +#line 1451 "./syntax.tab.c" break; case 16: /* Specifier: StructSpecifier */ -#line 126 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.y" +#line 126 "./syntax.y" { (yyval.node) = Operator((yyval.node),"Specifier",(yyloc).first_line,1,(yyvsp[0].node)); } -#line 1457 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.tab.c" +#line 1457 "./syntax.tab.c" break; case 17: /* StructSpecifier: STRUCT OptTag LC DefList RC */ -#line 128 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.y" +#line 128 "./syntax.y" { (yyval.node) = Operator((yyval.node),"StructSpecifier",(yyloc).first_line,5,(yyvsp[-4].node),(yyvsp[-3].node),(yyvsp[-2].node),(yyvsp[-1].node),(yyvsp[0].node)); } -#line 1463 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.tab.c" +#line 1463 "./syntax.tab.c" break; case 18: /* StructSpecifier: STRUCT Tag */ -#line 129 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.y" +#line 129 "./syntax.y" { (yyval.node) = Operator((yyval.node),"StructSpecifier",(yyloc).first_line,2,(yyvsp[-1].node),(yyvsp[0].node)); } -#line 1469 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.tab.c" +#line 1469 "./syntax.tab.c" break; case 19: /* OptTag: ID */ -#line 131 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.y" +#line 131 "./syntax.y" { (yyval.node) = Operator((yyval.node),"OptTag",(yyloc).first_line,1,(yyvsp[0].node)); } -#line 1475 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.tab.c" +#line 1475 "./syntax.tab.c" break; case 20: /* OptTag: %empty */ -#line 132 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.y" +#line 132 "./syntax.y" { (yyval.node) = NULL; } -#line 1481 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.tab.c" +#line 1481 "./syntax.tab.c" break; case 21: /* Tag: ID */ -#line 134 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.y" +#line 134 "./syntax.y" { (yyval.node) = Operator((yyval.node),"Tag",(yyloc).first_line,1,(yyvsp[0].node)); } -#line 1487 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.tab.c" +#line 1487 "./syntax.tab.c" break; case 22: /* VarDec: ID */ -#line 138 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.y" +#line 138 "./syntax.y" { (yyval.node) = Operator((yyval.node),"VarDec",(yyloc).first_line,1,(yyvsp[0].node)); } -#line 1493 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.tab.c" +#line 1493 "./syntax.tab.c" break; case 23: /* VarDec: VarDec LB INT RB */ -#line 139 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.y" +#line 139 "./syntax.y" { (yyval.node) = Operator((yyval.node),"VarDec",(yyloc).first_line,4,(yyvsp[-3].node),(yyvsp[-2].node),(yyvsp[-1].node),(yyvsp[0].node)); } -#line 1499 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.tab.c" +#line 1499 "./syntax.tab.c" break; case 24: /* VarDec: VarDec LB error RB */ -#line 140 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.y" +#line 140 "./syntax.y" { (yyval.node) = NULL; yyerror("VarDec"); } -#line 1505 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.tab.c" +#line 1505 "./syntax.tab.c" break; case 25: /* FunDec: ID LP VarList RP */ -#line 142 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.y" +#line 142 "./syntax.y" { (yyval.node) = Operator((yyval.node),"FunDec",(yyloc).first_line,4,(yyvsp[-3].node),(yyvsp[-2].node),(yyvsp[-1].node),(yyvsp[0].node)); } -#line 1511 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.tab.c" +#line 1511 "./syntax.tab.c" break; case 26: /* FunDec: ID LP RP */ -#line 143 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.y" +#line 143 "./syntax.y" { (yyval.node) = Operator((yyval.node),"FunDec",(yyloc).first_line,3,(yyvsp[-2].node),(yyvsp[-1].node),(yyvsp[0].node)); } -#line 1517 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.tab.c" +#line 1517 "./syntax.tab.c" break; case 27: /* FunDec: ID LP error RP */ -#line 144 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.y" +#line 144 "./syntax.y" { (yyval.node) = NULL; yyerror("FunDec"); } -#line 1523 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.tab.c" +#line 1523 "./syntax.tab.c" break; case 28: /* FunDec: error LP VarList RP */ -#line 145 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.y" +#line 145 "./syntax.y" { (yyval.node) = NULL; yyerror("FunDec"); } -#line 1529 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.tab.c" +#line 1529 "./syntax.tab.c" break; case 29: /* VarList: ParamDec COMMA VarList */ -#line 147 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.y" +#line 147 "./syntax.y" { (yyval.node) = Operator((yyval.node),"VarList",(yyloc).first_line,3,(yyvsp[-2].node),(yyvsp[-1].node),(yyvsp[0].node)); } -#line 1535 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.tab.c" +#line 1535 "./syntax.tab.c" break; case 30: /* VarList: ParamDec */ -#line 148 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.y" +#line 148 "./syntax.y" { (yyval.node) = Operator((yyval.node),"VarList",(yyloc).first_line,1,(yyvsp[0].node)); } -#line 1541 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.tab.c" +#line 1541 "./syntax.tab.c" break; case 31: /* ParamDec: Specifier VarDec */ -#line 150 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.y" +#line 150 "./syntax.y" { (yyval.node) = Operator((yyval.node),"ParamDec",(yyloc).first_line,2,(yyvsp[-1].node),(yyvsp[0].node)); } -#line 1547 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.tab.c" +#line 1547 "./syntax.tab.c" break; case 32: /* CompSt: LC DefList StmtList RC */ -#line 155 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.y" +#line 155 "./syntax.y" { (yyval.node) = Operator((yyval.node),"CompSt",(yyloc).first_line,4,(yyvsp[-3].node),(yyvsp[-2].node),(yyvsp[-1].node),(yyvsp[0].node)); } -#line 1553 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.tab.c" +#line 1553 "./syntax.tab.c" break; case 33: /* CompSt: LC DefList error RC */ -#line 156 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.y" +#line 156 "./syntax.y" { (yyval.node) = NULL; yyerror("CompSt"); } -#line 1559 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.tab.c" +#line 1559 "./syntax.tab.c" break; case 34: /* StmtList: Stmt StmtList */ -#line 158 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.y" +#line 158 "./syntax.y" { (yyval.node) = Operator((yyval.node),"StmtList",(yyloc).first_line,2,(yyvsp[-1].node),(yyvsp[0].node)); } -#line 1565 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.tab.c" +#line 1565 "./syntax.tab.c" break; case 35: /* StmtList: %empty */ -#line 159 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.y" +#line 159 "./syntax.y" { (yyval.node) = NULL; } -#line 1571 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.tab.c" +#line 1571 "./syntax.tab.c" break; case 36: /* Stmt: Exp SEMI */ -#line 161 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.y" +#line 161 "./syntax.y" { (yyval.node) = Operator((yyval.node),"Stmt",(yyloc).first_line,2,(yyvsp[-1].node),(yyvsp[0].node)); } -#line 1577 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.tab.c" +#line 1577 "./syntax.tab.c" break; case 37: /* Stmt: CompSt */ -#line 162 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.y" +#line 162 "./syntax.y" { (yyval.node) = Operator((yyval.node),"Stmt",(yyloc).first_line,1,(yyvsp[0].node)); } -#line 1583 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.tab.c" +#line 1583 "./syntax.tab.c" break; case 38: /* Stmt: RETURN Exp SEMI */ -#line 163 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.y" +#line 163 "./syntax.y" { (yyval.node) = Operator((yyval.node),"Stmt",(yyloc).first_line,3,(yyvsp[-2].node),(yyvsp[-1].node),(yyvsp[0].node)); } -#line 1589 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.tab.c" +#line 1589 "./syntax.tab.c" break; case 39: /* Stmt: IF LP Exp RP Stmt */ -#line 164 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.y" +#line 164 "./syntax.y" { (yyval.node) = Operator((yyval.node),"Stmt",(yyloc).first_line,5,(yyvsp[-4].node),(yyvsp[-3].node),(yyvsp[-2].node),(yyvsp[-1].node),(yyvsp[0].node)); } -#line 1595 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.tab.c" +#line 1595 "./syntax.tab.c" break; case 40: /* Stmt: IF LP Exp RP Stmt ELSE Stmt */ -#line 165 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.y" +#line 165 "./syntax.y" { (yyval.node) = Operator((yyval.node),"Stmt",(yyloc).first_line,7,(yyvsp[-6].node),(yyvsp[-5].node),(yyvsp[-4].node),(yyvsp[-3].node),(yyvsp[-2].node),(yyvsp[-1].node),(yyvsp[0].node)); } -#line 1601 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.tab.c" +#line 1601 "./syntax.tab.c" break; case 41: /* Stmt: WHILE LP Exp RP Stmt */ -#line 166 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.y" +#line 166 "./syntax.y" { (yyval.node) = Operator((yyval.node),"Stmt",(yyloc).first_line,5,(yyvsp[-4].node),(yyvsp[-3].node),(yyvsp[-2].node),(yyvsp[-1].node),(yyvsp[0].node)); } -#line 1607 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.tab.c" +#line 1607 "./syntax.tab.c" break; case 42: /* Stmt: error SEMI */ -#line 167 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.y" +#line 167 "./syntax.y" { (yyval.node) = NULL; yyerror("1Stmt"); } -#line 1613 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.tab.c" +#line 1613 "./syntax.tab.c" break; case 43: /* Stmt: Exp error */ -#line 168 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.y" +#line 168 "./syntax.y" { (yyval.node) = NULL; yyerror("2Stmt"); } -#line 1619 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.tab.c" +#line 1619 "./syntax.tab.c" break; case 44: /* Stmt: IF LP Exp error RP Stmt */ -#line 169 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.y" +#line 169 "./syntax.y" { (yyval.node) = NULL; yyerror("3Stmt"); } -#line 1625 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.tab.c" +#line 1625 "./syntax.tab.c" break; case 45: /* Stmt: RETURN error SEMI */ -#line 170 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.y" +#line 170 "./syntax.y" { (yyval.node) = NULL; yyerror("4Stmt"); } -#line 1631 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.tab.c" +#line 1631 "./syntax.tab.c" break; case 46: /* Stmt: RETURN Exp error */ -#line 171 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.y" +#line 171 "./syntax.y" { (yyval.node) = NULL; yyerror("5Stmt"); } -#line 1637 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.tab.c" +#line 1637 "./syntax.tab.c" break; case 47: /* DefList: Def DefList */ -#line 176 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.y" +#line 176 "./syntax.y" { (yyval.node) = Operator((yyval.node),"DefList",(yyloc).first_line,2,(yyvsp[-1].node),(yyvsp[0].node)); } -#line 1643 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.tab.c" +#line 1643 "./syntax.tab.c" break; case 48: /* DefList: %empty */ -#line 177 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.y" +#line 177 "./syntax.y" { (yyval.node) = NULL; } -#line 1649 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.tab.c" +#line 1649 "./syntax.tab.c" break; case 49: /* Def: Specifier DecList SEMI */ -#line 179 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.y" +#line 179 "./syntax.y" { (yyval.node) = Operator((yyval.node),"Def",(yyloc).first_line,3,(yyvsp[-2].node),(yyvsp[-1].node),(yyvsp[0].node)); } -#line 1655 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.tab.c" +#line 1655 "./syntax.tab.c" break; case 50: /* Def: Specifier error SEMI */ -#line 180 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.y" +#line 180 "./syntax.y" { (yyval.node) = NULL; yyerror("Def"); } -#line 1661 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.tab.c" +#line 1661 "./syntax.tab.c" break; case 51: /* Def: Specifier DecList error SEMI */ -#line 181 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.y" +#line 181 "./syntax.y" { (yyval.node) = NULL; yyerror("Def"); } -#line 1667 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.tab.c" +#line 1667 "./syntax.tab.c" break; case 52: /* DecList: Dec */ -#line 183 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.y" +#line 183 "./syntax.y" { (yyval.node) = Operator((yyval.node),"DecList",(yyloc).first_line,1,(yyvsp[0].node)); } -#line 1673 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.tab.c" +#line 1673 "./syntax.tab.c" break; case 53: /* DecList: Dec COMMA DecList */ -#line 184 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.y" +#line 184 "./syntax.y" { (yyval.node) = Operator((yyval.node),"DecList",(yyloc).first_line,3,(yyvsp[-2].node),(yyvsp[-1].node),(yyvsp[0].node)); } -#line 1679 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.tab.c" +#line 1679 "./syntax.tab.c" break; case 54: /* Dec: VarDec */ -#line 186 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.y" +#line 186 "./syntax.y" { (yyval.node) = Operator((yyval.node),"Dec",(yyloc).first_line,1,(yyvsp[0].node)); } -#line 1685 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.tab.c" +#line 1685 "./syntax.tab.c" break; case 55: /* Dec: VarDec ASSIGNOP Exp */ -#line 187 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.y" +#line 187 "./syntax.y" { (yyval.node) = Operator((yyval.node),"Dec",(yyloc).first_line,3,(yyvsp[-2].node),(yyvsp[-1].node),(yyvsp[0].node)); } -#line 1691 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.tab.c" +#line 1691 "./syntax.tab.c" break; case 56: /* Exp: Exp ASSIGNOP Exp */ -#line 192 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.y" +#line 192 "./syntax.y" { (yyval.node) = Operator((yyval.node),"Exp",(yyloc).first_line,3,(yyvsp[-2].node),(yyvsp[-1].node),(yyvsp[0].node)); } -#line 1697 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.tab.c" +#line 1697 "./syntax.tab.c" break; case 57: /* Exp: Exp AND Exp */ -#line 193 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.y" +#line 193 "./syntax.y" { (yyval.node) = Operator((yyval.node),"Exp",(yyloc).first_line,3,(yyvsp[-2].node),(yyvsp[-1].node),(yyvsp[0].node)); } -#line 1703 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.tab.c" +#line 1703 "./syntax.tab.c" break; case 58: /* Exp: Exp OR Exp */ -#line 194 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.y" +#line 194 "./syntax.y" { (yyval.node) = Operator((yyval.node),"Exp",(yyloc).first_line,3,(yyvsp[-2].node),(yyvsp[-1].node),(yyvsp[0].node)); } -#line 1709 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.tab.c" +#line 1709 "./syntax.tab.c" break; case 59: /* Exp: Exp RELOP Exp */ -#line 195 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.y" +#line 195 "./syntax.y" { (yyval.node) = Operator((yyval.node),"Exp",(yyloc).first_line,3,(yyvsp[-2].node),(yyvsp[-1].node),(yyvsp[0].node)); } -#line 1715 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.tab.c" +#line 1715 "./syntax.tab.c" break; case 60: /* Exp: Exp PLUS Exp */ -#line 196 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.y" +#line 196 "./syntax.y" { (yyval.node) = Operator((yyval.node),"Exp",(yyloc).first_line,3,(yyvsp[-2].node),(yyvsp[-1].node),(yyvsp[0].node)); } -#line 1721 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.tab.c" +#line 1721 "./syntax.tab.c" break; case 61: /* Exp: Exp MINUS Exp */ -#line 197 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.y" +#line 197 "./syntax.y" { (yyval.node) = Operator((yyval.node),"Exp",(yyloc).first_line,3,(yyvsp[-2].node),(yyvsp[-1].node),(yyvsp[0].node)); } -#line 1727 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.tab.c" +#line 1727 "./syntax.tab.c" break; case 62: /* Exp: Exp STAR Exp */ -#line 198 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.y" +#line 198 "./syntax.y" { (yyval.node) = Operator((yyval.node),"Exp",(yyloc).first_line,3,(yyvsp[-2].node),(yyvsp[-1].node),(yyvsp[0].node)); } -#line 1733 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.tab.c" +#line 1733 "./syntax.tab.c" break; case 63: /* Exp: Exp DIV Exp */ -#line 199 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.y" +#line 199 "./syntax.y" { (yyval.node) = Operator((yyval.node),"Exp",(yyloc).first_line,3,(yyvsp[-2].node),(yyvsp[-1].node),(yyvsp[0].node)); } -#line 1739 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.tab.c" +#line 1739 "./syntax.tab.c" break; case 64: /* Exp: LP Exp RP */ -#line 200 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.y" +#line 200 "./syntax.y" { (yyval.node) = Operator((yyval.node),"Exp",(yyloc).first_line,3,(yyvsp[-2].node),(yyvsp[-1].node),(yyvsp[0].node)); } -#line 1745 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.tab.c" +#line 1745 "./syntax.tab.c" break; case 65: /* Exp: MINUS Exp */ -#line 201 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.y" +#line 201 "./syntax.y" { (yyval.node) = Operator((yyval.node),"Exp",(yyloc).first_line,2,(yyvsp[-1].node),(yyvsp[0].node)); } -#line 1751 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.tab.c" +#line 1751 "./syntax.tab.c" break; case 66: /* Exp: NOT Exp */ -#line 202 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.y" +#line 202 "./syntax.y" { (yyval.node) = Operator((yyval.node),"Exp",(yyloc).first_line,2,(yyvsp[-1].node),(yyvsp[0].node)); } -#line 1757 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.tab.c" +#line 1757 "./syntax.tab.c" break; case 67: /* Exp: ID LP Args RP */ -#line 203 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.y" +#line 203 "./syntax.y" { (yyval.node) = Operator((yyval.node),"Exp",(yyloc).first_line,4,(yyvsp[-3].node),(yyvsp[-2].node),(yyvsp[-1].node),(yyvsp[0].node)); } -#line 1763 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.tab.c" +#line 1763 "./syntax.tab.c" break; case 68: /* Exp: ID LP RP */ -#line 204 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.y" +#line 204 "./syntax.y" { (yyval.node) = Operator((yyval.node),"Exp",(yyloc).first_line,3,(yyvsp[-2].node),(yyvsp[-1].node),(yyvsp[0].node)); } -#line 1769 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.tab.c" +#line 1769 "./syntax.tab.c" break; case 69: /* Exp: Exp LB Exp RB */ -#line 205 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.y" +#line 205 "./syntax.y" { (yyval.node) = Operator((yyval.node),"Exp",(yyloc).first_line,4,(yyvsp[-3].node),(yyvsp[-2].node),(yyvsp[-1].node),(yyvsp[0].node)); } -#line 1775 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.tab.c" +#line 1775 "./syntax.tab.c" break; case 70: /* Exp: Exp DOT ID */ -#line 206 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.y" +#line 206 "./syntax.y" { (yyval.node) = Operator((yyval.node),"Exp",(yyloc).first_line,3,(yyvsp[-2].node),(yyvsp[-1].node),(yyvsp[0].node)); } -#line 1781 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.tab.c" +#line 1781 "./syntax.tab.c" break; case 71: /* Exp: ID */ -#line 207 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.y" +#line 207 "./syntax.y" { (yyval.node) = Operator((yyval.node),"Exp",(yyloc).first_line,1,(yyvsp[0].node)); } -#line 1787 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.tab.c" +#line 1787 "./syntax.tab.c" break; case 72: /* Exp: INT */ -#line 208 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.y" +#line 208 "./syntax.y" { (yyval.node) = Operator((yyval.node),"Exp",(yyloc).first_line,1,(yyvsp[0].node)); } -#line 1793 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.tab.c" +#line 1793 "./syntax.tab.c" break; case 73: /* Exp: FLOAT */ -#line 209 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.y" +#line 209 "./syntax.y" { (yyval.node) = Operator((yyval.node),"Exp",(yyloc).first_line,1,(yyvsp[0].node)); } -#line 1799 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.tab.c" +#line 1799 "./syntax.tab.c" break; case 74: /* Args: Exp COMMA Args */ -#line 211 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.y" +#line 211 "./syntax.y" { (yyval.node) = Operator((yyval.node),"Args",(yyloc).first_line,3,(yyvsp[-2].node),(yyvsp[-1].node),(yyvsp[0].node)); } -#line 1805 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.tab.c" +#line 1805 "./syntax.tab.c" break; case 75: /* Args: Exp */ -#line 212 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.y" +#line 212 "./syntax.y" { (yyval.node) = Operator((yyval.node),"Args",(yyloc).first_line,1,(yyvsp[0].node)); } -#line 1811 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.tab.c" +#line 1811 "./syntax.tab.c" break; case 76: /* Args: error Args */ -#line 213 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.y" +#line 213 "./syntax.y" { (yyval.node) = NULL; yyerror("Wrong Args"); } -#line 1817 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.tab.c" +#line 1817 "./syntax.tab.c" break; -#line 1821 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.tab.c" +#line 1821 "./syntax.tab.c" default: break; } @@ -2015,7 +2015,7 @@ yyreturnlab: return yyresult; } -#line 216 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.y" +#line 216 "./syntax.y" diff --git a/Code/syntax.tab.h b/Code/syntax.tab.h index 618859ae5241cbc9f7aa8147b8acbbbd195c9cd7..0847e109a997c9e1bc29a08b4d776214aeaf5cc7 100644 --- a/Code/syntax.tab.h +++ b/Code/syntax.tab.h @@ -35,8 +35,8 @@ especially those whose name start with YY_ or yy_. They are private implementation details that can be changed or removed. */ -#ifndef YY_YY_HOME_PPX_ZHAOCHAOYI_COMPILER_LAB2_CODE_SYNTAX_TAB_H_INCLUDED -# define YY_YY_HOME_PPX_ZHAOCHAOYI_COMPILER_LAB2_CODE_SYNTAX_TAB_H_INCLUDED +#ifndef YY_YY_SYNTAX_TAB_H_INCLUDED +# define YY_YY_SYNTAX_TAB_H_INCLUDED /* Debug traces. */ #ifndef YYDEBUG # define YYDEBUG 0 @@ -91,11 +91,11 @@ extern int yydebug; #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED union YYSTYPE { -#line 29 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.y" +#line 29 "./syntax.y" struct Tree_node_t * node; -#line 99 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.tab.h" +#line 99 "./syntax.tab.h" }; typedef union YYSTYPE YYSTYPE; @@ -124,4 +124,4 @@ extern YYLTYPE yylloc; int yyparse (void); -#endif /* !YY_YY_HOME_PPX_ZHAOCHAOYI_COMPILER_LAB2_CODE_SYNTAX_TAB_H_INCLUDED */ +#endif /* !YY_YY_SYNTAX_TAB_H_INCLUDED */