From 20f617016892048f280b7a786dc80747d15463cd Mon Sep 17 00:00:00 2001 From: Vu Tuan Minh Date: Wed, 30 Apr 2025 09:38:30 +0200 Subject: [PATCH] add ret void pour func void --- src/main/antlr/VSLParser.g | 4 +++ src/main/java/TP2/asd/toLLVM_Visitor.java | 20 +++++++++------ .../TP2/llvm/PrettyprinterLLVM_Visitor.java | 23 ++++++++++------- tests/aLaMain2.vsl | 24 +----------------- tests/fragment1/hello_world | Bin 0 -> 16016 bytes tests/fragment1/print1 | Bin 0 -> 16008 bytes tests/fragment1/print2 | Bin 0 -> 16000 bytes tests/fragment1/print3 | Bin 0 -> 16008 bytes tests/fragment1/print4 | Bin 0 -> 16360 bytes tests/fragment1/sequence | Bin 0 -> 16040 bytes tests/fragment2/call | Bin 0 -> 16040 bytes 11 files changed, 31 insertions(+), 40 deletions(-) create mode 100755 tests/fragment1/hello_world create mode 100755 tests/fragment1/print1 create mode 100755 tests/fragment1/print2 create mode 100755 tests/fragment1/print3 create mode 100755 tests/fragment1/print4 create mode 100755 tests/fragment1/sequence create mode 100755 tests/fragment2/call diff --git a/src/main/antlr/VSLParser.g b/src/main/antlr/VSLParser.g index ed53161..d6abee3 100644 --- a/src/main/antlr/VSLParser.g +++ b/src/main/antlr/VSLParser.g @@ -218,6 +218,10 @@ td_expression returns [Expression out]: ; lit returns [Expression out]: + MINUS n=lit { + $out = new BinopExpressionImp(Op.MINUS, new ConstImp(0), $n.out); + } + | NUMBER { $out = new ConstImp($NUMBER.int); } diff --git a/src/main/java/TP2/asd/toLLVM_Visitor.java b/src/main/java/TP2/asd/toLLVM_Visitor.java index 2db14ab..667909f 100644 --- a/src/main/java/TP2/asd/toLLVM_Visitor.java +++ b/src/main/java/TP2/asd/toLLVM_Visitor.java @@ -78,8 +78,8 @@ public class toLLVM_Visitor implements ProgramVisitor, if(!(instrLLVM.getLast() instanceof ReturnLLVMImp || instrLLVM.getLast() instanceof BrLLVMImp)){ instrLLVM.add(new ReturnLLVMImp(type, new ValLLVMImp(type,0))); } - }else { - //TODO + }else if(type instanceof VoidLLVMImp){ + instrLLVM.add(new ReturnLLVMImp(type,null)); } DefineLLVMImp define = new DefineLLVMImp(fun.nom(), type, paramsLLVM, instrLLVM); return define; @@ -138,14 +138,18 @@ public class toLLVM_Visitor implements ProgramVisitor, @Override public ArrayList visitReturn(Return_instrImp instr, SymTable h) { - InstrAndVal res = instr.e().accept(this,h); - ValLLVM var = res.val; - - InstructionLLVM r = new ReturnLLVMImp(var.getType(),var); ArrayList result = new ArrayList<>(); - result.addAll(res.instrs); - result.add(r); + //ret void + if (instr.e() == null) { + result.add(new ReturnLLVMImp(new VoidLLVMImp(), null)); + }else{ + InstrAndVal res = instr.e().accept(this,h); + ValLLVM var = res.val; + InstructionLLVM r = new ReturnLLVMImp(var.getType(),var); + result.addAll(res.instrs); + result.add(r); + } return result; } diff --git a/src/main/java/TP2/llvm/PrettyprinterLLVM_Visitor.java b/src/main/java/TP2/llvm/PrettyprinterLLVM_Visitor.java index c7c9004..5b28208 100644 --- a/src/main/java/TP2/llvm/PrettyprinterLLVM_Visitor.java +++ b/src/main/java/TP2/llvm/PrettyprinterLLVM_Visitor.java @@ -62,7 +62,11 @@ TypeLLVMVisitor @Override public String visitReturnLLVM(ReturnLLVMImp instr, String h) { - return INDENT+"ret " + instr.type().accept(this, h) + " " + instr.e().accept(this, h); + if (instr.e() == null) { + return INDENT + "ret " + instr.type().accept(this, h); + } else { + return INDENT + "ret " + instr.type().accept(this, h) + " " + instr.e().accept(this, h); + } } @Override @@ -128,31 +132,32 @@ TypeLLVMVisitor @Override public String visitCallLLVM(CallLLVMImp instr, String h) { - String str = "call " + instr.str() + instr.f().type().accept(this, h) + " @"+instr.f().name() + "("; - for(int i = 0; i(), new ArrayList<>()); - CallLLVMImp callPrint = new CallLLVMImp(printLLVM, instr.l(),"(i8*,...) "); + CallLLVMImp callPrint = new CallLLVMImp(printLLVM, instr.l(),"i8*, ..."); return callPrint.accept(this, h); } @Override public String visitScanLLVM(ScanLLVMImp instr, String h) { //TODO DefineLLVMImp readLLVM = new DefineLLVMImp("scanf", new IntLLVMImp(), new ArrayList<>(), new ArrayList<>()); - CallLLVMImp callRead = new CallLLVMImp(readLLVM, instr.l(),"(i8*,...) "); + CallLLVMImp callRead = new CallLLVMImp(readLLVM, instr.l(),"i8*, ..."); return callRead.accept(this, h); } @Override public String visitDeclarGlobalLLVM(DeclarGlobalLLVMImp instr, String h) { - String str = "@."+instr.var().nom() + " = global"; + String str = "@"+instr.var().nom() + " = global"; str += " [" + instr.size() + " x "+ instr.type().accept(this, h) + "] "; str+= "c\""+ instr.str()+"\"\n"; diff --git a/tests/aLaMain2.vsl b/tests/aLaMain2.vsl index 7dea56d..ceb7520 100644 --- a/tests/aLaMain2.vsl +++ b/tests/aLaMain2.vsl @@ -1,23 +1 @@ -FUNC INT test1(a,b){ - a := a+b -} - -FUNC INT test2(a,b){ - IF a - THEN - RETURN a - FI -} - -FUNC INT test3(a,b){ - IF a - THEN - RETURN a - ELSE - RETURN b - FI -} - -FUNC INT main(x,y) { - x := test1(x,y) -} +FUNC VOID main() PRINT 1 diff --git a/tests/fragment1/hello_world b/tests/fragment1/hello_world new file mode 100755 index 0000000000000000000000000000000000000000..b94fac9a64902bc9fe13b94c0cec80f0b6d0d95d GIT binary patch literal 16016 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 XHoaI$)&rjJR?`3MsP=050R2A!fdIf9 literal 0 HcmV?d00001 diff --git a/tests/fragment1/print1 b/tests/fragment1/print1 new file mode 100755 index 0000000000000000000000000000000000000000..f9faf290f335ea5b34daa0fd77eefc0a7df7519c GIT binary patch literal 16008 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 bU!W-6KttN}+ZB^%)HU_rJE%R{-a-FQU?#ib literal 0 HcmV?d00001 diff --git a/tests/fragment1/print3 b/tests/fragment1/print3 new file mode 100755 index 0000000000000000000000000000000000000000..79be5b99987d56584b0c3c73a5a1aff1422d5a0c GIT binary patch literal 16008 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 Z3k`Xu?yF=q@N~D9{s%`rua)K`gocu|N{;W% zyti3zZID1h2zI2~Z{~aNo0)w(yE}Wk^Tn>-?r0>UB$cU8DJu0<879Vt&25|k#8jKQ z6WfjI9<>zZC7Lt#m;qQ#x)`0070j0bNmoOe1@LY|D?#ZYA?X%NHPj&_LB;z)x^gmb zIfxH(KLy3^wP%qS$&M$#>swpwLe6f|4O73U4H{E> z_8(T!V`_#t(Nlg6eiT-+TTfo=e&>-dzj9-$@`rVAeYEh46|a3=>L3mIP$GXB5>%G) zKt5*wzeF_WmAa66WmFT3Y)DtVfNd{0YXN=}xP|iR%(97J}|DY%Ke z>x?GSS>-r`;|XUdolRuYkEhgFKAm-k6nRm&Th*T4o?W}0CcDYr?&X_Xl+)9{&q=28 zso`|NP38Od?at(~ss6-3CWR`8M{`+j#4)Z5I-+|~9J4a~XiLX0s_K9;ev0eU%ju{z zGxxKveFKLfs&=AGNzQ9IpBh#h{vw~Z!e8MEYhuPOyp(6SLORBD%p{%j@&0jf-pA88 zl629>>+2mGW_`RFM{I~0Tn6Av02@LGBM?R)j6fKHFalu&!U%*B_+N~`JC*mm7oYrN zMf`aA*=IX|{6XF>-v75&k#Gcw+ls2?}$Ufvl$d%Y|kc{zUJmb(TO+_X&v z6{Xps%8i}3_0+#(?bFbz;?~3Q$@bUasp3;_yDQ_z+n0i$tHWN+C9!$A{3(O^m7XVJ^3pQce;Ks@1or31_tA5t z|8dZMlI*0{jePrWH>S?Q?Nrchgqop;2GflvJv(veMqHYioGI^obcUKL!si9A=BZcV zwMiNymyXF9>T&jiZtveLl^Wljyc~sj0A?uXKpnww@y3!jdeDBD!U%*B2qO?iAdEm5 zfiMDL1i}b}5eOp?M&Q390`$HsvZ3t$&FBriN4on;sq_%=0U$l0_X6?wtRA>pDm??F zcbb$Uj~`T#@v6v%mCGtl;W?9d{jMJVA18;-W%`ZRy~wuU_uQXLB@3ulRduhb*;{$X zV-?5L&h__iX}(v#CL}$zI}Ja1H%9I?___Ff3-zv`=h==`Rb>^CRem3^VG1JK5)E~%f0;3=Q=LSca0mk zEYDl(xh&r|>SsQ1V*l%{QjT1{#~%~YJ4Q-l^l*tJ-yWW0`wBy=lZ|d zsEbWUn_BFKmO7^A)i}RE$7zYWTAI%)MaMk?%M*N{EOwypm>2TD2Yggjs$+rpk&gK3 z08if!6EEi_iaPaR8&T`k>6j_YIHIq?BN+X1o*AoBPas3}$ayaOQ`&!x_dT-k&myx> z{}vwZyuur`+rKMewhVoWEkdip)aaov%Vb zEOGMTLCvpIRWTol>=y7#{12Fy>-S~w`j13Yy|-PC8$@*!cfG**s16P0-9|fyr2>h8 zwBsg*6^Mdc92&9*)$L^kjyviM(!zoQJd-(RIFlPlWSpd%%NLwPaa;}NM#nNKHn>uluHv7q zrAQ?cZbIqZ;Kdo9l$K=JL!)jZswXeA;zCo#utVpYVV=Jr!$}r$&PXDgq{SLN2cS!) zvre&)N-6{i8)u+U;M#bR2o`wA&eO_|1($PBUs`mNO?um^w{57-zruFag|L&L)pmM!#QN!)Ht>@wBVG}N61c% z@L(EAq7o??sToy9A$hcr7)=kN`J78NqjPkmZG>Lg7}uj1uHK3CZ)Rv7iBlB!E|Y5b zJ}W5mNH%L<$rFAIKbpIVzK!*Q7Hs|`*9GBPk@4$~uwIbfQ}~lyM}?#Nv|lgt1VKw2 z8H4)IfqxfsLFvEDj|HWDnI8xHpMaj`#-f+`v*3@oUFsvnS@bfGO@pId7QM{J1y91} zPgI9LeI5mx>xy3Hw}PwKS^6)2f=6MexwDjI{w&zQ`e6T=Rwt05n2J8e^KZc!c9iym z`~OYW?_xjiL4*YoCn{1tsQ*4ViiyWOK_(y z%JG+ZrJ$@ARt74U VcEy*b-wWxN?Jyqe1A;(N{T<$LM0)@L literal 0 HcmV?d00001 diff --git a/tests/fragment1/sequence b/tests/fragment1/sequence new file mode 100755 index 0000000000000000000000000000000000000000..06292b3c700ef81941cdd7c1dd84077a3a6fbf94 GIT binary patch literal 16040 zcmeHOU2Ggz6~4Pp8keTA<0i#%(s*QANN7FrU#yhYWc{0UaT4P=!j&k~v3J&9v_H=7 zEVWBji~1I)E{zI(oVzI*SSxifpmd+!$pM~33Dm_n*iA6IOR)@vpq1uNZ>AxNl0>P|W~ ztG((rvNw60E>CEnQk|~F*JG{lHH55dq4Nt2&U)Om=r2$fjDenS6P!b?#7iYj>AfDwrK!!`v@!gU8g7V<%O7 zK`k-|J?D4Ohr`O{kM91H`@NPeSMI*>`q)oTd_D8yo42l`4%V;_C-%pXU>oCsef0T% zk!i^*b=CQ0&LcKBu&$v>*(1amRrnU-s`;lk@Goz`-$gvv^&iQyD6&&l$+e5Fm9sN> zWm!{mww2E0?QG^rN6i*9c{i=ti^JWmj*JZV^;;cghk4M?cXlajc>Ji9a*ED$rsO)s z@uU6OLf#p-C$kP!Ih`xyr4dWJR&}KA#p#;W(1(wF{o-mrA;wR+DRVntl}_P)^tEr$ zWr(Z8WOKrOjr*x>yXLRSeGC4ER9K(T<=|m2N`-ul`I;fU8sLNDVkyA$I6}G>;JxRa z6f6gLJ&vRxp>Yd=JOZR3f+zw}1fmE;5r`rXMIeem6oLQ62)tdl_n*nrf38hFyZPb) zrIKG>bmNt!8cc?ThU{PoC|$Nl(q>)rmplpaFA|eHyP4}rK6umJNnJ5H zPhGjavRv1^z>b#$$^Vq+fAF&m`&W}^ZX_@M<#6)i&6;HFa`Nh`yMrpYW$FrQE6eG+ z=7BXm_iv%+BcxU3`%flM_xzeXRr1VrcWd(5o>ekd_S0Fdr08&YbA{~KW7M|aKI`9j zf(oTSqtu}#@;a|pez#hwko7Zdy-wD|CFRH0k0_r_l%fbk5r`rXMIeem6oDuLQ3Rq0 zL=lK05Je!0!225k{=F-BC<6a~5y1LGtT)73LSECzX{!c*f#aQGKQ8MQcZrR4jl0Fh8&{LqSl{Tq z^AU&gzpYjZ?DB#vCd3-VS$?^sgtdpSO8Eygt)3ISL$FbBryu}p6jx+DBi2O1pWhcb z@p?v1AJpJC3_c+pL%$crj~07+3HAM}qR)p&&y{}F_0F$e^z=)xXCuz^n(Eo!!eA2p zLu~Y0*Z%$=v3@+D!1NBa9eX6!pTSgaNR+h;uHtt6i!k#CHRP>zqw#UVUu|9eABk^>)6+dP{?&=8qT6m3 zXi2<1nXz1ZS`krl%jvW^rPh|uTW-#p;sx|2@=O)1>1<)r&RQwAP%K$?c}`6ga(Vn-Qyjz@C>7t!;tW-Idn&VFQzTOe*_|VXa!EtN6w{K*S6yY5P z3G5(vw_O8H%64t#orr8h@TI)@z)a`dcB-De^xgt8)^9YhQl)}5W9L)631Rp+d8IOW zt6XwYih@E1YqC@lt!#dvjSDzc-qBEXn*z7oLE_*>iFIA`BC3>Gn$NlRB%xc>ID;H* zs&I<4%FGvB$DGcW&DmmM)+xI40cx_Gp$#vYlu*5W!>v4EJog#9G^5Pae4d)n=oWR! z=bU0GQ^>C~EGjEHS(^oto6Wk)CDJbnMqM4u(VW< z8LdE`TCj7ODQdppa?R8^zKSLVTA4Izb2JzOH`aU1@;r!cG5QYBsZqYKfS3nKvFD3C zd`f?d=iNHBe{5q>jt#pMiJ}f`9n@UlzSTXEDT6FzgQ-_=@Op{V_iSV!xx*>WvlT z8Gl6|K1Jx;3^FJIzp73Dh`53H4P|(Y%VWczuVPg#h>-c@**adp*ms>o*-b(G$;2)s}-lCGA9`oQ8(Hp)} zXP^V#M&h6z^U&Hh?T`0jR0AFCtt4g+{clO=k`~eX_ob%2wj}Gpc4=SS{UYe^_Zgkx zzH$m8#*Qx0$5E;9oOJ9SqIry?|9GzOdm8$#mHN2MFIbe`L_^y2+ZB`Mveos!IH*0E H-bMd!*wxI8 literal 0 HcmV?d00001 diff --git a/tests/fragment2/call b/tests/fragment2/call new file mode 100755 index 0000000000000000000000000000000000000000..918641a2b73fdb5763f93b4210954b2e21576f91 GIT binary patch literal 16040 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 Jdo;g`{@-1p&m#Z; literal 0 HcmV?d00001