From ded927198046602adbd3f9b1cd5ca94e27ee3ccd Mon Sep 17 00:00:00 2001 From: dorley174 Date: Thu, 20 Nov 2025 10:07:30 +0300 Subject: [PATCH 1/2] added void tests --- main.cpp | 7 +++++-- mycompiler | Bin 177144 -> 177144 bytes tests/test6.o | 7 +++++++ 3 files changed, 12 insertions(+), 2 deletions(-) create mode 100644 tests/test6.o diff --git a/main.cpp b/main.cpp index 94b00f9..4a30878 100644 --- a/main.cpp +++ b/main.cpp @@ -49,7 +49,10 @@ int main(int argc, char** argv) { return 2; } - std::cout << "\n=== Semantic Analysis ===\n"; + std::cout << "\n=== ORIGINAL AST ===\n"; + g_program->print(std::cout); + + std::cout << "\n=== SEMANTIC ANALYSIS ===\n"; SemanticAnalyzer analyzer; SemanticResult res = analyzer.analyze(g_program); @@ -82,7 +85,7 @@ int main(int argc, char** argv) { std::cout << "\n=== Final AST (After Semantic Analysis) ===\n"; g_program->print(std::cout); - std::cout << "\n=== Interpretation ===\n"; + std::cout << "\n=== INTERPRETATION ===\n"; Interpreter interp(g_program); interp.run(); diff --git a/mycompiler b/mycompiler index 6a97839fc13d7a847d579e95be378d5047bcaccb..3aed8c57fa4ee9e9771bcd17b1072547339a49a7 100644 GIT binary patch delta 28688 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 F{vVh_kd*)c delta 28583 zcmaKVc|gqh|Np$+Ob4Y2-K7&1sZ)3MNigGQAWQ{RoU+jzBwVS=%yJ5*K zLaZxx*SgiNUGLd;DeGR_{2s6O`#m+apYN|f=Jk9%@7MEnA2Ypr)acctMtQD6+3@x5 zk8RH`A}aoOmO7G9+ifGIjB4BdL=s9IlgngcO-gmblji#zTX)JIc(b5O@y9I}^`Ft; zeuM3Y_pfO%+M1;8H#Txg|>{T-J5dPmll`IjhR1sZOCJjjnfcp?OX=jw=7U z^f-D7bQP^~a&ap=C<_JthsW1Bl%&vs&Mq|B*~T%s9zBIF1HFjub#`&{DU@|AsK--8 z%fXXI9bH`9RNu%v`Sp0RX}n7)DWK`#DcddcoUg}IO1HX%hF2bvsbW29++i7CSr4zG z#5FX$Y==zM1k{Z|(H0ZvG1n5vbo;+F(o>J=Q?&6lMI9*ncr-;V8hY}4< z2Tz=$$EIc70&D12iRT*Eb5t%^SUnzu%pqI0hp#N6<2>5&n0dIk ztBPf&?D|Yc>1i;<(JBuYxBT-m)Ao8ydDPdFH>!c2E^a9oWS-J`JlXq~c@D5f%e?0A zLh`B6Kh!;6BX^?gz`8{)bENG9+PRfE$mINbWFNXPAk?i)5iY7nO`)d(q)HBOfic^b z;A|@EQ3cgC6GsQO6<1>v0wF)J9bR<3ts1Bd! z>0x}{q{ddELgjVp-nt#Jp^2?Si7Q=*&p^5ZpKaE-10FN~JZ-2yoTv zo`{>SAcM5*8dCk@02^`MWtA#P_fo9BvM=fL2Da0D2pArSW`q=4<1ZDps9nWk*)O7;7M5@ z*>XFvf8Qsnc->iXRF%n;ko%WIZaK=S&58X8c$LG7DxNb$`DIA9lMLSl6rhcXUf|}g zsb6t&&wv!I-f1c%l5{V$x)QCfC*0rRN>tg415#8Dx%VNHWC(FVETODwE*M9ls5dK3 zCar#Sz?3AEH!U&dK}NjR5K;m1q`V^yA*0njP6A&TtZDUwZM6Cbp7rHfUC9w%F-f}L zMMs{`DfWSa%=0KxIc+=Cjg-({LkBwNJ~o+*fz@CzL0;=mJ=DN#S%CQ;uJX2e$9OI-=K^f7HZ%+GeO#QH!?qp`#Mv$iO?Gmz5i zhr-EBN$qz$Z{g*aJfCwGUOvezhBp&t$mZ=Nx!8$!i7NcMR(D^kw>Bkfz>ugYu0RpA zhS32Utv;$7xVVdjQF8hui9Q&n&I;t{TvLXXBy7XEUBipOsMV?MKoc2;7%unVoJwVk zki!v>4k1JAvD=`(4;zV+<0ayIlD#N#oIb5(mr)C}JeZ%

EgJ*|B5pz+?s~p5*YP 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 O0%Wm1k+1`DoGRt1Wq`Ipfp_wlhE_u{eu5|+{i zoRu8ajg_{6dxr|$+6tdFbmQkZ{O?yeQKcajR2o$gyA~$6xaVJ$3mUAHmp2`vYN{%` z$b@jA9r0n|;R61D!bO>`3=yiE3Y&_ha&lRzOb%4EyimybY&|Du*OP7xHf{t}6fV3g zRQ|~P+6%qhitftdWsv578x*!|wyZtZaziGMlM~gh8uDI=d`HHI$-=7B3K^XQWPEY( zb$g*V(XjXkW8i0* zBU>FK%!64R4&Yw{Ft<*UXNjGl5JL`-ZrS`A41czAqB>@;LWO8lY3vjy7Zk|BY>5ek z|3x&B4W+TFPKcZNUvhMksj8g{Igd^4%pEwuKI$y=LTJj7#hm5X1xX(6l#%$b^e*r! zo9Vj1oiKKdBhejWkzhpPi4RMS?O-3p z3+>#B7RkLdWNqj>@$fzGo{XQRkiQ3+$0?6Fc1MVPSWtIF^QJOpq9sXx_uN$~ zUqmDgm#2tk3fqbV|FwZ#?+ynwjP!tPGIQ&}EAe|-CRg@DbqR|%ZlQpsaxN8HC~=*U zxgN@is+pI}6~<11%gsD_cU8#mfGoG^DoA4-_3eoynGNKLiY?AnewDIRkP)|qiHMYW#pSDT`3B34&6S-3SGajzH`mm>XxW9b;WB?KMJy3wa-nVe z21?>W?r3;W)2Ftk?Sq z^WDtrDsyqd+nc4!A&u_!x*ysN)=mA9%Vs0{ONG$&2Qrym1JcdBY&Ca~$q}*!Oj`pa z8Mgr#!OZ&sb2H70G`q1LTyEywgfdU54udRL=qX6Uux~O9=dppwU^Xv&&E0!-2U(X7 zTL!N1vU)Z29ArL#72T5~)Ksb8#vNrFnBJfj{rxqhg~~%LcpzFsGQO?E{~k1y*?(5J zF{uoM59XakmP}PyDJ`>zZRKS1zQx>kB0%Ql$!FIFqC8+%s2!MA)kd0g-rd15E3iPpivJM zwz-*iM}1_Cs!uV#^M;tre1}0gPFbp$o6!}Jd08>zbF#9_P;FME8+Mb)sB@5o%DwEP zVd(Ms?7}cOR>WQpgJan&emF1NS~h1m7N(_RWZ_MH<#bxSS;w{ELhr=1+cJ8zV&ZUj znQY!`A}js<0D!lrP4)WaLj_;NQb%x?X0Syg;8Hf*F+vJb)d+Z|V!k8Mr|T~|VtdNL zC}2}Tb~kSltQC{*Dde&>Y~M)e#DoquOumlqAn{@G?;u3k%5eUkB4me=nfn>X(m{rd z4$N+O_hqu3!nGJ&JkA<+jVmcr7HeA-@@=h5RxvV4=pAm}6b=()db>oKT))pH0M9G8 zfGr#)Il2SMf0i-dDbjhYigTeQj7I0kXUj%Q{%#&EgeHbL%l*(zaY#VraewPO+Am4A zsJSIGj#T(FfS22m;~3t|lx~o%kasF%EWJS%%DydpXN<6Pknm~_yZx=u&i0UWRiMIj w?^qy>c_RyiP}`b+qQ}-32pt=}`d#+%)$i + output("before"); + return; + output("after"); + output("after2") +end From 4ceec8994af34cd0efa8f64f7e54ca241f577e3c Mon Sep 17 00:00:00 2001 From: dorley174 Date: Thu, 20 Nov 2025 10:22:55 +0300 Subject: [PATCH 2/2] added return rules for different method data types --- ast.hpp | 7 +- mycompiler | Bin 177144 -> 181240 bytes parser.cpp | 308 ++++++++++++++++++++++++++------------------------- parser.y | 1 + semantic.cpp | 20 +++- 5 files changed, 179 insertions(+), 157 deletions(-) diff --git a/ast.hpp b/ast.hpp index 76c9029..f34d79d 100644 --- a/ast.hpp +++ b/ast.hpp @@ -90,9 +90,14 @@ struct ReturnStmt : Stmt { Expr* value; explicit ReturnStmt(Expr* v) : value(v) {} ~ReturnStmt() { delete value; } - void print(std::ostream& os, int indent) const override { doIndent(os, indent); os << "return\n"; value->print(os, indent + 1); } + void print(std::ostream& os, int indent) const override { + doIndent(os, indent); + os << "return\n"; + if (value) value->print(os, indent + 1); + } }; + struct IfStmt : Stmt { Expr* cond; Stmt* thenS; Stmt* elseS; IfStmt(Expr* c, Stmt* t, Stmt* e) : cond(c), thenS(t), elseS(e) {} diff --git a/mycompiler b/mycompiler index 3aed8c57fa4ee9e9771bcd17b1072547339a49a7..16b490479eb9ef259a98f64e0b595239ad8aaf3d 100644 GIT binary patch delta 69845 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 diff --git a/parser.cpp b/parser.cpp index 72197af..3509e2d 100644 --- a/parser.cpp +++ b/parser.cpp @@ -521,7 +521,7 @@ union yyalloc /* YYNNTS -- Number of nonterminals. */ #define YYNNTS 35 /* YYNRULES -- Number of rules. */ -#define YYNRULES 81 +#define YYNRULES 82 /* YYNSTATES -- Number of states. */ #define YYNSTATES 149 @@ -580,11 +580,11 @@ static const yytype_int16 yyrline[] = 112, 113, 117, 119, 129, 131, 141, 143, 145, 150, 163, 164, 168, 169, 173, 178, 188, 189, 190, 191, 192, 193, 194, 195, 205, 206, 207, 208, 209, 210, - 214, 224, 231, 235, 242, 243, 247, 257, 261, 262, - 266, 267, 271, 272, 273, 277, 278, 279, 283, 284, - 285, 289, 290, 294, 296, 298, 300, 305, 306, 310, - 311, 315, 316, 317, 318, 319, 320, 321, 325, 330, - 331, 332 + 211, 215, 225, 232, 236, 243, 244, 248, 258, 262, + 263, 267, 268, 272, 273, 274, 278, 279, 280, 284, + 285, 286, 290, 291, 295, 297, 299, 301, 306, 307, + 311, 312, 316, 317, 318, 319, 320, 321, 322, 326, + 331, 332, 333 }; #endif @@ -627,7 +627,7 @@ yysymbol_name (yysymbol_kind_t yysymbol) #define yypact_value_is_default(Yyn) \ ((Yyn) == YYPACT_NINF) -#define YYTABLE_NINF (-80) +#define YYTABLE_NINF (-81) #define yytable_value_is_error(Yyn) \ 0 @@ -661,18 +661,18 @@ static const yytype_int8 yydefact[] = 0, 0, 0, 2, 4, 0, 1, 3, 7, 0, 0, 0, 6, 9, 10, 11, 0, 0, 5, 8, 0, 21, 12, 0, 0, 0, 20, 23, 0, 16, - 0, 0, 0, 0, 0, 14, 0, 73, 74, 0, - 0, 75, 71, 72, 78, 0, 47, 49, 51, 54, - 57, 60, 62, 66, 76, 0, 0, 24, 0, 22, - 0, 13, 0, 75, 61, 18, 0, 0, 0, 0, - 0, 0, 0, 68, 0, 0, 0, 0, 0, 17, - 0, 15, 77, 50, 52, 53, 55, 56, 58, 59, - 70, 0, 67, 0, 64, 0, 48, 80, 0, 63, - 0, 65, 81, 0, 0, 0, 0, 19, 25, 33, - 31, 32, 39, 0, 69, 0, 34, 0, 0, 29, - 27, 28, 30, 0, 0, 0, 0, 26, 38, 47, - 35, 40, 45, 0, 0, 0, 0, 0, 0, 43, - 46, 37, 36, 44, 0, 41, 0, 45, 42 + 0, 0, 0, 0, 0, 14, 0, 74, 75, 0, + 0, 76, 72, 73, 79, 0, 48, 50, 52, 55, + 58, 61, 63, 67, 77, 0, 0, 24, 0, 22, + 0, 13, 0, 76, 62, 18, 0, 0, 0, 0, + 0, 0, 0, 69, 0, 0, 0, 0, 0, 17, + 0, 15, 78, 51, 53, 54, 56, 57, 59, 60, + 71, 0, 68, 0, 65, 0, 49, 81, 0, 64, + 0, 66, 82, 0, 35, 0, 0, 19, 25, 33, + 31, 32, 40, 0, 70, 0, 34, 0, 0, 29, + 27, 28, 30, 0, 0, 0, 0, 26, 39, 48, + 36, 41, 46, 0, 0, 0, 0, 0, 0, 44, + 47, 38, 37, 45, 0, 42, 0, 46, 43 }; /* YYPGOTO[NTERM-NUM]. */ @@ -710,7 +710,7 @@ static const yytype_int16 yytable[] = 38, 28, 78, 128, 39, 37, 38, 71, 72, 24, 39, 136, 137, 40, 141, 142, 130, 144, 32, 40, 33, 41, 22, 42, 43, 84, 85, 41, 22, 42, - 43, 37, 38, 86, 87, -79, 39, 34, 58, 66, + 43, 37, 38, 86, 87, -80, 39, 34, 58, 66, 65, 79, 94, 97, 98, 40, 82, 99, 100, 101, 115, 122, 102, 63, 22, 42, 43, 124, 125, 126, 127, 145, 146, 7, 59, 19, 148, 0, 83 @@ -764,11 +764,11 @@ static const yytype_int8 yyr1[] = 47, 47, 48, 48, 49, 49, 50, 50, 50, 51, 52, 52, 53, 53, 54, 55, 56, 56, 56, 56, 56, 56, 56, 56, 57, 57, 57, 57, 57, 57, - 58, 59, 60, 60, 61, 61, 62, 63, 64, 64, - 65, 65, 66, 66, 66, 67, 67, 67, 68, 68, - 68, 69, 69, 70, 70, 70, 70, 71, 71, 72, - 72, 73, 73, 73, 73, 73, 73, 73, 74, 75, - 75, 75 + 57, 58, 59, 60, 60, 61, 61, 62, 63, 64, + 64, 65, 65, 66, 66, 66, 67, 67, 67, 68, + 68, 68, 69, 69, 70, 70, 70, 70, 71, 71, + 72, 72, 73, 73, 73, 73, 73, 73, 73, 74, + 75, 75, 75 }; /* YYR2[RULE-NUM] -- Number of symbols on the right-hand side of rule RULE-NUM. */ @@ -777,12 +777,12 @@ static const yytype_int8 yyr2[] = 0, 2, 1, 2, 1, 5, 1, 0, 2, 1, 1, 1, 1, 4, 1, 3, 5, 7, 7, 9, 1, 0, 3, 1, 3, 1, 3, 2, 2, 2, - 2, 1, 1, 1, 2, 4, 6, 6, 3, 1, - 1, 6, 5, 1, 2, 0, 5, 1, 3, 1, - 3, 1, 3, 3, 1, 3, 3, 1, 3, 3, - 1, 2, 1, 4, 3, 4, 1, 1, 0, 3, - 1, 1, 1, 1, 1, 1, 1, 3, 1, 1, - 3, 4 + 2, 1, 1, 1, 2, 1, 4, 6, 6, 3, + 1, 1, 6, 5, 1, 2, 0, 5, 1, 3, + 1, 3, 1, 3, 3, 1, 3, 3, 1, 3, + 3, 1, 2, 1, 4, 3, 4, 1, 1, 0, + 3, 1, 1, 1, 1, 1, 1, 1, 3, 1, + 1, 3, 4 }; @@ -1745,306 +1745,312 @@ yyparse (void) #line 1746 "parser.cpp" break; - case 35: /* simple_stmt: VAR IDENTIFIER COLON type_spec */ + case 35: /* simple_stmt: RETURN */ #line 206 "parser.y" - { (yyval.stmt) = new AST::VarDeclStmt(new AST::VarDecl((yyvsp[-2].cstr), (yyvsp[0].cstr), nullptr)); free((yyvsp[-2].cstr)); free((yyvsp[0].cstr)); } + { (yyval.stmt) = new AST::ReturnStmt(nullptr); } #line 1752 "parser.cpp" break; - case 36: /* simple_stmt: VAR IDENTIFIER COLON type_spec EQUAL expr */ + case 36: /* simple_stmt: VAR IDENTIFIER COLON type_spec */ #line 207 "parser.y" - { (yyval.stmt) = new AST::VarDeclStmt(new AST::VarDecl((yyvsp[-4].cstr), (yyvsp[-2].cstr), (yyvsp[0].expr))); free((yyvsp[-4].cstr)); free((yyvsp[-2].cstr)); } + { (yyval.stmt) = new AST::VarDeclStmt(new AST::VarDecl((yyvsp[-2].cstr), (yyvsp[0].cstr), nullptr)); free((yyvsp[-2].cstr)); free((yyvsp[0].cstr)); } #line 1758 "parser.cpp" break; - case 37: /* simple_stmt: VAR IDENTIFIER COLON type_spec ASSIGN expr */ + case 37: /* simple_stmt: VAR IDENTIFIER COLON type_spec EQUAL expr */ #line 208 "parser.y" { (yyval.stmt) = new AST::VarDeclStmt(new AST::VarDecl((yyvsp[-4].cstr), (yyvsp[-2].cstr), (yyvsp[0].expr))); free((yyvsp[-4].cstr)); free((yyvsp[-2].cstr)); } #line 1764 "parser.cpp" break; - case 38: /* simple_stmt: lvalue ASSIGN expr */ + case 38: /* simple_stmt: VAR IDENTIFIER COLON type_spec ASSIGN expr */ #line 209 "parser.y" - { (yyval.stmt) = new AST::ExprStmt(new AST::Binary(AST::BinOp::Assign, (yyvsp[-2].expr), (yyvsp[0].expr))); } + { (yyval.stmt) = new AST::VarDeclStmt(new AST::VarDecl((yyvsp[-4].cstr), (yyvsp[-2].cstr), (yyvsp[0].expr))); free((yyvsp[-4].cstr)); free((yyvsp[-2].cstr)); } #line 1770 "parser.cpp" break; - case 39: /* simple_stmt: expr */ + case 39: /* simple_stmt: lvalue ASSIGN expr */ #line 210 "parser.y" - { (yyval.stmt) = new AST::ExprStmt((yyvsp[0].expr)); } + { (yyval.stmt) = new AST::ExprStmt(new AST::Binary(AST::BinOp::Assign, (yyvsp[-2].expr), (yyvsp[0].expr))); } #line 1776 "parser.cpp" break; - case 40: /* block_stmt: stmt_list */ -#line 215 "parser.y" + case 40: /* simple_stmt: expr */ +#line 211 "parser.y" + { (yyval.stmt) = new AST::ExprStmt((yyvsp[0].expr)); } +#line 1782 "parser.cpp" + break; + + case 41: /* block_stmt: stmt_list */ +#line 216 "parser.y" { auto* b = new AST::Block(); for (auto* s : *(yyvsp[0].stmtlist)) b->stmts.push_back(s); delete (yyvsp[0].stmtlist); (yyval.stmt) = b; } -#line 1787 "parser.cpp" +#line 1793 "parser.cpp" break; - case 41: /* if_stmt: IF expr THEN block_stmt elif_tail END */ -#line 225 "parser.y" + case 42: /* if_stmt: IF expr THEN block_stmt elif_tail END */ +#line 226 "parser.y" { (yyval.stmt) = new AST::IfStmt((yyvsp[-4].expr), (yyvsp[-2].stmt), (yyvsp[-1].stmt)); } -#line 1795 "parser.cpp" +#line 1801 "parser.cpp" break; - case 42: /* elif_tail: ELSEIF expr THEN block_stmt elif_tail */ -#line 232 "parser.y" + case 43: /* elif_tail: ELSEIF expr THEN block_stmt elif_tail */ +#line 233 "parser.y" { (yyval.stmt) = new AST::IfStmt((yyvsp[-3].expr), (yyvsp[-1].stmt), (yyvsp[0].stmt)); } -#line 1803 "parser.cpp" +#line 1809 "parser.cpp" break; - case 43: /* elif_tail: opt_else */ -#line 236 "parser.y" + case 44: /* elif_tail: opt_else */ +#line 237 "parser.y" { (yyval.stmt) = (yyvsp[0].stmt) ? (yyvsp[0].stmt) : static_cast(new AST::Block()); } -#line 1811 "parser.cpp" +#line 1817 "parser.cpp" break; - case 44: /* opt_else: ELSE block_stmt */ -#line 242 "parser.y" + case 45: /* opt_else: ELSE block_stmt */ +#line 243 "parser.y" { (yyval.stmt) = (yyvsp[0].stmt); } -#line 1817 "parser.cpp" +#line 1823 "parser.cpp" break; - case 45: /* opt_else: %empty */ -#line 243 "parser.y" + case 46: /* opt_else: %empty */ +#line 244 "parser.y" { (yyval.stmt) = nullptr; } -#line 1823 "parser.cpp" +#line 1829 "parser.cpp" break; - case 46: /* while_stmt: WHILE expr DO stmt_list END */ -#line 248 "parser.y" + case 47: /* while_stmt: WHILE expr DO stmt_list END */ +#line 249 "parser.y" { auto* b = new AST::Block(); for (auto* s : *(yyvsp[-1].stmtlist)) b->stmts.push_back(s); delete (yyvsp[-1].stmtlist); (yyval.stmt) = new AST::WhileStmt((yyvsp[-3].expr), b); } -#line 1834 "parser.cpp" - break; - - case 47: /* expr: assign_expr */ -#line 257 "parser.y" - { (yyval.expr) = (yyvsp[0].expr); } #line 1840 "parser.cpp" break; - case 48: /* assign_expr: lvalue ASSIGN assign_expr */ -#line 261 "parser.y" - { (yyval.expr) = new AST::Binary(AST::BinOp::Assign, (yyvsp[-2].expr), (yyvsp[0].expr)); } + case 48: /* expr: assign_expr */ +#line 258 "parser.y" + { (yyval.expr) = (yyvsp[0].expr); } #line 1846 "parser.cpp" break; - case 49: /* assign_expr: equality_expr */ + case 49: /* assign_expr: lvalue ASSIGN assign_expr */ #line 262 "parser.y" - { (yyval.expr) = (yyvsp[0].expr); } + { (yyval.expr) = new AST::Binary(AST::BinOp::Assign, (yyvsp[-2].expr), (yyvsp[0].expr)); } #line 1852 "parser.cpp" break; - case 50: /* equality_expr: equality_expr EQEQ relational_expr */ -#line 266 "parser.y" - { (yyval.expr) = new AST::Binary(AST::BinOp::Eq, (yyvsp[-2].expr), (yyvsp[0].expr)); } + case 50: /* assign_expr: equality_expr */ +#line 263 "parser.y" + { (yyval.expr) = (yyvsp[0].expr); } #line 1858 "parser.cpp" break; - case 51: /* equality_expr: relational_expr */ + case 51: /* equality_expr: equality_expr EQEQ relational_expr */ #line 267 "parser.y" - { (yyval.expr) = (yyvsp[0].expr); } + { (yyval.expr) = new AST::Binary(AST::BinOp::Eq, (yyvsp[-2].expr), (yyvsp[0].expr)); } #line 1864 "parser.cpp" break; - case 52: /* relational_expr: relational_expr GT additive_expr */ -#line 271 "parser.y" - { (yyval.expr) = new AST::Binary(AST::BinOp::Gt, (yyvsp[-2].expr), (yyvsp[0].expr)); } + case 52: /* equality_expr: relational_expr */ +#line 268 "parser.y" + { (yyval.expr) = (yyvsp[0].expr); } #line 1870 "parser.cpp" break; - case 53: /* relational_expr: relational_expr LT additive_expr */ + case 53: /* relational_expr: relational_expr GT additive_expr */ #line 272 "parser.y" - { (yyval.expr) = new AST::Binary(AST::BinOp::Lt, (yyvsp[-2].expr), (yyvsp[0].expr)); } + { (yyval.expr) = new AST::Binary(AST::BinOp::Gt, (yyvsp[-2].expr), (yyvsp[0].expr)); } #line 1876 "parser.cpp" break; - case 54: /* relational_expr: additive_expr */ + case 54: /* relational_expr: relational_expr LT additive_expr */ #line 273 "parser.y" - { (yyval.expr) = (yyvsp[0].expr); } + { (yyval.expr) = new AST::Binary(AST::BinOp::Lt, (yyvsp[-2].expr), (yyvsp[0].expr)); } #line 1882 "parser.cpp" break; - case 55: /* additive_expr: additive_expr PLUS multiplicative_expr */ -#line 277 "parser.y" - { (yyval.expr) = new AST::Binary(AST::BinOp::Add, (yyvsp[-2].expr), (yyvsp[0].expr)); } + case 55: /* relational_expr: additive_expr */ +#line 274 "parser.y" + { (yyval.expr) = (yyvsp[0].expr); } #line 1888 "parser.cpp" break; - case 56: /* additive_expr: additive_expr MINUS multiplicative_expr */ + case 56: /* additive_expr: additive_expr PLUS multiplicative_expr */ #line 278 "parser.y" - { (yyval.expr) = new AST::Binary(AST::BinOp::Sub, (yyvsp[-2].expr), (yyvsp[0].expr)); } + { (yyval.expr) = new AST::Binary(AST::BinOp::Add, (yyvsp[-2].expr), (yyvsp[0].expr)); } #line 1894 "parser.cpp" break; - case 57: /* additive_expr: multiplicative_expr */ + case 57: /* additive_expr: additive_expr MINUS multiplicative_expr */ #line 279 "parser.y" - { (yyval.expr) = (yyvsp[0].expr); } + { (yyval.expr) = new AST::Binary(AST::BinOp::Sub, (yyvsp[-2].expr), (yyvsp[0].expr)); } #line 1900 "parser.cpp" break; - case 58: /* multiplicative_expr: multiplicative_expr STAR unary_expr */ -#line 283 "parser.y" - { (yyval.expr) = new AST::Binary(AST::BinOp::Mul, (yyvsp[-2].expr), (yyvsp[0].expr)); } + case 58: /* additive_expr: multiplicative_expr */ +#line 280 "parser.y" + { (yyval.expr) = (yyvsp[0].expr); } #line 1906 "parser.cpp" break; - case 59: /* multiplicative_expr: multiplicative_expr SLASH unary_expr */ + case 59: /* multiplicative_expr: multiplicative_expr STAR unary_expr */ #line 284 "parser.y" - { (yyval.expr) = new AST::Binary(AST::BinOp::Div, (yyvsp[-2].expr), (yyvsp[0].expr)); } + { (yyval.expr) = new AST::Binary(AST::BinOp::Mul, (yyvsp[-2].expr), (yyvsp[0].expr)); } #line 1912 "parser.cpp" break; - case 60: /* multiplicative_expr: unary_expr */ + case 60: /* multiplicative_expr: multiplicative_expr SLASH unary_expr */ #line 285 "parser.y" - { (yyval.expr) = (yyvsp[0].expr); } + { (yyval.expr) = new AST::Binary(AST::BinOp::Div, (yyvsp[-2].expr), (yyvsp[0].expr)); } #line 1918 "parser.cpp" break; - case 61: /* unary_expr: MINUS unary_expr */ -#line 289 "parser.y" - { (yyval.expr) = new AST::Unary(AST::Unary::Op::Neg, (yyvsp[0].expr)); } + case 61: /* multiplicative_expr: unary_expr */ +#line 286 "parser.y" + { (yyval.expr) = (yyvsp[0].expr); } #line 1924 "parser.cpp" break; - case 62: /* unary_expr: postfix_expr */ + case 62: /* unary_expr: MINUS unary_expr */ #line 290 "parser.y" - { (yyval.expr) = (yyvsp[0].expr); } + { (yyval.expr) = new AST::Unary(AST::Unary::Op::Neg, (yyvsp[0].expr)); } #line 1930 "parser.cpp" break; - case 63: /* postfix_expr: postfix_expr LPAREN opt_args RPAREN */ -#line 295 "parser.y" - { auto* call = new AST::Call((yyvsp[-3].expr)); for (auto* e : *(yyvsp[-1].exprlist)) call->args.push_back(e); delete (yyvsp[-1].exprlist); (yyval.expr) = call; } + case 63: /* unary_expr: postfix_expr */ +#line 291 "parser.y" + { (yyval.expr) = (yyvsp[0].expr); } #line 1936 "parser.cpp" break; - case 64: /* postfix_expr: postfix_expr DOT IDENTIFIER */ -#line 297 "parser.y" - { (yyval.expr) = new AST::MemberAccess((yyvsp[-2].expr), (yyvsp[0].cstr)); free((yyvsp[0].cstr)); } + case 64: /* postfix_expr: postfix_expr LPAREN opt_args RPAREN */ +#line 296 "parser.y" + { auto* call = new AST::Call((yyvsp[-3].expr)); for (auto* e : *(yyvsp[-1].exprlist)) call->args.push_back(e); delete (yyvsp[-1].exprlist); (yyval.expr) = call; } #line 1942 "parser.cpp" break; - case 65: /* postfix_expr: postfix_expr LBRACKET expr RBRACKET */ -#line 299 "parser.y" - { (yyval.expr) = new AST::Index((yyvsp[-3].expr), (yyvsp[-1].expr)); } + case 65: /* postfix_expr: postfix_expr DOT IDENTIFIER */ +#line 298 "parser.y" + { (yyval.expr) = new AST::MemberAccess((yyvsp[-2].expr), (yyvsp[0].cstr)); free((yyvsp[0].cstr)); } #line 1948 "parser.cpp" break; - case 66: /* postfix_expr: primary_expr */ -#line 301 "parser.y" - { (yyval.expr) = (yyvsp[0].expr); } + case 66: /* postfix_expr: postfix_expr LBRACKET expr RBRACKET */ +#line 300 "parser.y" + { (yyval.expr) = new AST::Index((yyvsp[-3].expr), (yyvsp[-1].expr)); } #line 1954 "parser.cpp" break; - case 67: /* opt_args: arg_list */ -#line 305 "parser.y" - { (yyval.exprlist) = (yyvsp[0].exprlist); } + case 67: /* postfix_expr: primary_expr */ +#line 302 "parser.y" + { (yyval.expr) = (yyvsp[0].expr); } #line 1960 "parser.cpp" break; - case 68: /* opt_args: %empty */ + case 68: /* opt_args: arg_list */ #line 306 "parser.y" - { (yyval.exprlist) = new std::vector(); } + { (yyval.exprlist) = (yyvsp[0].exprlist); } #line 1966 "parser.cpp" break; - case 69: /* arg_list: arg_list COMMA expr */ -#line 310 "parser.y" - { (yyval.exprlist) = (yyvsp[-2].exprlist); (yyvsp[-2].exprlist)->push_back((yyvsp[0].expr)); } + case 69: /* opt_args: %empty */ +#line 307 "parser.y" + { (yyval.exprlist) = new std::vector(); } #line 1972 "parser.cpp" break; - case 70: /* arg_list: expr */ + case 70: /* arg_list: arg_list COMMA expr */ #line 311 "parser.y" - { (yyval.exprlist) = new std::vector(); (yyval.exprlist)->push_back((yyvsp[0].expr)); } + { (yyval.exprlist) = (yyvsp[-2].exprlist); (yyvsp[-2].exprlist)->push_back((yyvsp[0].expr)); } #line 1978 "parser.cpp" break; - case 71: /* primary_expr: INT_LITERAL */ -#line 315 "parser.y" - { (yyval.expr) = new AST::IntLiteral((yyvsp[0].ival)); } + case 71: /* arg_list: expr */ +#line 312 "parser.y" + { (yyval.exprlist) = new std::vector(); (yyval.exprlist)->push_back((yyvsp[0].expr)); } #line 1984 "parser.cpp" break; - case 72: /* primary_expr: STRING_LITERAL */ + case 72: /* primary_expr: INT_LITERAL */ #line 316 "parser.y" - { (yyval.expr) = new AST::StringLiteral((yyvsp[0].cstr)); free((yyvsp[0].cstr)); } + { (yyval.expr) = new AST::IntLiteral((yyvsp[0].ival)); } #line 1990 "parser.cpp" break; - case 73: /* primary_expr: TRUE */ + case 73: /* primary_expr: STRING_LITERAL */ #line 317 "parser.y" - { (yyval.expr) = new AST::BoolLiteral(true); } + { (yyval.expr) = new AST::StringLiteral((yyvsp[0].cstr)); free((yyvsp[0].cstr)); } #line 1996 "parser.cpp" break; - case 74: /* primary_expr: FALSE */ + case 74: /* primary_expr: TRUE */ #line 318 "parser.y" - { (yyval.expr) = new AST::BoolLiteral(false); } + { (yyval.expr) = new AST::BoolLiteral(true); } #line 2002 "parser.cpp" break; - case 75: /* primary_expr: IDENTIFIER */ + case 75: /* primary_expr: FALSE */ #line 319 "parser.y" - { (yyval.expr) = new AST::Identifier((yyvsp[0].cstr)); free((yyvsp[0].cstr)); } + { (yyval.expr) = new AST::BoolLiteral(false); } #line 2008 "parser.cpp" break; - case 76: /* primary_expr: type_as_expr */ + case 76: /* primary_expr: IDENTIFIER */ #line 320 "parser.y" - { (yyval.expr) = (yyvsp[0].expr); } + { (yyval.expr) = new AST::Identifier((yyvsp[0].cstr)); free((yyvsp[0].cstr)); } #line 2014 "parser.cpp" break; - case 77: /* primary_expr: LPAREN expr RPAREN */ + case 77: /* primary_expr: type_as_expr */ #line 321 "parser.y" - { (yyval.expr) = (yyvsp[-1].expr); } + { (yyval.expr) = (yyvsp[0].expr); } #line 2020 "parser.cpp" break; - case 78: /* type_as_expr: type_spec */ -#line 326 "parser.y" - { (yyval.expr) = new AST::Identifier((yyvsp[0].cstr)); free((yyvsp[0].cstr)); } + case 78: /* primary_expr: LPAREN expr RPAREN */ +#line 322 "parser.y" + { (yyval.expr) = (yyvsp[-1].expr); } #line 2026 "parser.cpp" break; - case 79: /* lvalue: IDENTIFIER */ -#line 330 "parser.y" - { (yyval.expr) = new AST::Identifier((yyvsp[0].cstr)); free((yyvsp[0].cstr)); } + case 79: /* type_as_expr: type_spec */ +#line 327 "parser.y" + { (yyval.expr) = new AST::Identifier((yyvsp[0].cstr)); free((yyvsp[0].cstr)); } #line 2032 "parser.cpp" break; - case 80: /* lvalue: lvalue DOT IDENTIFIER */ + case 80: /* lvalue: IDENTIFIER */ #line 331 "parser.y" - { (yyval.expr) = new AST::MemberAccess((yyvsp[-2].expr), (yyvsp[0].cstr)); free((yyvsp[0].cstr)); } + { (yyval.expr) = new AST::Identifier((yyvsp[0].cstr)); free((yyvsp[0].cstr)); } #line 2038 "parser.cpp" break; - case 81: /* lvalue: lvalue LBRACKET expr RBRACKET */ + case 81: /* lvalue: lvalue DOT IDENTIFIER */ #line 332 "parser.y" - { (yyval.expr) = new AST::Index((yyvsp[-3].expr), (yyvsp[-1].expr)); } + { (yyval.expr) = new AST::MemberAccess((yyvsp[-2].expr), (yyvsp[0].cstr)); free((yyvsp[0].cstr)); } #line 2044 "parser.cpp" break; + case 82: /* lvalue: lvalue LBRACKET expr RBRACKET */ +#line 333 "parser.y" + { (yyval.expr) = new AST::Index((yyvsp[-3].expr), (yyvsp[-1].expr)); } +#line 2050 "parser.cpp" + break; + -#line 2048 "parser.cpp" +#line 2054 "parser.cpp" default: break; } @@ -2268,7 +2274,7 @@ yyparse (void) return yyresult; } -#line 335 "parser.y" +#line 336 "parser.y" void yyerror(const char* s) { std::fprintf(stderr, "Parse error at line %d: %s\n", yylineno, s); } diff --git a/parser.y b/parser.y index bff846a..f0ffaf3 100644 --- a/parser.y +++ b/parser.y @@ -203,6 +203,7 @@ stmt simple_stmt : RETURN expr { $$ = new AST::ReturnStmt($2); } + | RETURN { $$ = new AST::ReturnStmt(nullptr); } | VAR IDENTIFIER COLON type_spec { $$ = new AST::VarDeclStmt(new AST::VarDecl($2, $4, nullptr)); free($2); free($4); } | VAR IDENTIFIER COLON type_spec EQUAL expr { $$ = new AST::VarDeclStmt(new AST::VarDecl($2, $4, $6)); free($2); free($4); } | VAR IDENTIFIER COLON type_spec ASSIGN expr { $$ = new AST::VarDeclStmt(new AST::VarDecl($2, $4, $6)); free($2); free($4); } diff --git a/semantic.cpp b/semantic.cpp index 3df43f4..4533628 100644 --- a/semantic.cpp +++ b/semantic.cpp @@ -217,16 +217,26 @@ void SemanticAnalyzer::analyzeStmt(AST::Stmt*& s) { if (!curMethod) { result.addError("Return used outside of method"); } else { - analyzeExpr(ret->value); - auto rv = typeOfExpr(ret->value); - if (!curMethod->returnType.empty()) { - if (rv != "" && curMethod->returnType != rv) { - result.addError("Return type mismatch in method '" + curMethod->name + "': expected " + curMethod->returnType + ", got " + rv); + if (curMethod->returnType == "Void") { + if (ret->value) { + analyzeExpr(ret->value); + result.addError("Void method '" + curMethod->name + "' must not return a value"); + } + } else { + if (!ret->value) { + result.addError("Non-void method '" + curMethod->name + "' must return a value of type '" + curMethod->returnType + "'"); + } else { + analyzeExpr(ret->value); + auto rv = typeOfExpr(ret->value); + if (rv != "" && curMethod->returnType != rv) { + result.addError("Return type mismatch in method '" + curMethod->name + "': expected " + curMethod->returnType + ", got " + rv); + } } } } return; } + if (auto* es = dynamic_cast(s)) { analyzeExpr(es->expr); return;