diff --git a/Code/data.c b/Code/data.c index f2c7cf6f6a0b47212e7fb31f779071d6656e0892..23fb292b56a487cc6f339bf00cf1d22ee8daa3d4 100644 --- a/Code/data.c +++ b/Code/data.c @@ -1,7 +1,3 @@ -#include <malloc.h> -#include <assert.h> -#include <string.h> -#include <stdarg.h> #include <stdlib.h> #include "data.h" #include "debug.h" @@ -95,16 +91,17 @@ void MultiwayTree_insert_all(Node_t* cur,int argc,Node_t* childs[]) { } }//娉ㄦ剰锛宎rgc涓篶hilds鏁扮粍鍙傛暟鐨勬暟閲忥紝鍚屾椂娉ㄦ剰鍙彉鍙傛暟鐨勬暟閲� -extern MultiwayTree_t * tree; + MultiwayTree_t Multiwaytree = { - .init = MultiwayTree_init, - .lminsert = MultiwayTree_leftmostinsert, - .rminsert = MultiwayTree_rightmostinsert, - .Node_alloc = MultiwayTree_Node_alloc, - .remove = MultiwayTree_remove, - .traverse = MultiwayTree_Traverse, - .insert_all = MultiwayTree_insert_all, + .init = MultiwayTree_init, + .lminsert = MultiwayTree_leftmostinsert, + .rminsert = MultiwayTree_rightmostinsert, + .Node_alloc = MultiwayTree_Node_alloc, + .remove = MultiwayTree_remove, + .traverse = MultiwayTree_Traverse, + .insert_all = MultiwayTree_insert_all, }; + MultiwayTree_t * tree = &Multiwaytree; Node_t * Operator(Node_t * cur,char * content,int line,int argc,...) { diff --git a/Code/data.h b/Code/data.h index 02fbcf60cc17d000df00ba0b7a58749ad4f6e1c6..c7890211fd61d59d63378cd21abf50b6bbcbe16e 100644 --- a/Code/data.h +++ b/Code/data.h @@ -2,6 +2,11 @@ #define STRUCT_H #include <stdbool.h> +#include <malloc.h> +#include <assert.h> +#include <string.h> +#include <stdarg.h> +#include <stdio.h> //璇硶鏍戠粨鏋� typedef struct Tree_node_t { @@ -75,13 +80,14 @@ typedef struct SymbolInfoList_t SymbolInfoList_t; //鍝堝笇琛ㄧ敤鍒扮殑缁撴瀯 typedef struct Symbol_Node_t { char * name; - FieldList field; int deep; enum { HASHLIST,STACKLIST,STACKNODE,INFONODE, }type; + FieldList field; //绫诲瀷寰呭鐞嗭紝鍒楀嚭鐨勪负淇濈暀灞炴€э紝涓嶅厑璁镐娇鐢紝鐢ㄤ綔head锛宼ail锛宭ast,first绛夊睘鎬� - SymbolInfoList_t * list; //鍦╤ash table涓瘡涓猻lot涓殑姣忎釜鑺傜偣鎵€浠ュ湪list + + //SymbolInfoList_t * list; //鍦╤ash table涓瘡涓猻lot涓殑姣忎釜鑺傜偣鎵€鍦╨ist //缁存姢鏁版嵁缁撴瀯闇€瑕佺殑淇℃伅 struct Symbol_Node_t * hash_prev, * hash_next; @@ -141,6 +147,7 @@ typedef struct SymbolStack_t { void (*init)(); //鍒濆鍖栨爤 void (*push)(SymbolStack_ele_t * ); //鍦╬ush鍓嶅簲璋冪敤stack鐨刵ode_alloc鏉ュ垎閰嶆爤涓殑鑺傜偣 void (*pop)(); //鍦╬op鏃秄ree鎺夋墍鏈夎繖涓€灞備綔鐢ㄥ煙鐢宠鐨勮妭鐐� + bool (*empty)(); SymbolStack_ele_t * (*top)(); }SymbolStack_t; diff --git a/Code/debug.h b/Code/debug.h index 3ab58753309deddb0de83b3ea8a6079bfb0df2e3..dd27c789994bf1ee1b3f52250370a261e92576ee 100644 --- a/Code/debug.h +++ b/Code/debug.h @@ -41,5 +41,13 @@ #define Treedebug(format, ...) {;} #endif +#define panic_on(A,expr) \ + do { \ + Log(A); \ + assert(0); \ + } while(1) + + +#define panic(A) panic_on(A,0) #endif \ No newline at end of file diff --git a/Code/lex.yy.c b/Code/lex.yy.c index c8e8b398718e392fe97820e88c2493892448858c..94b77ff733867140565b2c5f5655bdbe3119859c 100644 --- a/Code/lex.yy.c +++ b/Code/lex.yy.c @@ -1,6 +1,6 @@ -#line 1 "./lex.yy.c" +#line 1 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/lex.yy.c" -#line 3 "./lex.yy.c" +#line 3 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/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 "./lexical.l" -#line 2 "./lexical.l" +#line 1 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/lexical.l" +#line 2 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/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 "./lex.yy.c" -#line 539 "./lex.yy.c" +#line 538 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/lex.yy.c" +#line 539 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/lex.yy.c" #define INITIAL 0 @@ -753,9 +753,9 @@ YY_DECL } { -#line 44 "./lexical.l" +#line 44 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/lexical.l" -#line 758 "./lex.yy.c" +#line 758 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/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 "./lexical.l" +#line 45 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/lexical.l" { ELEMENT("STRUCT"); return STRUCT; } YY_BREAK case 2: YY_RULE_SETUP -#line 46 "./lexical.l" +#line 46 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/lexical.l" { ELEMENT("RETURN"); return RETURN; } YY_BREAK case 3: YY_RULE_SETUP -#line 47 "./lexical.l" +#line 47 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/lexical.l" { ELEMENT("IF"); return IF; } YY_BREAK case 4: YY_RULE_SETUP -#line 48 "./lexical.l" +#line 48 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/lexical.l" { ELEMENT("ELSE"); return ELSE; } YY_BREAK case 5: YY_RULE_SETUP -#line 49 "./lexical.l" +#line 49 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/lexical.l" { ELEMENT("WHILE"); return WHILE; } YY_BREAK case 6: YY_RULE_SETUP -#line 50 "./lexical.l" +#line 50 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/lexical.l" { ELEMENT("TYPE"); return TYPE; } YY_BREAK case 7: YY_RULE_SETUP -#line 51 "./lexical.l" +#line 51 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/lexical.l" { ELEMENT("INT"); return INT;} YY_BREAK case 8: YY_RULE_SETUP -#line 52 "./lexical.l" +#line 52 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/lexical.l" { ELEMENT("FLOAT"); return FLOAT;} YY_BREAK case 9: YY_RULE_SETUP -#line 53 "./lexical.l" +#line 53 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/lexical.l" { ELEMENT("ID"); return ID; } YY_BREAK case 10: YY_RULE_SETUP -#line 54 "./lexical.l" +#line 54 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/lexical.l" { ELEMENT("SEMI"); return SEMI;} YY_BREAK case 11: YY_RULE_SETUP -#line 55 "./lexical.l" +#line 55 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/lexical.l" { ELEMENT("COMMA"); return COMMA;} YY_BREAK case 12: YY_RULE_SETUP -#line 56 "./lexical.l" +#line 56 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/lexical.l" { ELEMENT("ASSIGNOP"); return ASSIGNOP;} YY_BREAK case 13: YY_RULE_SETUP -#line 57 "./lexical.l" +#line 57 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/lexical.l" { ELEMENT("RELOP"); return RELOP;} YY_BREAK case 14: YY_RULE_SETUP -#line 58 "./lexical.l" +#line 58 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/lexical.l" { ELEMENT("PLUS"); return PLUS;} YY_BREAK case 15: YY_RULE_SETUP -#line 59 "./lexical.l" +#line 59 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/lexical.l" { ELEMENT("MINUS"); return MINUS;} YY_BREAK case 16: YY_RULE_SETUP -#line 60 "./lexical.l" +#line 60 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/lexical.l" { ELEMENT("STAR"); return STAR;} YY_BREAK case 17: YY_RULE_SETUP -#line 61 "./lexical.l" +#line 61 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/lexical.l" { ELEMENT("DIV"); return DIV;} YY_BREAK case 18: YY_RULE_SETUP -#line 62 "./lexical.l" +#line 62 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/lexical.l" { ELEMENT("AND"); return AND;} YY_BREAK case 19: YY_RULE_SETUP -#line 63 "./lexical.l" +#line 63 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/lexical.l" { ELEMENT("OR"); return OR;} YY_BREAK case 20: YY_RULE_SETUP -#line 64 "./lexical.l" +#line 64 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/lexical.l" { ELEMENT("DOT"); return DOT;} YY_BREAK case 21: YY_RULE_SETUP -#line 65 "./lexical.l" +#line 65 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/lexical.l" { ELEMENT("NOT"); return NOT;} YY_BREAK case 22: YY_RULE_SETUP -#line 66 "./lexical.l" +#line 66 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/lexical.l" { ELEMENT("LP"); return LP;} YY_BREAK case 23: YY_RULE_SETUP -#line 67 "./lexical.l" +#line 67 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/lexical.l" { ELEMENT("RP"); return RP;} YY_BREAK case 24: YY_RULE_SETUP -#line 68 "./lexical.l" +#line 68 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/lexical.l" { ELEMENT("LB"); return LB;} YY_BREAK case 25: YY_RULE_SETUP -#line 69 "./lexical.l" +#line 69 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/lexical.l" { ELEMENT("RB"); return RB;} YY_BREAK case 26: YY_RULE_SETUP -#line 70 "./lexical.l" +#line 70 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/lexical.l" { ELEMENT("LC"); return LC;} YY_BREAK case 27: YY_RULE_SETUP -#line 71 "./lexical.l" +#line 71 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/lexical.l" { ELEMENT("RC"); return RC;} YY_BREAK case 28: YY_RULE_SETUP -#line 72 "./lexical.l" +#line 72 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/lexical.l" { strcat(linetext," ");} YY_BREAK case 29: YY_RULE_SETUP -#line 73 "./lexical.l" +#line 73 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/lexical.l" { yycolumn += 3; strcat(linetext,"\t");} YY_BREAK case 30: /* rule 30 can match eol */ YY_RULE_SETUP -#line 74 "./lexical.l" +#line 74 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/lexical.l" { yycolumn = 1; yylineno += 1; memset(linetext,0,sizeof(linetext)); } YY_BREAK case 31: YY_RULE_SETUP -#line 75 "./lexical.l" +#line 75 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/lexical.l" { char c = input(); while(c != '\n') { c = input(); } yylineno += 1; } YY_BREAK case 32: YY_RULE_SETUP -#line 76 "./lexical.l" +#line 76 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/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 "./lexical.l" +#line 95 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/lexical.l" { LexicalError("%s",yytext); syntax++; } YY_BREAK case 34: YY_RULE_SETUP -#line 97 "./lexical.l" +#line 97 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/lexical.l" ECHO; YY_BREAK -#line 1004 "./lex.yy.c" +#line 1004 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/lex.yy.c" case YY_STATE_EOF(INITIAL): yyterminate(); @@ -2006,7 +2006,7 @@ void yyfree (void * ptr ) #define YYTABLES_NAME "yytables" -#line 97 "./lexical.l" +#line 97 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/lexical.l" extern int syntax; diff --git a/Code/parser b/Code/parser index e525621f021f4732c78f3cf8e4c2c168c1134983..b59058d162fa91b3007b8787c2d99a1a2ad8af02 100755 Binary files a/Code/parser and b/Code/parser differ diff --git a/Code/symbol.c b/Code/symbol.c index 4388f0e6499c367b9c1bfd578ee085f5125b74e5..b71e7915f1335ea4a903a8b1819487db025e94ff 100644 --- a/Code/symbol.c +++ b/Code/symbol.c @@ -1,10 +1,8 @@ -#include <malloc.h> -#include <stdio.h> -#include <assert.h> #include "data.h" #include "debug.h" -#define NONE_INFO_NAME_LENGTH 32 +#define NAME_LENGTH 32 + typedef Symbol_Node_t unit_t; typedef SymbolInfoList_t list_t; @@ -12,18 +10,18 @@ typedef struct SymbolStack_ele_t stack_ele_t; //閮藉簲璇ヤ娇鐢╯tatic -static void node_init(); +static void node_init(unit_t * cur,int argc,...); static void node_delete(void * cur,int mode); -static bool node_equal(unit_t*,unit_t*); +static bool struct_node_equal(unit_t*,unit_t*); static struct Info_Node_Ops { - void (*init)(); + void (*init)(unit_t * cur,int,...); //argc,char * name,deep,Type void (*delete)(void *,int); bool (*equal)(unit_t*,unit_t*); }InfoNodeOp = { .init = node_init, .delete = node_delete, - .equal = node_equal, + .equal = struct_node_equal, }; struct Info_Node_Ops * nodeop = &InfoNodeOp; @@ -32,6 +30,7 @@ struct Info_Node_Ops * nodeop = &InfoNodeOp; static void SymbolInfoList_insert(list_t * list,unit_t * cur,unit_t * new); static void SymbolInfoList_remove(list_t * list,unit_t * cur); static void SymbolInfoList_init(list_t * list); +static void SymbolInfoList_delete(list_t * list); static unit_t * SymbolInfoList_find(list_t * list,char * name); static list_t * SymbolInfoList_alloc(); @@ -39,6 +38,7 @@ static struct Hash_List_Ops { void (*insert)(list_t * list,unit_t * cur,unit_t * new); //鍦╨ist閾捐〃鑺傜偣cur涔嬪悗鎻掑叆鏂拌妭鐐筺ew !!!娉ㄦ剰鎻掑叆鑺傜偣鍓嶈鍏坢alloc涓€涓妭鐐� void (*remove)(list_t * list,unit_t * cur); //鍦╨ist閾捐〃涓垹闄ur鑺傜偣, !!!娉ㄦ剰锛氬垹闄よ妭鐐规椂鍊欎笉free锛屽湪stack涓璸op鐨勬椂鍊檉ree; void (*init)(list_t * list); //鍒濆鍖� + void (*delete)(list_t * list); unit_t * (* find)(list_t * list,char * name); list_t * (*alloc)(); }listop = { @@ -48,6 +48,7 @@ static struct Hash_List_Ops { .find = SymbolInfoList_find, .alloc = SymbolInfoList_alloc, + .delete = SymbolInfoList_delete, }; //hash table list 鎺ュ彛 @@ -66,6 +67,7 @@ static void SymbolStack_init(); //鍒濆鍖栨爤 static void SymbolStack_push(stack_ele_t * ); //鍦╬ush鍓嶅簲璋冪敤stack鐨刵ode_alloc鏉ュ垎閰嶆爤涓殑鑺傜偣 static void SymbolStack_pop(); //鍦╬op鏃秄ree鎺夋墍鏈夎繖涓€灞備綔鐢ㄥ煙鐢宠鐨勮妭鐐� static stack_ele_t * SymbolStack_top(); +static bool SymbolStack_empty(); @@ -86,6 +88,7 @@ MODULE_DEF(SymbolStack_t,symbol_stack) = { .push = SymbolStack_push, .pop = SymbolStack_pop, .top = SymbolStack_top, + .empty = SymbolStack_empty, }; @@ -174,17 +177,13 @@ static stack_ele_t * SymbolStack_node_alloc() { unit_t * head = &node->head; unit_t * tail = &node->tail; + nodeop->init(head,2,"Stack node head",STACKNODE,symbol_stack->stack_size + 1); + nodeop->init(tail,2,"Stack node tail",STACKNODE,symbol_stack->stack_size + 1); head->hash_prev = head->hash_next = tail->hash_prev = tail->hash_next = NULL; head->scope_prev = NULL,tail->scope_next = NULL; - head->type = tail->type = STACKNODE; - - head->name = malloc(NONE_INFO_NAME_LENGTH),tail->name = malloc(NONE_INFO_NAME_LENGTH); - sprintf(head->name,"Stack node deep %d",symbol_stack->stack_size + 1); - sprintf(tail->name,"Stack node deep %d",symbol_stack->stack_size + 1); - head->deep = tail->deep = symbol_stack->stack_size + 1; head->scope_next = tail; tail->scope_prev = head; @@ -196,11 +195,8 @@ static void SymbolStack_init() { symbol_stack->stack_size = 0; stack_ele_t * first = &symbol_stack->first; stack_ele_t * last = &symbol_stack->last; - first->prev = last->next = NULL; - - first->head.type = last->head.type = STACKLIST; - first->head.name = "Stack List top",last->head.name = "Stack List down"; + first->prev = last->next = NULL; first->next = last; last->prev = first; }//鍒濆鍖栨爤涓殑涓や釜鑺傜偣 @@ -219,13 +215,13 @@ static void SymbolStack_pop() { unit_t * cur = top->head.scope_next, * temp; while (cur != &top->tail) { temp = cur->scope_next; - node_delete(cur,INFONODE); + nodeop->delete(cur,INFONODE); cur = temp; } stack_ele_t * head = &symbol_stack->first, * next = top->next; head->next = next; next->prev = head; - node_delete(top,STACKNODE); + nodeop->delete(top,STACKNODE); } static stack_ele_t * SymbolStack_top() { @@ -236,6 +232,11 @@ static stack_ele_t * SymbolStack_top() { assert(0); } } + +static bool SymbolStack_empty() { + if(symbol_stack->stack_size == 0) return true; + else return false; +} //Symbol Stack @@ -264,30 +265,90 @@ static void SymbolInfoList_remove(list_t * list,unit_t * cur) { assert(prev != NULL && next != NULL); prev->hash_next = next; next->hash_prev = prev; - list->list_cnt++; + list->list_cnt--; + if(list->list_cnt == 0) { + listop.delete(list); + } } -static unit_t * SymbolInfoList_find(list_t * list,char * name) { +static void SymbolInfoList_delete(list_t * list) { + free(list); +} +static unit_t * SymbolInfoList_find(list_t * list,char * name) { + unit_t * cur = list->head.hash_next; + while (cur != &list->tail) { + if(strcmp(name,cur->name) == 0) { + return cur; + } + cur = cur->hash_next; + } + return NULL; } static list_t * SymbolInfoList_alloc() { - + list_t * list = (list_t *)malloc(sizeof(list_t)); + listop.init(list); + return list; } //Symbol List //Symbol Info node ops -static void node_init() { +//argc,char * name,deep,Type +static void node_init(unit_t * cur,int argc,...) { + //argc,char * name,deep,Type + va_list ap; + va_start(ap,argc); + if(argc >= 1) { + char * name = va_arg(ap,char *); + cur->name = malloc(NAME_LENGTH); + assert(NAME_LENGTH > strlen(name)); + strcpy(cur->name,name); + } + if(argc >= 2) { + int deep = va_arg(ap,int); + cur->type = deep; + } + if(argc >= 3) { + int type = va_arg(ap,int); + cur->type = type; + } + va_end(ap); + //鍒濆鍖栫洰鍓嶄粎娑夊強浜� + cur->hash_next = cur->hash_prev = cur->scope_next = cur->scope_prev = NULL; } static void node_delete(void * cur,int mode) { - + unit_t * info_node = (unit_t*) cur; + SymbolStack_ele_t * stack_node = (SymbolStack_ele_t *) cur; + switch (mode) { + case INFONODE: + free(info_node->name); + free(info_node); + //瀛樺疄闄呬俊鎭殑鑺傜偣 + break; + case HASHLIST: + panic("Delete hash list node not allowed!"); + //涓嶅厑璁搁€氳繃璇PI鍒犻櫎 + //hash table涓瘡涓摼琛ㄧ殑澶村熬鑺傜偣 + break; + case STACKNODE: + free(stack_node); + break; + case STACKLIST: + panic("Delete stack list node not allowed!"); + //涓嶅厑璁搁€氳繃璇PI鍒犻櫎 + //stack涓殑 + break; + default: + panic("Wrong mode"); + } } -static bool node_equal(unit_t* n1,unit_t* n2) { - +static bool struct_node_equal(unit_t* n1,unit_t* n2) { + panic("Not implemented"); } //Symbol Info node diff --git a/Code/syntax.tab.c b/Code/syntax.tab.c index 0fc737b04c9fe21eabfddcad52e42e1c24ad6c41..285d0d3f6ee10bbad903aa6d21ebd3b393d7f817 100644 --- a/Code/syntax.tab.c +++ b/Code/syntax.tab.c @@ -67,7 +67,7 @@ /* First part of user prologue. */ -#line 3 "./syntax.y" +#line 1 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.y" int yycolumn = 1; char linetext[128]; @@ -78,7 +78,7 @@ yycolumn += yyleng; //#define YYDEBUG 1 //int yydebug = 1; -#line 15 "./syntax.y" +#line 13 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.y" #include <stdio.h> #include "lex.yy.c" @@ -93,7 +93,7 @@ extern int syntax; -#line 97 "./syntax.tab.c" +#line 97 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.tab.c" # ifndef YY_CAST # ifdef __cplusplus @@ -566,14 +566,14 @@ static const yytype_int8 yytranslate[] = /* YYRLINE[YYN] -- Source line where rule number YYN was defined. */ static const yytype_uint8 yyrline[] = { - 0, 107, 107, 109, 110, 112, 113, 114, 115, 116, - 117, 118, 120, 121, 126, 127, 129, 130, 132, 133, - 135, 139, 140, 141, 143, 144, 145, 146, 148, 149, - 151, 156, 157, 159, 160, 162, 163, 164, 165, 166, - 167, 168, 169, 170, 171, 172, 177, 178, 180, 181, - 182, 184, 185, 187, 188, 193, 194, 195, 196, 197, - 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, - 208, 209, 210, 212, 213, 214 + 0, 105, 105, 107, 108, 110, 111, 112, 113, 114, + 115, 116, 118, 119, 124, 125, 127, 128, 130, 131, + 133, 137, 138, 139, 141, 142, 143, 144, 146, 147, + 149, 154, 155, 157, 158, 160, 161, 162, 163, 164, + 165, 166, 167, 168, 169, 170, 175, 176, 178, 179, + 180, 182, 183, 185, 186, 191, 192, 193, 194, 195, + 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, + 206, 207, 208, 210, 211, 212 }; #endif @@ -1364,451 +1364,451 @@ yyreduce: switch (yyn) { case 2: /* Program: ExtDefList */ -#line 107 "./syntax.y" +#line 105 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.y" { tree->root = (yyval.node) = Operator((yyval.node),"Program",(yyloc).first_line,1,(yyvsp[0].node)); } -#line 1370 "./syntax.tab.c" +#line 1370 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.tab.c" break; case 3: /* ExtDefList: ExtDef ExtDefList */ -#line 109 "./syntax.y" +#line 107 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.y" { (yyval.node) = Operator((yyval.node),"ExtDefList",(yyloc).first_line,2,(yyvsp[-1].node),(yyvsp[0].node)); } -#line 1376 "./syntax.tab.c" +#line 1376 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.tab.c" break; case 4: /* ExtDefList: %empty */ -#line 110 "./syntax.y" +#line 108 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.y" { (yyval.node) = NULL; } -#line 1382 "./syntax.tab.c" +#line 1382 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.tab.c" break; case 5: /* ExtDef: Specifier ExtDecList SEMI */ -#line 112 "./syntax.y" +#line 110 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.y" { (yyval.node) = Operator((yyval.node),"ExtDef",(yyloc).first_line,3,(yyvsp[-2].node),(yyvsp[-1].node),(yyvsp[0].node)); } -#line 1388 "./syntax.tab.c" +#line 1388 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.tab.c" break; case 6: /* ExtDef: Specifier SEMI */ -#line 113 "./syntax.y" +#line 111 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.y" { (yyval.node) = Operator((yyval.node),"ExtDef",(yyloc).first_line,2,(yyvsp[-1].node),(yyvsp[0].node)); } -#line 1394 "./syntax.tab.c" +#line 1394 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.tab.c" break; case 7: /* ExtDef: Specifier FunDec CompSt */ -#line 114 "./syntax.y" +#line 112 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.y" { (yyval.node) = Operator((yyval.node),"ExtDef",(yyloc).first_line,3,(yyvsp[-2].node),(yyvsp[-1].node),(yyvsp[0].node)); } -#line 1400 "./syntax.tab.c" +#line 1400 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.tab.c" break; case 8: /* ExtDef: error SEMI */ -#line 115 "./syntax.y" +#line 113 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.y" { (yyval.node) = NULL;yyerror("ExtDef"); } -#line 1406 "./syntax.tab.c" +#line 1406 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.tab.c" break; case 9: /* ExtDef: Specifier error */ -#line 116 "./syntax.y" +#line 114 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.y" { (yyval.node) = NULL;yyerror("ExtDef,missing ;"); } -#line 1412 "./syntax.tab.c" +#line 1412 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.tab.c" break; case 10: /* ExtDef: Specifier error SEMI */ -#line 117 "./syntax.y" +#line 115 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.y" { (yyval.node) = NULL;yyerror("ExtDef"); } -#line 1418 "./syntax.tab.c" +#line 1418 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.tab.c" break; case 11: /* ExtDef: Specifier error CompSt */ -#line 118 "./syntax.y" +#line 116 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.y" { (yyval.node) = NULL;yyerror("ExtDef"); } -#line 1424 "./syntax.tab.c" +#line 1424 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.tab.c" break; case 12: /* ExtDecList: VarDec */ -#line 120 "./syntax.y" +#line 118 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.y" { (yyval.node) = Operator((yyval.node),"ExtDecList",(yyloc).first_line,1,(yyvsp[0].node)); } -#line 1430 "./syntax.tab.c" +#line 1430 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.tab.c" break; case 13: /* ExtDecList: VarDec COMMA ExtDecList */ -#line 121 "./syntax.y" +#line 119 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.y" { (yyval.node) = Operator((yyval.node),"ExtDecList",(yyloc).first_line,3,(yyvsp[-2].node),(yyvsp[-1].node),(yyvsp[0].node)); } -#line 1436 "./syntax.tab.c" +#line 1436 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.tab.c" break; case 14: /* Specifier: TYPE */ -#line 126 "./syntax.y" +#line 124 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.y" { (yyval.node) = Operator((yyval.node),"Specifier",(yyloc).first_line,1,(yyvsp[0].node)); } -#line 1442 "./syntax.tab.c" +#line 1442 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.tab.c" break; case 15: /* Specifier: StructSpecifier */ -#line 127 "./syntax.y" +#line 125 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.y" { (yyval.node) = Operator((yyval.node),"Specifier",(yyloc).first_line,1,(yyvsp[0].node)); } -#line 1448 "./syntax.tab.c" +#line 1448 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.tab.c" break; case 16: /* StructSpecifier: STRUCT OptTag LC DefList RC */ -#line 129 "./syntax.y" +#line 127 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/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 1454 "./syntax.tab.c" +#line 1454 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.tab.c" break; case 17: /* StructSpecifier: STRUCT Tag */ -#line 130 "./syntax.y" +#line 128 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.y" { (yyval.node) = Operator((yyval.node),"StructSpecifier",(yyloc).first_line,2,(yyvsp[-1].node),(yyvsp[0].node)); } -#line 1460 "./syntax.tab.c" +#line 1460 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.tab.c" break; case 18: /* OptTag: ID */ -#line 132 "./syntax.y" +#line 130 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.y" { (yyval.node) = Operator((yyval.node),"OptTag",(yyloc).first_line,1,(yyvsp[0].node)); } -#line 1466 "./syntax.tab.c" +#line 1466 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.tab.c" break; case 19: /* OptTag: %empty */ -#line 133 "./syntax.y" +#line 131 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.y" { (yyval.node) = NULL; } -#line 1472 "./syntax.tab.c" +#line 1472 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.tab.c" break; case 20: /* Tag: ID */ -#line 135 "./syntax.y" +#line 133 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.y" { (yyval.node) = Operator((yyval.node),"Tag",(yyloc).first_line,1,(yyvsp[0].node)); } -#line 1478 "./syntax.tab.c" +#line 1478 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.tab.c" break; case 21: /* VarDec: ID */ -#line 139 "./syntax.y" +#line 137 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.y" { (yyval.node) = Operator((yyval.node),"VarDec",(yyloc).first_line,1,(yyvsp[0].node)); } -#line 1484 "./syntax.tab.c" +#line 1484 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.tab.c" break; case 22: /* VarDec: VarDec LB INT RB */ -#line 140 "./syntax.y" +#line 138 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/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 1490 "./syntax.tab.c" +#line 1490 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.tab.c" break; case 23: /* VarDec: VarDec LB error RB */ -#line 141 "./syntax.y" +#line 139 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.y" { (yyval.node) = NULL; yyerror("VarDec"); } -#line 1496 "./syntax.tab.c" +#line 1496 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.tab.c" break; case 24: /* FunDec: ID LP VarList RP */ -#line 143 "./syntax.y" +#line 141 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/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 1502 "./syntax.tab.c" +#line 1502 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.tab.c" break; case 25: /* FunDec: ID LP RP */ -#line 144 "./syntax.y" +#line 142 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.y" { (yyval.node) = Operator((yyval.node),"FunDec",(yyloc).first_line,3,(yyvsp[-2].node),(yyvsp[-1].node),(yyvsp[0].node)); } -#line 1508 "./syntax.tab.c" +#line 1508 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.tab.c" break; case 26: /* FunDec: ID LP error RP */ -#line 145 "./syntax.y" +#line 143 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.y" { (yyval.node) = NULL; yyerror("FunDec"); } -#line 1514 "./syntax.tab.c" +#line 1514 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.tab.c" break; case 27: /* FunDec: error LP VarList RP */ -#line 146 "./syntax.y" +#line 144 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.y" { (yyval.node) = NULL; yyerror("FunDec"); } -#line 1520 "./syntax.tab.c" +#line 1520 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.tab.c" break; case 28: /* VarList: ParamDec COMMA VarList */ -#line 148 "./syntax.y" +#line 146 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.y" { (yyval.node) = Operator((yyval.node),"VarList",(yyloc).first_line,3,(yyvsp[-2].node),(yyvsp[-1].node),(yyvsp[0].node)); } -#line 1526 "./syntax.tab.c" +#line 1526 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.tab.c" break; case 29: /* VarList: ParamDec */ -#line 149 "./syntax.y" +#line 147 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.y" { (yyval.node) = Operator((yyval.node),"VarList",(yyloc).first_line,1,(yyvsp[0].node)); } -#line 1532 "./syntax.tab.c" +#line 1532 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.tab.c" break; case 30: /* ParamDec: Specifier VarDec */ -#line 151 "./syntax.y" +#line 149 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.y" { (yyval.node) = Operator((yyval.node),"ParamDec",(yyloc).first_line,2,(yyvsp[-1].node),(yyvsp[0].node)); } -#line 1538 "./syntax.tab.c" +#line 1538 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.tab.c" break; case 31: /* CompSt: LC DefList StmtList RC */ -#line 156 "./syntax.y" +#line 154 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/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 1544 "./syntax.tab.c" +#line 1544 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.tab.c" break; case 32: /* CompSt: LC DefList error RC */ -#line 157 "./syntax.y" +#line 155 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.y" { (yyval.node) = NULL; yyerror("CompSt"); } -#line 1550 "./syntax.tab.c" +#line 1550 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.tab.c" break; case 33: /* StmtList: Stmt StmtList */ -#line 159 "./syntax.y" +#line 157 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.y" { (yyval.node) = Operator((yyval.node),"StmtList",(yyloc).first_line,2,(yyvsp[-1].node),(yyvsp[0].node)); } -#line 1556 "./syntax.tab.c" +#line 1556 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.tab.c" break; case 34: /* StmtList: %empty */ -#line 160 "./syntax.y" +#line 158 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.y" { (yyval.node) = NULL; } -#line 1562 "./syntax.tab.c" +#line 1562 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.tab.c" break; case 35: /* Stmt: Exp SEMI */ -#line 162 "./syntax.y" +#line 160 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.y" { (yyval.node) = Operator((yyval.node),"Stmt",(yyloc).first_line,2,(yyvsp[-1].node),(yyvsp[0].node)); } -#line 1568 "./syntax.tab.c" +#line 1568 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.tab.c" break; case 36: /* Stmt: CompSt */ -#line 163 "./syntax.y" +#line 161 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.y" { (yyval.node) = Operator((yyval.node),"Stmt",(yyloc).first_line,1,(yyvsp[0].node)); } -#line 1574 "./syntax.tab.c" +#line 1574 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.tab.c" break; case 37: /* Stmt: RETURN Exp SEMI */ -#line 164 "./syntax.y" +#line 162 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.y" { (yyval.node) = Operator((yyval.node),"Stmt",(yyloc).first_line,3,(yyvsp[-2].node),(yyvsp[-1].node),(yyvsp[0].node)); } -#line 1580 "./syntax.tab.c" +#line 1580 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.tab.c" break; case 38: /* Stmt: IF LP Exp RP Stmt */ -#line 165 "./syntax.y" +#line 163 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/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 1586 "./syntax.tab.c" +#line 1586 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.tab.c" break; case 39: /* Stmt: IF LP Exp RP Stmt ELSE Stmt */ -#line 166 "./syntax.y" +#line 164 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/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 1592 "./syntax.tab.c" +#line 1592 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.tab.c" break; case 40: /* Stmt: WHILE LP Exp RP Stmt */ -#line 167 "./syntax.y" +#line 165 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/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 1598 "./syntax.tab.c" +#line 1598 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.tab.c" break; case 41: /* Stmt: error SEMI */ -#line 168 "./syntax.y" +#line 166 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.y" { (yyval.node) = NULL; yyerror("1Stmt"); } -#line 1604 "./syntax.tab.c" +#line 1604 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.tab.c" break; case 42: /* Stmt: Exp error */ -#line 169 "./syntax.y" +#line 167 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.y" { (yyval.node) = NULL; yyerror("2Stmt"); } -#line 1610 "./syntax.tab.c" +#line 1610 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.tab.c" break; case 43: /* Stmt: IF LP Exp error RP Stmt */ -#line 170 "./syntax.y" +#line 168 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.y" { (yyval.node) = NULL; yyerror("3Stmt"); } -#line 1616 "./syntax.tab.c" +#line 1616 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.tab.c" break; case 44: /* Stmt: RETURN error SEMI */ -#line 171 "./syntax.y" +#line 169 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.y" { (yyval.node) = NULL; yyerror("4Stmt"); } -#line 1622 "./syntax.tab.c" +#line 1622 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.tab.c" break; case 45: /* Stmt: RETURN Exp error */ -#line 172 "./syntax.y" +#line 170 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.y" { (yyval.node) = NULL; yyerror("5Stmt"); } -#line 1628 "./syntax.tab.c" +#line 1628 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.tab.c" break; case 46: /* DefList: Def DefList */ -#line 177 "./syntax.y" +#line 175 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.y" { (yyval.node) = Operator((yyval.node),"DefList",(yyloc).first_line,2,(yyvsp[-1].node),(yyvsp[0].node)); } -#line 1634 "./syntax.tab.c" +#line 1634 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.tab.c" break; case 47: /* DefList: %empty */ -#line 178 "./syntax.y" +#line 176 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.y" { (yyval.node) = NULL; } -#line 1640 "./syntax.tab.c" +#line 1640 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.tab.c" break; case 48: /* Def: Specifier DecList SEMI */ -#line 180 "./syntax.y" +#line 178 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.y" { (yyval.node) = Operator((yyval.node),"Def",(yyloc).first_line,3,(yyvsp[-2].node),(yyvsp[-1].node),(yyvsp[0].node)); } -#line 1646 "./syntax.tab.c" +#line 1646 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.tab.c" break; case 49: /* Def: Specifier error SEMI */ -#line 181 "./syntax.y" +#line 179 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.y" { (yyval.node) = NULL; yyerror("Def"); } -#line 1652 "./syntax.tab.c" +#line 1652 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.tab.c" break; case 50: /* Def: Specifier DecList error SEMI */ -#line 182 "./syntax.y" +#line 180 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.y" { (yyval.node) = NULL; yyerror("Def"); } -#line 1658 "./syntax.tab.c" +#line 1658 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.tab.c" break; case 51: /* DecList: Dec */ -#line 184 "./syntax.y" +#line 182 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.y" { (yyval.node) = Operator((yyval.node),"DecList",(yyloc).first_line,1,(yyvsp[0].node)); } -#line 1664 "./syntax.tab.c" +#line 1664 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.tab.c" break; case 52: /* DecList: Dec COMMA DecList */ -#line 185 "./syntax.y" +#line 183 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.y" { (yyval.node) = Operator((yyval.node),"DecList",(yyloc).first_line,3,(yyvsp[-2].node),(yyvsp[-1].node),(yyvsp[0].node)); } -#line 1670 "./syntax.tab.c" +#line 1670 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.tab.c" break; case 53: /* Dec: VarDec */ -#line 187 "./syntax.y" +#line 185 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.y" { (yyval.node) = Operator((yyval.node),"Dec",(yyloc).first_line,1,(yyvsp[0].node)); } -#line 1676 "./syntax.tab.c" +#line 1676 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.tab.c" break; case 54: /* Dec: VarDec ASSIGNOP Exp */ -#line 188 "./syntax.y" +#line 186 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.y" { (yyval.node) = Operator((yyval.node),"Dec",(yyloc).first_line,3,(yyvsp[-2].node),(yyvsp[-1].node),(yyvsp[0].node)); } -#line 1682 "./syntax.tab.c" +#line 1682 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.tab.c" break; case 55: /* Exp: Exp ASSIGNOP Exp */ -#line 193 "./syntax.y" +#line 191 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.y" { (yyval.node) = Operator((yyval.node),"Exp",(yyloc).first_line,3,(yyvsp[-2].node),(yyvsp[-1].node),(yyvsp[0].node)); } -#line 1688 "./syntax.tab.c" +#line 1688 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.tab.c" break; case 56: /* Exp: Exp AND Exp */ -#line 194 "./syntax.y" +#line 192 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.y" { (yyval.node) = Operator((yyval.node),"Exp",(yyloc).first_line,3,(yyvsp[-2].node),(yyvsp[-1].node),(yyvsp[0].node)); } -#line 1694 "./syntax.tab.c" +#line 1694 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.tab.c" break; case 57: /* Exp: Exp OR Exp */ -#line 195 "./syntax.y" +#line 193 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.y" { (yyval.node) = Operator((yyval.node),"Exp",(yyloc).first_line,3,(yyvsp[-2].node),(yyvsp[-1].node),(yyvsp[0].node)); } -#line 1700 "./syntax.tab.c" +#line 1700 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.tab.c" break; case 58: /* Exp: Exp RELOP Exp */ -#line 196 "./syntax.y" +#line 194 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.y" { (yyval.node) = Operator((yyval.node),"Exp",(yyloc).first_line,3,(yyvsp[-2].node),(yyvsp[-1].node),(yyvsp[0].node)); } -#line 1706 "./syntax.tab.c" +#line 1706 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.tab.c" break; case 59: /* Exp: Exp PLUS Exp */ -#line 197 "./syntax.y" +#line 195 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.y" { (yyval.node) = Operator((yyval.node),"Exp",(yyloc).first_line,3,(yyvsp[-2].node),(yyvsp[-1].node),(yyvsp[0].node)); } -#line 1712 "./syntax.tab.c" +#line 1712 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.tab.c" break; case 60: /* Exp: Exp MINUS Exp */ -#line 198 "./syntax.y" +#line 196 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.y" { (yyval.node) = Operator((yyval.node),"Exp",(yyloc).first_line,3,(yyvsp[-2].node),(yyvsp[-1].node),(yyvsp[0].node)); } -#line 1718 "./syntax.tab.c" +#line 1718 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.tab.c" break; case 61: /* Exp: Exp STAR Exp */ -#line 199 "./syntax.y" +#line 197 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.y" { (yyval.node) = Operator((yyval.node),"Exp",(yyloc).first_line,3,(yyvsp[-2].node),(yyvsp[-1].node),(yyvsp[0].node)); } -#line 1724 "./syntax.tab.c" +#line 1724 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.tab.c" break; case 62: /* Exp: Exp DIV Exp */ -#line 200 "./syntax.y" +#line 198 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.y" { (yyval.node) = Operator((yyval.node),"Exp",(yyloc).first_line,3,(yyvsp[-2].node),(yyvsp[-1].node),(yyvsp[0].node)); } -#line 1730 "./syntax.tab.c" +#line 1730 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.tab.c" break; case 63: /* Exp: LP Exp RP */ -#line 201 "./syntax.y" +#line 199 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.y" { (yyval.node) = Operator((yyval.node),"Exp",(yyloc).first_line,3,(yyvsp[-2].node),(yyvsp[-1].node),(yyvsp[0].node)); } -#line 1736 "./syntax.tab.c" +#line 1736 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.tab.c" break; case 64: /* Exp: MINUS Exp */ -#line 202 "./syntax.y" +#line 200 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.y" { (yyval.node) = Operator((yyval.node),"Exp",(yyloc).first_line,2,(yyvsp[-1].node),(yyvsp[0].node)); } -#line 1742 "./syntax.tab.c" +#line 1742 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.tab.c" break; case 65: /* Exp: NOT Exp */ -#line 203 "./syntax.y" +#line 201 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.y" { (yyval.node) = Operator((yyval.node),"Exp",(yyloc).first_line,2,(yyvsp[-1].node),(yyvsp[0].node)); } -#line 1748 "./syntax.tab.c" +#line 1748 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.tab.c" break; case 66: /* Exp: ID LP Args RP */ -#line 204 "./syntax.y" +#line 202 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/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 1754 "./syntax.tab.c" +#line 1754 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.tab.c" break; case 67: /* Exp: ID LP RP */ -#line 205 "./syntax.y" +#line 203 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.y" { (yyval.node) = Operator((yyval.node),"Exp",(yyloc).first_line,3,(yyvsp[-2].node),(yyvsp[-1].node),(yyvsp[0].node)); } -#line 1760 "./syntax.tab.c" +#line 1760 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.tab.c" break; case 68: /* Exp: Exp LB Exp RB */ -#line 206 "./syntax.y" +#line 204 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/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 1766 "./syntax.tab.c" +#line 1766 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.tab.c" break; case 69: /* Exp: Exp DOT ID */ -#line 207 "./syntax.y" +#line 205 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.y" { (yyval.node) = Operator((yyval.node),"Exp",(yyloc).first_line,3,(yyvsp[-2].node),(yyvsp[-1].node),(yyvsp[0].node)); } -#line 1772 "./syntax.tab.c" +#line 1772 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.tab.c" break; case 70: /* Exp: ID */ -#line 208 "./syntax.y" +#line 206 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.y" { (yyval.node) = Operator((yyval.node),"Exp",(yyloc).first_line,1,(yyvsp[0].node)); } -#line 1778 "./syntax.tab.c" +#line 1778 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.tab.c" break; case 71: /* Exp: INT */ -#line 209 "./syntax.y" +#line 207 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.y" { (yyval.node) = Operator((yyval.node),"Exp",(yyloc).first_line,1,(yyvsp[0].node)); } -#line 1784 "./syntax.tab.c" +#line 1784 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.tab.c" break; case 72: /* Exp: FLOAT */ -#line 210 "./syntax.y" +#line 208 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.y" { (yyval.node) = Operator((yyval.node),"Exp",(yyloc).first_line,1,(yyvsp[0].node)); } -#line 1790 "./syntax.tab.c" +#line 1790 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.tab.c" break; case 73: /* Args: Exp COMMA Args */ -#line 212 "./syntax.y" +#line 210 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.y" { (yyval.node) = Operator((yyval.node),"Args",(yyloc).first_line,3,(yyvsp[-2].node),(yyvsp[-1].node),(yyvsp[0].node)); } -#line 1796 "./syntax.tab.c" +#line 1796 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.tab.c" break; case 74: /* Args: Exp */ -#line 213 "./syntax.y" +#line 211 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.y" { (yyval.node) = Operator((yyval.node),"Args",(yyloc).first_line,1,(yyvsp[0].node)); } -#line 1802 "./syntax.tab.c" +#line 1802 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.tab.c" break; case 75: /* Args: error Args */ -#line 214 "./syntax.y" +#line 212 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.y" { (yyval.node) = NULL; yyerror("Wrong Args"); } -#line 1808 "./syntax.tab.c" +#line 1808 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.tab.c" break; -#line 1812 "./syntax.tab.c" +#line 1812 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.tab.c" default: break; } @@ -2006,7 +2006,7 @@ yyreturnlab: return yyresult; } -#line 217 "./syntax.y" +#line 215 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.y" diff --git a/Code/syntax.tab.h b/Code/syntax.tab.h index 6c3c38ec48ee56a82c3a94600b9986581bf4d903..618859ae5241cbc9f7aa8147b8acbbbd195c9cd7 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_SYNTAX_TAB_H_INCLUDED -# define YY_YY_SYNTAX_TAB_H_INCLUDED +#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 /* Debug traces. */ #ifndef YYDEBUG # define YYDEBUG 0 @@ -91,11 +91,11 @@ extern int yydebug; #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED union YYSTYPE { -#line 31 "./syntax.y" +#line 29 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.y" struct Tree_node_t * node; -#line 99 "./syntax.tab.h" +#line 99 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.tab.h" }; typedef union YYSTYPE YYSTYPE; @@ -124,4 +124,4 @@ extern YYLTYPE yylloc; int yyparse (void); -#endif /* !YY_YY_SYNTAX_TAB_H_INCLUDED */ +#endif /* !YY_YY_HOME_PPX_ZHAOCHAOYI_COMPILER_LAB2_CODE_SYNTAX_TAB_H_INCLUDED */ diff --git a/Code/syntax.y b/Code/syntax.y index 5f3c0454427d5c0213f7b6e965e051267a3d234a..0312c6d8b24bbd2ac21db15bb44bd87bed230fae 100755 --- a/Code/syntax.y +++ b/Code/syntax.y @@ -1,5 +1,3 @@ -%locations - %{ int yycolumn = 1; char linetext[128];