From 2840bb677908b99b80127ca65ff9d89f133499a0 Mon Sep 17 00:00:00 2001 From: Michael Thomson Date: Mon, 23 Sep 2024 08:31:37 -0400 Subject: [PATCH] chapter 1: ex2 --- .gitignore | 2 + c1/a.out | Bin 53376 -> 0 bytes c1/compile_commands.json | 30 --------------- c1/main.c | 81 +++++++++++++++++++++++++++++++++++++++ c1/main.h | 20 ++++++++++ c1/main.o | Bin 5040 -> 0 bytes c1/makefile | 2 +- c1/prog1.o | Bin 5216 -> 0 bytes c1/slp.o | Bin 7288 -> 0 bytes c1/util.c | 7 ++++ c1/util.o | Bin 3512 -> 0 bytes compile_commands.json | 1 + 12 files changed, 112 insertions(+), 31 deletions(-) delete mode 100755 c1/a.out create mode 100644 c1/main.h delete mode 100644 c1/main.o delete mode 100644 c1/prog1.o delete mode 100644 c1/slp.o delete mode 100644 c1/util.o create mode 100644 compile_commands.json diff --git a/.gitignore b/.gitignore index ee080b2..95bab60 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,4 @@ .direnv .ccls-cache +a.out +*.o diff --git a/c1/a.out b/c1/a.out deleted file mode 100755 index c7235511b779b80337315fcb9f6fe1b6e65e6f3c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 53376 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 SS56IM8~+bW5duO$2>cHmx)SsN diff --git a/c1/compile_commands.json b/c1/compile_commands.json index d059e99..0e1f63e 100644 --- a/c1/compile_commands.json +++ b/c1/compile_commands.json @@ -8,35 +8,5 @@ ], "directory": "/Users/mthomson/dev/personal/modern-compiler-implementation-in-c/c1", "file": "/Users/mthomson/dev/personal/modern-compiler-implementation-in-c/c1/main.c" - }, - { - "arguments": [ - "/nix/store/k8mrxviw965lv59hqbln3297jwfffm2w-clang-wrapper-16.0.6/bin/clang", - "-g", - "-c", - "prog1.c" - ], - "directory": "/Users/mthomson/dev/personal/modern-compiler-implementation-in-c/c1", - "file": "/Users/mthomson/dev/personal/modern-compiler-implementation-in-c/c1/prog1.c" - }, - { - "arguments": [ - "/nix/store/k8mrxviw965lv59hqbln3297jwfffm2w-clang-wrapper-16.0.6/bin/clang", - "-g", - "-c", - "slp.c" - ], - "directory": "/Users/mthomson/dev/personal/modern-compiler-implementation-in-c/c1", - "file": "/Users/mthomson/dev/personal/modern-compiler-implementation-in-c/c1/slp.c" - }, - { - "arguments": [ - "/nix/store/k8mrxviw965lv59hqbln3297jwfffm2w-clang-wrapper-16.0.6/bin/clang", - "-g", - "-c", - "util.c" - ], - "directory": "/Users/mthomson/dev/personal/modern-compiler-implementation-in-c/c1", - "file": "/Users/mthomson/dev/personal/modern-compiler-implementation-in-c/c1/util.c" } ] diff --git a/c1/main.c b/c1/main.c index 215946d..74a7959 100644 --- a/c1/main.c +++ b/c1/main.c @@ -1,7 +1,9 @@ #include #include +#include #include "prog1.h" +#include "main.h" int maxargs(A_stm statement) { @@ -31,9 +33,88 @@ int maxargs(A_stm statement) return 0; } +Table_ interpStm(A_stm stm, Table_ t) { + if (stm->kind == A_compoundStm) { + t = interpStm(stm->u.compound.stm1, t); + t = interpStm(stm->u.compound.stm2, t); + } else if (stm->kind == A_assignStm) { + IntAndTable_ it = interpExp(stm->u.assign.exp, t); + t = Table(stm->u.assign.id, it->i, it->t); + } else { + A_expList expList = stm->u.print.exps; + while (expList->kind != A_lastExpList) { + t = interpExp(expList->u.pair.head, t)->t; + expList = expList->u.pair.tail; + } + t = interpExp(expList->u.last, t)->t; + } + + return t; +} + +IntAndTable_ interpExp(A_exp e, Table_ t) { + if (e->kind == A_idExp) { + return IntAndTable(lookup(t, e->u.id), t); + } else if (e->kind == A_numExp) { + return IntAndTable(e->u.num, t); + } else if (e->kind == A_opExp) { + IntAndTable_ left = interpExp(e->u.op.left, t); + IntAndTable_ right = interpExp(e->u.op.right, t); + A_binop op = e->u.op.oper; + + switch (op) { + case A_plus: + return IntAndTable(left->i + right->i, t); + case A_minus: + return IntAndTable(left->i - right->i, t); + case A_times: + return IntAndTable(left->i * right->i, t); + case A_div: + return IntAndTable(left->i / right->i, t); + } + } else { + t = interpStm(e->u.eseq.stm, t); + return interpExp(e->u.eseq.exp, t); + } +} + +IntAndTable_ IntAndTable(int i, Table_ t) { + IntAndTable_ it = checked_malloc(sizeof(*it)); + it->i = i; + it->t = t; + return it; +} + +Table_ Table(string id, int value, struct table *tail) { + Table_ t = checked_malloc(sizeof(*t)); + t->id = id; + t->value = value; + t->tail = tail; + return t; +} + +int lookup(Table_ t, string key) { + if (t == NULL) { + // HACK: should indicate a null value + return 0; + } + + if (strcmp(t->id, key) == 0) { + return t->value; + } + + return lookup(t->tail, key); +} + int main() { A_stm program = prog(); int result = maxargs(program); printf("maxargs: %d\n", result); + + Table_ t = interpStm(program, NULL); + + + printf("a: %d\n", lookup(t, "a")); + printf("b: %d\n", lookup(t, "b")); } diff --git a/c1/main.h b/c1/main.h new file mode 100644 index 0000000..84d7ffd --- /dev/null +++ b/c1/main.h @@ -0,0 +1,20 @@ +#ifndef MAIN_H +#define MAIN_H + +#include "util.h" +#include "slp.h" + +typedef struct table *Table_; +struct table {string id; int value; Table_ tail;}; +Table_ Table(string id, int value, struct table *tail); + +Table_ interpStm(A_stm s, Table_ t); + +int lookup(Table_ t, string key); + +typedef struct intandtable *IntAndTable_; +struct intandtable {int i; Table_ t;}; +IntAndTable_ IntAndTable(int i, Table_ t); +IntAndTable_ interpExp(A_exp e, Table_ t); + +#endif // !MAIN_H diff --git a/c1/main.o b/c1/main.o deleted file mode 100644 index 2a6954a0a33ef2ad31e2efe4c157c12101a59047..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5040 zcmb7IYiu0V6+Sb&Gam2S8$V+^gl3^mNCJMwAKK!^&L=zAj1N?p*O&Sd903V?J33RYN3|Q<4itHNbWEB?M z_Vd#|GeWZM{o4=hkE|>5oKlIWLmzJnYm&IkUda;RWj(**xMRv$jThlW&wp3d7hw?l zYO?KIeq?gYE|ju?+qSoTb!hLG=TrWww5`FL68W$S58(xn5ng6wq>`Uvy$kVHs_dN# zua_@tAzc^GaYsu`tHzs%g`Hnha>fenr||x2L-o3Nm5e)<_pZgeP1VyI_LTulk}A3` z9zIHtR$bqH3U9mWmHSk@Ou1ah+is@F@~#>057nTeDRm-MRoyk;Bg89>911>gb$zXg zuz#n5xpC2F!wc#wXR_6J8>;YzJ|mt#Q@-wa?^k#~Q1d1Ksd(8^5q0_Yq>p1IUaHjwU)@qK6Tg7nYz$tyI5*d3X)>^^7CsF*W|(sVzO>Bl#TZ&1 zfbWC3x$j&6-UGn+JM?FDIXwI3>=KNvMUaPjTbM6#X|!q;#@yV%<%fn&T-g2Q3zp3O zp%#25X8&>Sn7kF$h{1h}{BBGxK|Te3I`qx%Wnbhz%|6ArEC4v`=BlfoOu~dkYS_DI6Q8$WhG6&lq>*Rd zf=b%)KBQw^pf6bw2zdp&4Hqqj9qa)&N-OlG;OOIe3@SPYsc%K2t*DLBAjNj0iQkK+ zUW`{DOwD{9!m6ox3!+_5T1=e)>vd9FkLSeoy2J;tC2OYX$-0@kAD;RiW`Sd7ies(c0-dbaq_#oSY)6yUzYq-b z0R79NVJ=JTf-Q;tXtl)sj3x4DW8q*QqvJL!*{-Lr)O?dzC8o2io5eZ;{in>kMe5r1 zFIo>m5606e)=}sd^Ojo{w!F~4qCu>eVEhHF-^v%V(mDyfh4!keUdU?feqwlV8}a&P zz&y%~TJ?o$6HmgF#BsD*;`jK|{wzX*8Q@E@w0VIn92cmhWOM{yNk}7PlfE zf00>jKSrQkI$nlIokFvOvrqDm&W3l{qi61za-IQ~8SLl-zXR+V0-&wNlJD zZg*CCTxYt+^GlU{&)AW}+426V!!t*wv$^S+fg^{eoZ`Cmqodi%___y2XS%%H;Yz9G zclGsk_x9YK$?o2FfND4VQf2ns%hNt9a3O&VAE?;rGctLUs z`AU~l#7(o9cm0fy0=pc9da`|z9nVy7&l%dgcj%zKZ|B#x+xrjh*>2k+L$>D^Z8?m4 zl}x&xGv?-VX~*>uAZTgQ&F%AxureNlpY6u96DV3#=AEnG!&~L{gDvh<2GfoAMRDnXq^COE98P8{O;%A(KFoaJY z+(m*x zV%37DXTNmn(9!QbY~V=Q2AfNbr%JG3A-SAL!D@m03PC}?2NQ#rQ&RLy`bgE!oCAHH z9QG%-5Ddh}vi2B$cE@q0B_92hB*x=l{???;-%$MBL!G||F8?R#H@@vYfA{I1{PyDX z)bnSL-|@3b>TF$i<(-#%XCF`g@1^5QXLg>g%cj5m@YlU3|I7vd8}K{ee}Q@WwSjqx z-3i_U&Vr}FPk^~C<1ct`!8s+u6NfGyKe#xMxCsX?yjA7mkw_O0G3DY3M;A}wPDl_> zGP=0GDtK=0feTp5#bbglZb+&lJJ8jMMrAEiF79>8#XXf-+_O|i-VW%x_lgVJ)$|+; zWW=xbQKz58Z5DJ*yfx@_3?WU^{+p_&;FG{w_tm?co7ph7X6@|*+47MwZ^W6J$a>zy zOn?9F(`ycAMm@Ky;Ee2>@vta@eGWUF<7Nw!IsEEUTP9GwLb-dK*pt3f2sO{oIVGsU z)UFL$Bucx{nmBLh=CE;t`As7YSu<>`F^`$C(lFe64KZWWKQ~&3G9;#V*Hf7Dh?~ch+@a)VCHs`rlstuzGJg~L zLp4`~_-0y3h#=0hiFq~p>)IJ8eXvuI5pg-C0B}w@ZmqJH(~j0JbRO}%HAeG-P_!eu r5z1Aj;C8*h7CYJv3wAgEX#(4E#pbTZ7904e6#QbjKWO`cwpZl;0CBO5 diff --git a/c1/makefile b/c1/makefile index 9e61244..ae04a6d 100644 --- a/c1/makefile +++ b/c1/makefile @@ -1,7 +1,7 @@ a.out: main.o prog1.o slp.o util.o cc -g main.o prog1.o slp.o util.o -main.o: main.c slp.h util.h +main.o: main.c slp.h util.h main.h cc -g -c main.c prog1.o: prog1.c slp.h util.h diff --git a/c1/prog1.o b/c1/prog1.o deleted file mode 100644 index 3aebcbc36cc1a4e72f90a1b6482db6714bb59361..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5216 zcmb7IZERE589w*g*SWD1$BCV<0>x0E3>G^H0Wv-cUP+apP{LO!UB|6sJIO8ns_leO z(h_LtSVg5)WotDtX_~64WSfSjO#-@hmDW{Ag;ksOqm{OfcAYk9o4Tq6v2Lt;o_o(t z952<_QO?4U}7^T#B$(C(>ch9}MXLLsjS&`WORFKQ-?HGhxOgc71!$=fM1v5J=NyC`! z&+#L}5)&L)S)%XqWEjcR;OMXs9~>;C#^`^`-q_B&rcGL8T(uG>EBwK5mP^N(=P8ff)!&`*evUs3+A^&4*UQO9DoDR)or$+;mKE{E^Z9hj$i_3NA}TBW zU8uGj-fx3g?3cm}%;_&T_+Wx2mHwK%cEcsI{i8SO&x$V}PgMF_SK;rwH|ei*C_m?T z_e+1L<@&zyKm8?g8N^jGMzaUaY|=3Lx5%N{Ais;SBu4^5@H0BsAV0SMS`T~wrOj-L zO)AG5mi|sle<$FN>9x=C*NM6oWP3Q=4EBbIKw{I2Xh-BC((Y~Ob>xFWJP)Mx05TJ| zC^LO=o64;L>E_e5y|0}4WV>?a#$ol$jmN|@-w~5L(fZWKE;03hl;4MZ#TA@Vr2ZcC zkPuIwQpGb@T%jq)-jT0b_BMYFa(I@Xrm00zXFK}3;%c;fP-olCiX8*nIzH_fnx3tDkgsoyHH#V3Z-6I>JMrz|FH@Ghe!N@ z=6U}2jrC#Mo@DXf~`aYqyJc@W5dWFpdDI8N;k1D7RMGzmovh9Xe*}74)IuHx7 z%j^SNxAyG<(TI6kfNXsez!I{Pc*LuBLQ|@$UCw#$+77~f4+>Ri=KvnX^9n$(vQ4Y2 zT}_s6%oP`*MfK_L0FNQ7HKO`fRJzp~?_Zz`?>|r|UX2|IJpedEvliVKP;2!D=;x^i zL`^{T>+_&5rD>hemrcvM&{slvpN1hC*6W?nSJSXT=o^4Nl!Gul55Y&JS=8uiqy95i z;tN%q&{}BkqNsA$wu24R%Hz+1soe~j?pz)}2VXk?nVeeX-vg++3q@GH)f%QrexWnW zh2Cw@g_mZEcR%aALnvMLV82P?i@L8x4bQ~9Na%U+4Ge3s(8nRaO1s-dO^bS)ei*Vf zo+Uz`gxpHIrMixf+UA!9gnkyv$H?kRPRMfoCy=d~`$E}-tk4mfRzj8Lu3Z8*$JwG< zu28l2DX7AG3Z>%ZsjYfnK-MeY<4Bth-FJwgjSK*#9bjR zVkGXECK@S;&~~!(EpIk)ABhgjkG z3b|aVt)nB-9^DpCY~OV+#Rzy&p+@%<(O)!E8p&mfxok9<8jI$^dW0Bd>j4kByHl~WHhbW;!Fqm9kq*Fu0Q~~V<%`BLhkx!2n0U0xE zVaeocI%XuzF;OswM@oWz7!KBmZc^iU)&u&@B8Mm?#*&Yl1#~GZ((z)+(O4r!Qt_lH z#m%%}m9^$*bhi`ub{TlAY?k`u==#fi#f*Vj{R}uW88dq1m}ADBWfR}KE7r>m$-T=g zAEG!gd1!jXXGjo*hP(RPnbQ;9ko%E;g-rWSXeA5@xT)zJw8@6W- z(HRn7+>FtM_p2LkS|?T_6YFuVSg%{^{1L_1EoJ^7xN+52s{dW~#ck)lf9d-8*o&8+ z-SDG=|8h;F@b206$rHYR{qWiOhx#tpB*NdA_)78QZ+XJKiOie&BV;!Q){MLYc_T8f z<^=K>^4F1%BjeAyC9OMN2;SDD_MpI{i-{MQMPb$?#it7?J^&=eK1uNfvjm8=86v43 z6w*B}MvH~ z^U&PZy{9P3KmD}=Ku5?5ezQ0y9GGG{9~mJ(S~AnNWN$3nU!!)5_nH>w*2LnweWeZ0qlIwQLWx{Ol$TW*CNpCE@)Mr54HO9+5$bM)uG0{RdabB(bRJu z-&Q=?tT3#L1G}T`6ZAslwc`hV0K`sdy8^_{Y5NTjPxrPFI( z_5zUh95>$PZ6|^BcLG=ouR*7pQE|yp= z@fs$J{{A5G4T(dD8=_~u#AQI*0W6G3tWqy3my{~Cn-hV=_lX~dPFhGEj=2ArzJ^TQ z`7v-*>Q4P(>O2B4iA$1CWEBnRn z-T{7b6`RGaa`4g2G3*|!h6NwB{y#_XT})sM7-Uc49Yt$QGYQL6B)!8FI(7Bq)R>C z_K@3gzr^{+RLW%%g=9Wcfm1!+ zEit#}Oj(Z?rq&?2tS?@1^YwZ`>hXTk=60GRFz?8|sX_I{)A5y(sd~J_b$A^eHApV& zi&x!M@}2K1f_Jmbcj!{X)Kd&yKZH`n3nu2WGra?Grp3U#TnwA`RB6MOMCBj4!7}FpLN}}dKqvZgK~uV02`AzsNrJRm0qumVK<4&KWzrfT$)&M!>;hK%z}GinqHlr z%R0lJ?UgcYZ3OEkZSiiwFkU_rHm006+^}J9_f%=a?h}>&gbmh+*Kw_34FI;dVQaA_ zZ}F;N7%!jDjp;#exM9OS?Wxj+eMVINp&P9IUdOeDH2?_Ru(eo|Lq8}O#>*#kV|vjW zZrHFVJypuE=Jo0y`U&Y^ynKeU+N^VWaAZD~QbrVcgOZbx0n z=2i%JIrJciDGkdzZ|HI@=XDLXU)F^%@bYj}V7jZNYovdI7+q=YZs$X+bx;L5Z^3gV z)`O6VPK;$;g3{*bfuXsW6X-$pMa;U)vD}f z#NhHFWw%0jfQG4bY_mHce?WPPvd;w{L$&aLu%Dxu*T_#LpV&sSD2S>`yTK*Y4d9Ga()P*g}w=s6Kr}Lq`)3cvQSOV7)0f8 zw^+`%(FUA5(AuhL1`_uO)uHA%*udl9JFN@d`7^2gX8!%o5!jUT9KGE+UqgqBxz1m; zUxqqE`67n7$o@NIJ-5Zmew{pROR#)z8pBec@!_mXKUypQ4s3RivkOzpy&~dju-q=L z82J%Ij%GK|Ir;|JnP6C2tziqVkr*H6fyhT_+n9efrG;a#EJL;Ot?VArV?7B4x0@Z| zh6^`><&Lu>oIqqf8a-C4H`XxRSY)i0k}E2A7R;&Lp^=$)?oYde^N%ot8miNSGLHxY zWnK*P0cqvu5^5I12)~9#2RVyDM*3jcN^6`}odNSe08}6rM{><`zzwU1-g7n92C&?i z_FSeW@?C?~?O~ZWfrrKKhh+n*m0wJ(9*y+~SZ-tyKY+-+Z1-?ChkNno9JjM;job)P zN4?M+sT)=nZzOYFy32GKM_Qssx(A)P`|TwLmak=FoqK#Y! zQAfGjgE}!0N~Lni!q)g$rd-Ju3-P{1JqvplsYre#p;5-zMh4>S0__z)^8%)1HGyf zd#|ZrwBCGmq?oT13%%*gSZ@iMVj-F9%@@;|a$y1gkk95aRwxDS>%inwk66x%iDrdKjR26X;lhR=`1lmDXXDghiaEzst%$6~v z7;?!<)kw6ckxVkJs>y6l(FFg?Yf_XN$)vVr(usUB$KUM+5(70E8#WmmNDRt+zi#Hc zM&^5k%y%F$JRywLHDOd#My*^wu#$VPNvb|`!Bb}`_oqPe*v#q^6nt-*(n6U(_RaeB z&OaZ%;~#h2y8X%DUp99|`A=6rUjFcp{m;(5;alH7@#sa)k>+z|e-D0lqdttvGwLYn zOQ`=sJ&hX1AUydw)}0&-g{L#+(<1ZmqWmU;~S!tvW%&b-%BJ^jnQGp|1M@X=#? zmp$53e)%AC{#(@NQC~xSAGHMo%|h)%U4gn0^?KAeD*mY^G;=^vcGPqr6VM_=u_EEs!?f5Jp+6A1QRr1d&tQS*|5u@R37w0$sAofZLgc4~ z-Yaxm=ygJu3yli}(ftR6-Ub>4peeUd#*t-y=U)f86?XI8B}6vTdd6HDBseY!@Ofmj3{m+3PF- diff --git a/c1/util.c b/c1/util.c index 1f6c0d7..e6445d6 100644 --- a/c1/util.c +++ b/c1/util.c @@ -1,5 +1,12 @@ #include +#include #include "util.h" +string String(char *s) +{ + string p = checked_malloc(strlen(s)+1); + strcpy(p,s); + return p; +} void *checked_malloc(int len) { diff --git a/c1/util.o b/c1/util.o deleted file mode 100644 index 7c5b407ac025063f9a86acd27f0b8340a82c7a51..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3512 zcmb_eU2GIp6uvY2OSj!^y9(U^vBU~IxVvpB6r}t#7ShTZnic|x@pg80x;u1tcG;P2 zy9I3{B=Fz^#Gm*eF~*p{8xNwGn22vam{5H%KJb7f#wR5)zMuj9&deR!9ZST7lbm~g z?z!LGpL6b=n}7cLpqVj=fv5?9-}j^G1cMUbFxiiwTFB|RE@E7p+{D1PiE~SvwS)n| z`JsJB4=vfQHY^mvlc9G5AWS|#TOi>Q=c;K{bt5kvUOX44!yP~iTSkPvoH);E*;<|# z%c||>eCWvF*#3th6GD4c$PN!4+zpT}o|4U0wP{*!Bi@$+=bn((W8&$?WSNF|@vhk? z$XG_mQqTdeVE@DstvEkyq8;ePlYGwjX9eCD0>ts!tp`u3REioml#*tm+l$vF@?$~( z+_Dc<7>-yGube$$ABY$4tibCM5Cf|ku*g^u&z@gJQN4JVJ$Mt3iD%U-E3Wrjfp+FBxspS&pW$~IZqZ>KSGegT)bXDX>r*IaU7^5S)>=y68)+_Q^H#8dJUGJj6`$U}Y zdEgOUeFR=F`lyzi@CYsjl^Gw?2O3RMV};%#Bud)fUh4r z7}y8}d)LK$(cO^XKU0f}k?)+=s-|8xI(xRIx>MWS^i3Q3Y}&NSRV|&LnNkbA z(^K`CSv5CX@0&R>t(W?@Pfn`ULjT-kJ!$5qs^zkk?CD8$r(agogX2d@O~KDRX8N#+ z&!tONp-4;>rb$2mh!LnVrWH1#=+TNsg3s<;=quxo~?=M62_SuEohfOEyf z)GS`L45k|vD{2O6czAq}GS0qV=#Fsa95{OpG*2J?%KYNKb=O1lqxn-gRXlJodLfGz5=Eaxe2CBBOFS;E=UmNAh{?tSCa#Oeo)Cp z`6r?%X~{)-ETX9T$VFu)qUbZ^q9PS8Xo5s__+8tTA7O-_&7qYf>91%D2?8Oo&+9qF92+uc+pY?+Ct|W&`}1WgkT_toVtN-AIPeQFY)R?yy;A! zIrvgQ4jzac2=A0TaUy^n0^`k24nSgjhH3_KS05xsXSyA^i=IEkXEr->7u7}><9>GR z;EzIH67oDG#s{Z_+$rQn(GNj*!Eg3qcOJa zz6%*)yHCM>PyAl8@v6H2U6k&zW%yW&jR|2B?ZdKe#)>>e|JJ