From 8973390b2a6f02d9725a3bf5bfc43da3fc5fb89e Mon Sep 17 00:00:00 2001 From: ulic-youthlic Date: Wed, 26 Mar 2025 10:38:10 +0800 Subject: [PATCH] fix Makefile --- Makefile | 19 ++++++++-- parser.y | 108 +++++++++++++++++++++++++++---------------------------- 2 files changed, 70 insertions(+), 57 deletions(-) diff --git a/Makefile b/Makefile index 69b89c8..72b562b 100644 --- a/Makefile +++ b/Makefile @@ -1,6 +1,6 @@ -CC = zig cc -O2 +CC = gcc -all: parser.tab.o lex.yy.o node.o main.o +program: parser.tab.o lex.yy.o node.o main.o $(CC) ./parser.tab.o ./lex.yy.o ./node.o ./main.o -o program -lfl main.o: main.c @@ -21,6 +21,19 @@ lex.yy.o: lex.yy.c lex.yy.c: ./scanner.l flex scanner.l -.PHONY: clean +.PHONY: clean test clean: rm parser.tab.c parser.tab.h parser.tab.o lex.yy.o lex.yy.c program main.o node.o + +test: program + @echo Test test1: + ./program test1 + @read + @echo Test test2: + ./program test2 + @read + @echo Test test3: + ./program test3 + @read + @echo Test test4: + ./program test4 diff --git a/parser.y b/parser.y index 66b6240..8e6dcc8 100644 --- a/parser.y +++ b/parser.y @@ -22,14 +22,14 @@ Program: ExtDefList { pNode children[1] = { $1 }; - $$ = newNode(Program, yylineno, 1, children, nullValue()); + $$ = newNode(Program, $1->line, 1, children, nullValue()); root = $$; } ; ExtDefList: ExtDef ExtDefList { pNode children[2] = { $1, $2 }; - $$ = newNode(ExtDefList, yylineno, 2, children, nullValue()); + $$ = newNode(ExtDefList, $1->line, 2, children, nullValue()); } | { $$ = newNode(ExtDefList, -1, 0, NULL, nullValue()); @@ -38,25 +38,25 @@ ExtDefList: ExtDef: Specifier ExtDecList SEMI { pNode children[3] = { $1, $2, $3 }; - $$ = newNode(ExtDef, yylineno, 3, children, nullValue()); + $$ = newNode(ExtDef, $1->line, 3, children, nullValue()); } | Specifier SEMI { pNode children[2] = { $1, $2 }; - $$ = newNode(ExtDef, yylineno, 2, children, nullValue()); + $$ = newNode(ExtDef, $1->line, 2, children, nullValue()); } | Specifier FunDec CompSt { pNode children[3] = { $1, $2, $3 }; - $$ = newNode(ExtDef, yylineno, 3, children, nullValue()); + $$ = newNode(ExtDef, $1->line, 3, children, nullValue()); } ; ExtDecList: VarDec { pNode children[1] = { $1 }; - $$ = newNode(ExtDecList, yylineno, 1, children, nullValue()); + $$ = newNode(ExtDecList, $1->line, 1, children, nullValue()); } | VarDec COMMA ExtDecList { pNode children[3] = { $1, $2, $3 }; - $$ = newNode(ExtDecList, yylineno, 3, children, nullValue()); + $$ = newNode(ExtDecList, $1->line, 3, children, nullValue()); } ; @@ -64,31 +64,31 @@ ExtDecList: Specifier: TYPE_INT { pNode children[1] = { $1 }; - $$ = newNode(Specifier, yylineno, 1, children, nullValue()); + $$ = newNode(Specifier, $1->line, 1, children, nullValue()); } | TYPE_FLOAT { pNode children[1] = { $1 }; - $$ = newNode(Specifier, yylineno, 1, children, nullValue()); + $$ = newNode(Specifier, $1->line, 1, children, nullValue()); } | StructSpecifier { pNode children[1] = { $1 }; - $$ = newNode(Specifier, yylineno, 1, children, nullValue()); + $$ = newNode(Specifier, $1->line, 1, children, nullValue()); } ; StructSpecifier: STRUCT OptTag LC DefList RC { pNode children[5] = { $1, $2, $3, $4, $5 }; - $$ = newNode(StructSpecifier, yylineno, 5, children, nullValue()); + $$ = newNode(StructSpecifier, $1->line, 5, children, nullValue()); } | STRUCT Tag { pNode children[2] = { $1, $2 }; - $$ = newNode(StructSpecifier, yylineno, 2, children, nullValue()); + $$ = newNode(StructSpecifier, $1->line, 2, children, nullValue()); } ; OptTag: ID { pNode children[1] = { $1 }; - $$ = newNode(OptTag, yylineno, 1, children, nullValue()); + $$ = newNode(OptTag, $1->line, 1, children, nullValue()); } | { $$ = newNode(OptTag, -1, 0, NULL, nullValue()); @@ -97,7 +97,7 @@ OptTag: Tag: ID { pNode children[1] = { $1 }; - $$ = newNode(Tag, yylineno, 1, children, nullValue()); + $$ = newNode(Tag, $1->line, 1, children, nullValue()); } ; @@ -105,37 +105,37 @@ Tag: VarDec: ID { pNode children[1] = { $1 }; - $$ = newNode(VarDec, yylineno, 1, children, nullValue()); + $$ = newNode(VarDec, $1->line, 1, children, nullValue()); } | VarDec LB INTEGER RB { pNode children[4] = { $1, $2, $3, $4 }; - $$ = newNode(VarDec, yylineno, 4, children, nullValue()); + $$ = newNode(VarDec, $1->line, 4, children, nullValue()); } ; FunDec: ID LP VarList RP { pNode children[4] = { $1, $2, $3, $4 }; - $$ = newNode(FunDec, yylineno, 4, children, nullValue()); + $$ = newNode(FunDec, $1->line, 4, children, nullValue()); } | ID LP RP { pNode children[3] = { $1, $2, $3 }; - $$ = newNode(FunDec, yylineno, 3, children, nullValue()); + $$ = newNode(FunDec, $1->line, 3, children, nullValue()); } ; VarList: ParamDec COMMA VarList { pNode children[3] = { $1, $2, $3 }; - $$ = newNode(VarList, yylineno, 3, children, nullValue()); + $$ = newNode(VarList, $1->line, 3, children, nullValue()); } | ParamDec { pNode children[1] = { $1 }; - $$ = newNode(VarList, yylineno, 1, children, nullValue()); + $$ = newNode(VarList, $1->line, 1, children, nullValue()); } ; ParamDec: Specifier VarDec { pNode children[1] = { $1 }; - $$ = newNode(ParamDec, yylineno, 1, children, nullValue()); + $$ = newNode(ParamDec, $1->line, 1, children, nullValue()); } ; @@ -143,13 +143,13 @@ ParamDec: CompSt: LC DefList StmtList RC { pNode children[4] = { $1, $2, $3, $4 }; - $$ = newNode(CompSt, yylineno, 4, children, nullValue()); + $$ = newNode(CompSt, $1->line, 4, children, nullValue()); } ; StmtList: Stmt StmtList { pNode children[2] = { $1, $2 }; - $$ = newNode(StmtList, yylineno, 2, children, nullValue()); + $$ = newNode(StmtList, $1->line, 2, children, nullValue()); } | { $$ = newNode(StmtList, -1, 0, NULL, nullValue()); @@ -158,27 +158,27 @@ StmtList: Stmt: Exp SEMI { pNode children[2] = { $1, $2 }; - $$ = newNode(Stmt, yylineno, 2, children, nullValue()); + $$ = newNode(Stmt, $1->line, 2, children, nullValue()); } | CompSt { pNode children[1] = { $1 }; - $$ = newNode(Stmt, yylineno, 1, children, nullValue()); + $$ = newNode(Stmt, $1->line, 1, children, nullValue()); } | RETURN Exp SEMI { pNode children[3] = { $1, $2, $3 }; - $$ = newNode(Stmt, yylineno, 3, children, nullValue()); + $$ = newNode(Stmt, $1->line, 3, children, nullValue()); } | IF LP Exp RP Stmt { pNode children[5] = { $1, $2, $3, $4, $5 }; - $$ = newNode(Stmt, yylineno, 5, children, nullValue()); + $$ = newNode(Stmt, $1->line, 5, children, nullValue()); } | IF LP Exp RP Stmt ELSE Stmt { pNode children[7] = { $1, $2, $3, $4, $5, $6, $7 }; - $$ = newNode(Stmt, yylineno, 7, children, nullValue()); + $$ = newNode(Stmt, $1->line, 7, children, nullValue()); } | WHILE LP Exp RP Stmt { pNode children[5] = { $1, $2, $3, $4, $5 }; - $$ = newNode(Stmt, yylineno, 5, children, nullValue()); + $$ = newNode(Stmt, $1->line, 5, children, nullValue()); } | error SEMI ; @@ -187,7 +187,7 @@ Stmt: DefList: Def DefList { pNode children[2] = { $1, $2 }; - $$ = newNode(DefList, yylineno, 2, children, nullValue()); + $$ = newNode(DefList, $1->line, 2, children, nullValue()); } | { $$ = newNode(DefList, -1, 0, NULL, nullValue()); @@ -196,27 +196,27 @@ DefList: Def: Specifier DecList SEMI { pNode children[3] = { $1, $2, $3 }; - $$ = newNode(Def, yylineno, 3, children, nullValue()); + $$ = newNode(Def, $1->line, 3, children, nullValue()); } ; DecList: Dec { pNode children[1] = { $1 }; - $$ = newNode(DecList, yylineno, 1, children, nullValue()); + $$ = newNode(DecList, $1->line, 1, children, nullValue()); } | Dec COMMA DecList { pNode children[3] = { $1, $2, $3 }; - $$ = newNode(DecList, yylineno, 3, children, nullValue()); + $$ = newNode(DecList, $1->line, 3, children, nullValue()); } ; Dec: VarDec { pNode children[1] = { $1 }; - $$ = newNode(Dec, yylineno, 1, children, nullValue()); + $$ = newNode(Dec, $1->line, 1, children, nullValue()); } | VarDec ASSIGNOP Exp { pNode children[3] = { $1, $2, $3 }; - $$ = newNode(Dec, yylineno, 3, children, nullValue()); + $$ = newNode(Dec, $1->line, 3, children, nullValue()); } ; @@ -224,82 +224,82 @@ Dec: Exp: Exp ASSIGNOP Exp { pNode children[3] = { $1, $2, $3 }; - $$ = newNode(Exp, yylineno, 3, children, nullValue()); + $$ = newNode(Exp, $1->line, 3, children, nullValue()); } | Exp AND Exp { pNode children[3] = { $1, $2, $3 }; - $$ = newNode(Exp, yylineno, 3, children, nullValue()); + $$ = newNode(Exp, $1->line, 3, children, nullValue()); } | Exp OR Exp { pNode children[3] = { $1, $2, $3 }; - $$ = newNode(Exp, yylineno, 3, children, nullValue()); + $$ = newNode(Exp, $1->line, 3, children, nullValue()); } | Exp PLUS Exp { pNode children[3] = { $1, $2, $3 }; - $$ = newNode(Exp, yylineno, 3, children, nullValue()); + $$ = newNode(Exp, $1->line, 3, children, nullValue()); } | Exp MINUS Exp { pNode children[3] = { $1, $2, $3 }; - $$ = newNode(Exp, yylineno, 3, children, nullValue()); + $$ = newNode(Exp, $1->line, 3, children, nullValue()); } | Exp TIMES Exp { pNode children[3] = { $1, $2, $3 }; - $$ = newNode(Exp, yylineno, 3, children, nullValue()); + $$ = newNode(Exp, $1->line, 3, children, nullValue()); } | Exp DIV Exp { pNode children[3] = { $1, $2, $3 }; - $$ = newNode(Exp, yylineno, 3, children, nullValue()); + $$ = newNode(Exp, $1->line, 3, children, nullValue()); } | LP Exp RP { pNode children[3] = { $1, $2, $3 }; - $$ = newNode(Exp, yylineno, 3, children, nullValue()); + $$ = newNode(Exp, $1->line, 3, children, nullValue()); } | MINUS Exp { pNode children[2] = { $1, $2 }; - $$ = newNode(Exp, yylineno, 2, children, nullValue()); + $$ = newNode(Exp, $1->line, 2, children, nullValue()); } | NOT Exp { pNode children[2] = { $1, $2 }; - $$ = newNode(Exp, yylineno, 2, children, nullValue()); + $$ = newNode(Exp, $1->line, 2, children, nullValue()); } | ID LP Args RP { pNode children[4] = { $1, $2, $3, $4 }; - $$ = newNode(Exp, yylineno, 4, children, nullValue()); + $$ = newNode(Exp, $1->line, 4, children, nullValue()); } | ID LP RP { pNode children[3] = { $1, $2, $3 }; - $$ = newNode(Exp, yylineno, 3, children, nullValue()); + $$ = newNode(Exp, $1->line, 3, children, nullValue()); } | Exp LB Exp RB { pNode children[4] = { $1, $2, $3, $4 }; - $$ = newNode(Exp, yylineno, 4, children, nullValue()); + $$ = newNode(Exp, $1->line, 4, children, nullValue()); } | Exp DOT ID { pNode children[3] = { $1, $2, $3 }; - $$ = newNode(Exp, yylineno, 3, children, nullValue()); + $$ = newNode(Exp, $1->line, 3, children, nullValue()); } | ID { pNode children[1] = { $1 }; - $$ = newNode(Exp, yylineno, 1, children, nullValue()); + $$ = newNode(Exp, $1->line, 1, children, nullValue()); } | INTEGER { pNode children[1] = { $1 }; - $$ = newNode(Exp, yylineno, 1, children, nullValue()); + $$ = newNode(Exp, $1->line, 1, children, nullValue()); } | FLOAT { pNode children[1] = { $1 }; - $$ = newNode(Exp, yylineno, 1, children, nullValue()); + $$ = newNode(Exp, $1->line, 1, children, nullValue()); } ; Args: Exp COMMA Args { pNode children[3] = { $1, $2, $3 }; - $$ = newNode(Args, yylineno, 3, children, nullValue()); + $$ = newNode(Args, $1->line, 3, children, nullValue()); } | Exp { pNode children[1] = { $1 }; - $$ = newNode(Exp, yylineno, 1, children, nullValue()); + $$ = newNode(Exp, $1->line, 1, children, nullValue()); } ;