From 409c5938f90975536e45bf20d5ea40330fefb4bd Mon Sep 17 00:00:00 2001 From: Trevor Maze Date: Sat, 31 Jan 2026 21:32:53 -0500 Subject: [PATCH] Stage 3 complete, (+ - * / binary operators implemented) --- Sources/rxcc/rxcc.swift | 86 +++++++++++++++++++++++++----- a.out | Bin 16840 -> 14972 bytes gcc.out | Bin 0 -> 14972 bytes my.out | Bin 0 -> 14908 bytes rxcc.out | Bin 0 -> 14908 bytes test | 10 ++-- test.c | 3 +- test.s | 113 ++++++++++++++++++++++++++++++++++++++-- test2.c | 3 +- test2.s | 6 --- test2s | 0 11 files changed, 190 insertions(+), 31 deletions(-) create mode 100755 gcc.out create mode 100755 my.out create mode 100755 rxcc.out delete mode 100644 test2.s delete mode 100644 test2s diff --git a/Sources/rxcc/rxcc.swift b/Sources/rxcc/rxcc.swift index a941430..38b6290 100644 --- a/Sources/rxcc/rxcc.swift +++ b/Sources/rxcc/rxcc.swift @@ -357,12 +357,53 @@ func generateOutput(_ node: SyntaxTreeNode) -> String { } break - case .TermSequence: + case .ParenthesizedExpression: for child in node.children { text += generateOutput(child) } break + case .TermSequence: + var operation: ConstructVariant = .Error + let count = node.children.count + if count == 0 { + print("ERROR: FactorSequence with no children") + break + } + for i in 0...count - 1 { + let child: SyntaxTreeNode = node.children[i] + + // Operation + if i % 2 == 1 { + operation = child.variant + continue + } + + text += generateOutput(child) + + switch operation { + case .Addition: + text += " pop \t%ecx\n" + text += " addl\t%ecx, %eax\n" + + case .Subtraction: + text += " pop \t%ecx\n" + text += " subl\t%eax, %ecx\n" + text += " movl\t%ecx, %eax\n" + + default: + if i != 0 { + print("Unknown operation \"\(operation)\" in FactorSequence") + } + break + } + + if i != node.children.count - 1 { + text += " push\t%eax\n" + } + } + break + case .FactorSequence: var operation: ConstructVariant = .Error let count = node.children.count @@ -383,8 +424,15 @@ func generateOutput(_ node: SyntaxTreeNode) -> String { switch operation { case .Multiplication: - text += " pop %ecx\n" - text += " imul %ecx, %eax\n" + text += " pop \t%ecx\n" + text += " imul\t%ecx, %eax\n" + + case .Division: + text += " movl\t%eax, %ecx\n" // Move e2 to ecx + text += " pop \t%eax\n" // Fetch e1 off stack into eax + text += " cdq\n" // Extend eax into edx + text += " idivl\t%ecx\n" // Perform edx:eax / ecx + // eax = quotient; edx rem. default: if i != 0 { @@ -394,7 +442,7 @@ func generateOutput(_ node: SyntaxTreeNode) -> String { } if i != node.children.count - 1 { - text += " push %eax\n" + text += " push\t%eax\n" } } break @@ -437,19 +485,21 @@ func generateOutput(_ node: SyntaxTreeNode) -> String { break case .BitwiseCompliment: - text += " not %eax\n" + text += " not \t%eax\n" break case .Negation: - text += " neg %eax\n" + text += " neg \t%eax\n" break case .LogicalNegation: - text += " cmpl $0, %eax\n movl $0, %eax\n sete %al\n" + text += " cmpl\t$0, %eax\n" + text += " movl\t$0, %eax\n" + text += " sete\t%al\n" break case .LiteralInteger: - text += " movl $\(node.value), %eax\n" + text += " movl\t$\(node.value), %eax\n" break default: @@ -485,6 +535,7 @@ func parse(lexed: [Substring]) -> String { enum Validity { case Valid case Invalid + case Panic case Break } @@ -518,8 +569,11 @@ func validateConstruct(_ construct: Construct, tokens: inout [Token], node: Synt print("\(indent)Testing variant \(variant) (Loop = \(loop)) (Loopable = \(loopable))") valid = validateConstruct(constructDefinitions[type]![variant]!, tokens: &tokens, node: childNode, loopingEnabled: loopable) - if valid == .Invalid { - print("\(indent)Fail (no valid variants)\n") + if valid == .Panic { + print("\(indent)Fail: panic (variant \"\(variant)\"))\n") + return .Invalid + } else if valid == .Invalid { + print("\(indent)Fail: no valid variants (variant \"\(variant)\")\n") tokens = tokenBackup _ = node.popLastChild() continue @@ -541,9 +595,14 @@ func validateConstruct(_ construct: Construct, tokens: inout [Token], node: Synt print("\(indent)Looping due to factor") loop = true } else { - print("\(indent)Breaking out of factor loop") - loop = false - return .Break + if node.children.count != 0 { + print("\(indent)Breaking out of factor loop") + loop = false + return .Break + } else { + print("\(indent)ERROR: FactorSequence has no children") + return .Panic + } } } @@ -569,7 +628,6 @@ func validateConstruct(_ construct: Construct, tokens: inout [Token], node: Synt return .Invalid } else if valid == .Break { print("\(indent)End validate subconstruct (variant \"\(validVariant) by breaking\")") - print(type) break } diff --git a/a.out b/a.out index 6397d0db751d81d781a966bead027ad9b43a8f7b..6e3808f21a4f9b4bf652905f2b4e2d3b3413b245 100755 GIT binary patch literal 14972 zcmeHOZ)_Y#6`#FalB2O5#|^F1G|e`$Di^gI+i{~pBzm@EJ8qqSwo^b=yV<+j_>SJ) zp6=FQSD?f_6(zWlQi^~NREkJGL_#PZ5+o1;r9J*M6(8IR0aAqsYARiX3l10vq;&cH zc6aQx69hthf_c%~_ujnUyqS5k>$%O&9PJ+-&@@d*S|wHqTFGW1x*>o1NZ{!fx@Z*b z;y$rOtU(cdl24-oIgT>&D)2+GCB73jnLfrQM`<1v$n*=e>-!<8lfRAv^6IExhY|7u zRC2U_-4LSw@qpVe{Cz64@0(%W^?5mWR_&Oz$GEd2g z0d6fDR-`hZGN3Y`GN3Y`GN3Y`GN3Y`GVp(!fzj$*qCSq{PuG6CU5J_Lg6DZJTykUH zZ1snUr)u5>zFB!^`0hdS&NSefrF!iOpq=kMbK*DEtMdoOM(V97oUWZkm`~&1!6&^7 zH-M;L#${pV-nQD2Q%6ooNuB@dS6S&b2bE5KkpWIV&+A8Dcel(uKNs}n&O;~OtKD9YoCB)W@B3of$L1)>Z1tz9j5f@+DyEy2F0I; zUw^Gv~BDKw{cC|z2 z+kPuvXiJcfLhgpNuY2B?A*UcOLh`Mbq&+txw9h59%?_&u9+ zd#v!k^%8p;Se?M8#6VNSZIf6Q#rTElqB5W|pfaE`pfaE`pfaE`pfaE`pfaE`@IRM< z!yE8U2_ucX{EMF2EA&#Sb6D0T8ZieK0;yqyQwdFe~?LU3sIZ5oVs=jP zJ3Bf%cKDEG7xqa~TwM3CdD-6&uS04W6~`lq{;e>Mg>A)<_4{F8irC$-IX@)&ABSv6 z2J@w1cAkXI`5=MSyxoe3visP{3Nf;nqw2D2j zIbKpT?ESELUy@p4P2v#j+@jqmo`o%G8I;X%TwY=*(%s(W};A-LY0VR z0_iS;x^~4i((IdE%&=#sIWW?*x8LmFx7);tfZdF&0chBw-VGa)O z@9h~j_YVw=_K%rkJ-x&IsIl_ELQjO7QPd93H^5ka*ul(H95ZVbGdu{f;?xC_fi_EK_Oqy#s#L-d z;Q@?WdSS5_I9VaH#v>QEJxAeBfDlGys^D5FNVgowtkjB*Ya8Rm2_rR;!&#MFMi`4l zrLt49%kGpgazz~FCggSNn76iHKe(@g`cg+LRw0*04;)0s#qgU8LL;xj z!0lbYT`QlZe@AkSTMOnRC(k&wMJmem1^bW|anZ9(5-M>$DB$DFc=Fs=^zXlX)Q8~z zGuAKSlDLp{=v-4tj7J^?b3G;QFfQa0bgsFKMGXH`JO##*=;OF1lerd4lI^BZz;zUE z!8MfJ1YNevax&ZCx=WpFFS!GHv|X6uD46RVaa_a6N$4^j`^UBXIGDIza2*&j%ZcOf z0Ev4EI{V6Y{DEO`I`xoPoqqd#MMx+c%SM^zb{te-b4ZC z6X^}k{NcuxF^Hv3{uOvVm^l8HnENNVYw&X}i1W_}0yiI)LHMya{y%^@4&r$J>Iya? zuFN0X{YwPL-wX@D$vJ>)v40FE!dZDbbKey?pKlHEK}ruMB;R@4^$4$?=#{Xg z0v$js{v@mcy9?S5%@jEo{Ts zPv^)`(&`H~1~FH>+o?VTBmHBhQafQQ-B@^u?1#$vw29u%kcfUS8z(E=SW6QB49<2(+lN-x9YH9~O-51l= zuyrw&v~yNccRjoM^hLP;{r8?Z-`B;(OWw9{?#9^5u`3fxZ*Ml; tsCxXb=RLKD_Y90wwv3iv>%8}TDQ`J=zj*3R)%Bl04xah=&2Ku(`~uc#xM~0Z diff --git a/gcc.out b/gcc.out new file mode 100755 index 0000000000000000000000000000000000000000..dc8acb74a0f12ed02ef4a13b21db9d3e4e1caf16 GIT binary patch literal 14972 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 F{|z!%0v`YX literal 0 HcmV?d00001 diff --git a/rxcc.out b/rxcc.out new file mode 100755 index 0000000000000000000000000000000000000000..3d3f4f2616e4fb98cda739a8583bd21d6885b409 GIT binary patch literal 14908 zcmeHOVQd^n6`sAA#BH3|agA`Awq7DrIkef>P8t;=(X$=fadDE1?UsfL)_1>i-x7jA__gg^=+l`g^v(*zuvsK@v1 z?wr@IQ6zrwhk41{_ujm3-pst&^WNOfoa*lH(KJm++9Wm!TH!h&4nUrH%<~)&y4WUK z#6#jiu^C15N&X=!kgHHe-UNO$w95CvCez2*>-vTfB8Q5g$qny=O8LHbA=^uRG ziQhtf$udvUAA!Fbl_Woa`ef-p0YA)-5&MVkivjq9<7-4)WY&jpWdkJVq4(HR;`PzD zZ#uh(taIo(? zM6D2J-*GeV#FH6wJa5H?X`<63D2e7AGaXH4P%<(RHAj<~Xe#-fCFtf@4vOCXzRoVQ z-DorRSM>b{5OCDwvb&| z8tgVmnU8!^@*d9EA;0X+bKgT+L!uWpiT83ff^;@LMJ22PY-!)5B7eW(xAU@%5uscO%q>Ec4EY2kKAyYlWWr(xzh zcNp?L=Uxmua-#em0?vHp&gJ5);m5mC`_OF$Dh&cSRs0=(CP19iKWC@Jc*{&-+3Qn% zVX3Bkk*n_sklPob_Nl>wCjl>wCjl>wCjl>wCjl>wCjl>wE3|8WMmkmI{ZZP%tlT)A?2*N6q} zFy!Nqe0R-NE=hZCKxp5p)^^oYRlTHbsph*&zPG;fw{rPW0zeyMh0x(6_6=aEi|y4t z+iRYz-Re|Lh$rqp^x5|2-7Mx(lX1BW<$Gxo%gBmU22=)A22=)A22=)A22=)A22=)A z22=)A2JV)D;T>34g1N5bzFWS<=0bBD#4t7@?}X$Y+g*@cYu*p$UR${@`yU^b?JyR{ zd?C6B$+xw`koQ7=?!H~Fi_yIJ6u1N@^$U>P104o)e>~r@ z-!7MJs(52+Pr#2i$2R+nrMR7d{UPLkyB1EfQO3f!Bpqa@LEJ~&+tu}Xy#=f8J$l(_DNEe_=&AzAe zO8-2h%!`IuybQZq$Hk>O@drrGCrQIBe&DI@m2+4dNQe&m5!hLbk8@QY+9sx8SA}7K zbkQg}U~_z=I@m{G^FAcihqjAju#^7ySU(P1(rzfHV9R){e_x zuY3LBKKZv`*M;e2`#Z&pu*2vtf5)juK7RpQ=&Sf5?A8A66u*Hj@25K8c~(OD+1^#y zk`P9GNZX(9`Vc-XgCjYo&9JeBJ{n7!PIOG5Acjr$nL(7U?zcCcv^l~Z_jy3$wmFuv zW6_iuckEo=jE+x;5j&ktS&kJqS~o^;uYb~v=5orY$o*o=#7qO29IK zbk;!8DJv6amrS!~pyOz_*?sJ=iLL&JPaf+y+Si3*d|=G(Bfj^@;Q?Xx_8;%;=r@n| z^bB?nnL{0&{oSas{v<+J9yqw`A%ls>4;o{ZV`fK8Co!J+x)GZYrWKDmQQ-~_u|Ech z1G46%L!~*MZ$K(h+dH@bW9=yhGoH82L^KoU35RvZDUb}bnKcvNM73Bx?}zYDR^V`i z%nwgZYfg6n26>R!iZ015Y&@S&hvc3%H@-GW{qLOm$OpDdrCItFkTW@$C|*EcMM#%n_|OC z`1eR6j+)Z)JJr$Ix0iRXTi?5Ny!ui{E75dv1U;}385hHC&I^qU3Ilg=8aJl=xZG9p z8MOt>XNx?e)EuZKpASX=7d(q3p%T}D0)9LhPoCQf{{5C8MbUqVF zj7J^>^La?zFfQaQbUrf~ix~bXcovLDnv3HzmCR?UB-!o=3iup^Tksi3-VR;1%W^W? z;B%8YpPl4Z=)rbjic{cwz{K$xOb$br@z_5;i(dj0*9k5GLuNT~e2z=pIq2*w+i?em z!Rgd}B93$hEO9z9>u@mLn9PC1g;7XuVrP9Kj`S*6;`rf}FyYr(|vyTHKB@j2-HJ}k literal 0 HcmV?d00001 diff --git a/test b/test index 5a14f46..d58f20b 100755 --- a/test +++ b/test @@ -1,9 +1,11 @@ #!/bin/bash -gcc $1.c -gcc $1.s -o my.out +nvim test.c +gcc -m32 test.c -o gcc.out +./.build/debug/rxcc test.c +gcc -m32 test.s -o rxcc.out echo "GCC:" -./a.out +./gcc.out echo $? echo "RXCC" -./my.out +./rxcc.out echo $? diff --git a/test.c b/test.c index 3f0924b..30a9028 100644 --- a/test.c +++ b/test.c @@ -1,3 +1,4 @@ int main() { - return 1 * 2; + return !(4 + -4) + 6 / (2 + 2) * -4 * ~4 / 9 + -(4 / (5 * (32 / 2) + ~1) - (400 / 90 + 1) - -~((5 / 4) * (2 + 3) / -9)); } + diff --git a/test.s b/test.s index 6f18599..23386b4 100644 --- a/test.s +++ b/test.s @@ -1,8 +1,111 @@ .globl main main: - movl $1, %eax - push %eax - movl $2, %eax - pop %ecx - imul %ecx, %eax + movl $4, %eax + push %eax + movl $4, %eax + neg %eax + pop %ecx + addl %ecx, %eax + cmpl $0, %eax + movl $0, %eax + sete %al + push %eax + movl $6, %eax + push %eax + movl $2, %eax + push %eax + movl $2, %eax + pop %ecx + addl %ecx, %eax + movl %eax, %ecx + pop %eax + cdq + idivl %ecx + push %eax + movl $4, %eax + neg %eax + pop %ecx + imul %ecx, %eax + push %eax + movl $4, %eax + not %eax + pop %ecx + imul %ecx, %eax + push %eax + movl $9, %eax + movl %eax, %ecx + pop %eax + cdq + idivl %ecx + pop %ecx + addl %ecx, %eax + push %eax + movl $4, %eax + push %eax + movl $5, %eax + push %eax + movl $32, %eax + push %eax + movl $2, %eax + movl %eax, %ecx + pop %eax + cdq + idivl %ecx + pop %ecx + imul %ecx, %eax + push %eax + movl $1, %eax + not %eax + pop %ecx + addl %ecx, %eax + movl %eax, %ecx + pop %eax + cdq + idivl %ecx + push %eax + movl $400, %eax + push %eax + movl $90, %eax + movl %eax, %ecx + pop %eax + cdq + idivl %ecx + push %eax + movl $1, %eax + pop %ecx + addl %ecx, %eax + pop %ecx + subl %eax, %ecx + movl %ecx, %eax + push %eax + movl $5, %eax + push %eax + movl $4, %eax + movl %eax, %ecx + pop %eax + cdq + idivl %ecx + push %eax + movl $2, %eax + push %eax + movl $3, %eax + pop %ecx + addl %ecx, %eax + pop %ecx + imul %ecx, %eax + push %eax + movl $9, %eax + neg %eax + movl %eax, %ecx + pop %eax + cdq + idivl %ecx + not %eax + neg %eax + pop %ecx + subl %eax, %ecx + movl %ecx, %eax + neg %eax + pop %ecx + addl %ecx, %eax ret diff --git a/test2.c b/test2.c index 8ec47b5..4296359 100644 --- a/test2.c +++ b/test2.c @@ -1,3 +1,4 @@ int main() { - return ~1 * 2; + return -(2 * 3) * 5 * (2 * 5) * (3 * -4 * -(-2 * 5) * 4) * -7 * 7; } + diff --git a/test2.s b/test2.s deleted file mode 100644 index 3afb065..0000000 --- a/test2.s +++ /dev/null @@ -1,6 +0,0 @@ - .globl main -main: - movl $1, %eax - not %eax - movl $2, %eax - ret diff --git a/test2s b/test2s deleted file mode 100644 index e69de29..0000000