From 7f54194498956e7c44077d1776808460e3e611e3 Mon Sep 17 00:00:00 2001 From: Rocco Jiang Date: Sat, 15 Jun 2024 20:05:33 +0100 Subject: [PATCH] updates --- src/body/complex-rules.pdf | Bin 37870 -> 37483 bytes src/body/complex-rules.tex | 37 +++++++++++++++----------- src/body/leftrec.pdf | Bin 93419 -> 93447 bytes src/body/leftrec.tex | 10 +++---- src/introduction/acknowledgements.pdf | Bin 19716 -> 22108 bytes src/introduction/acknowledgements.tex | 21 +++++++++++---- 6 files changed, 43 insertions(+), 25 deletions(-) diff --git a/src/body/complex-rules.pdf b/src/body/complex-rules.pdf index 9b6709bd79212850176cfce60957c319043dd3d3..1021faf39b567b10799fa12b09ef64d53df22234 100644 GIT binary patch delta 23902 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 b)6>fW;^haivBiBWBq|_?%gU;t0mA(sce*c! delta 24284 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 \y -> y) <*> q == p ~> q case FMap(p, Abs(_, Abs(Var(y, _), Var(z, _)))) <*> q if (y == z) => p ~> q @@ -29,11 +37,10 @@ \section{Removing Left-Recursion: Revisited} Zipped(AbsN(List(x1, x2), body), List(p1, p2)) }.transform { - // Scala 2 cannot resolve implicit stringLifts on "s".map(f) + // Scala 2 cannot resolve implicit stringLifts in some positions case FMap(Str(s, _), f) => FMap(Str(s, implicitSyntax = false), f) + case Zipped(f, Str(s, _) :: ps) => Zipped(f, Str(s, implicitSyntax = false) :: ps) } - - def normaliseExprs: Parser // applies Expr.normalise on all parsers with Expr arguments } \end{minted} @@ -92,12 +99,12 @@ \section{Avoid Parser Redefinition} Looking for dumb definitions of things e.g. endBy(p, sep) implemented as many(p <* sep); or count implemented as a foldLeft, fold fusion } -\section{Convert to Parser Bridge} -\TODO{ -* This would be cool, idk if I have time though, but this should also piggyback off of Func -* the pos bridges don't actually exist, so we can ignore that case and just say its too much code synthesis -* shouldn't be too bad? idk -* indicate limitations that this will only work if the ADT is defined in the same file, in order to extend it -} +% \section{Convert to Parser Bridge} +% \TODO{ +% * This would be cool, idk if I have time though, but this should also piggyback off of Func +% * the pos bridges don't actually exist, so we can ignore that case and just say its too much code synthesis +% * shouldn't be too bad? idk +% * indicate limitations that this will only work if the ADT is defined in the same file, in order to extend it +% } \end{document} diff --git a/src/body/leftrec.pdf b/src/body/leftrec.pdf index 958dfdf67a33d9d3007d5e48813c47e9b6503267..1e6ecb25013eb17baa6b819f9cccc9faff91287c 100644 GIT binary patch delta 8540 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 R0Dy;^2ZfeaMokvwe*n;sNc#W) delta 8515 zcmV-JA-vv)+6C*`1+W;imvI9DC<8P#Fq6TT6@R^5&5q=_4ZinN)C;Vl{~w^yK=oAD z0-IBkxh?jTAUPy^NG^H(P?ji5lUX%L zKY#Om_mAJc{{qb@cMB|7X?5L@(3*un8xx=Tp z7}~2M1(oO}x*tCY6C2td7tP_Kr`##U1Aj0Stb>;U;}VGr=D+})fuE%-9W4rh!w@?r-ir|Zdvh_QAAhE? zFj?~OtBb#xa@RCkMZSCS9SEgbStj zX4c>+*(hP6zq5v_W@bcA^sKk}+dQ8pQKf$9Mx46peq$`^keqWDIrOjmGwEA%WnJHl zVS;-qm1s`JWxL+iuUfp)ImT@-<6`z_xrHfC$&S7NDe-S$6?`|RihHmDN`EM+tU{I_ z*%j0@OWdTY&gU=-;)((B4g;Ys3z!iCNX+u0Z7();0sOXId=tJQqv^ zOBy&Z5ANv}MOaN+(@5O&cz@zp#txeCPI<+G@T4I{eV3aJJ2x`pD>p%oR_YHltB_i( z%&NXpG2+3aD;Pb&nG>?uk%*s5d%9cjq~!S9^!sP-0X)t>kxDgtRDZk*wf=jgoj%(% zpu521uvX?lvcbX}ri)ry90o%8^`uH|i%>SGY-2(S9ZKb;q%YklRPm$LQFiz zJ7@st$d0{b9qcT6wpI^tNq2nl;~fl&S<{W=wt+3$zmlLNzL)!M*f~>jOzW<5YTfbA zkO7|H>pbiii?pEOu7BeJ&`>+@&cUOCr}=E6*j#BST4p{$P=>` z;1vt}OJT~xPl6bOx(UI8F~Sj~V+}m%%acN;z*1=Ze|Zi8oPQ~!yxON_3J|p%ODQJg46rbc(I(3lGc8CuVZ3q&VoRAr zyY^Qp0|QP!^q zr^u)Zd*?7vV}B^oDS;+Y=`3j)Vy7;kB+|T8YqSVVxj7H;%zZK?Io8G$2-Gs05PLY( zkvqzuj+PUNT4mc{X;O2Y`NepvWXFn=u5(6JU~YD%@a8y&m?q3k8YW#69QbAo0qqxs zRRNGmdI07fFj?|Il?KZU1$ECOC7NvNsy39oMbW|}*ME;tr$cJvS`lW}NJllY{FpKi z{Jpa397rJsDcKa=B=Z)c$ab9D49q-=uk3(B@0HTE9Pdr*sPRv3AJ0ZPQxAg*nfh8T zaa~;N8kPyw1{1vwcQ-SIaK&a`q>oJ~S%uOfFFm+7{rQ^X=S>sb?l`YZei}?mk{QU< zbJHlSgntM@t{a7SL@dn%FMQKdmMa>ILmk$Y+i0HB@3n%cm(plcb1V6pmuisHn5%GR-P`gInEYI==kCwdy2IHg) z)$0e_dg&}ODX%TI#E63a^68s%zu*y2PRY@4FglBlvXBG%nOsd`PcDwHD^NV zuHBV1OUfW$&}_~e(`HvP#3nEUcTq7vhthz;LOkB9(K1dDPBY=VaT#!1xG1$f!UO4U z%Gyb<6*Fntzfg!n-Zd?zUCd_A(C`ir{k((WAEGqqIyiY^BTg5AzpQ3e3Y$}V+zplK!IW&J|K4rSKCS%}_S zoLGQU0K;-L$QSsKTI! zLx|9hN?2}LONcwq4@$uXTjn;h)PL=up!45jpT+lIGAP;oH?-Dp7JC1)gMXqRyf@bG zn*$3<=(;=7G6aGA)tq$9PiK!$)M1<;`tm(t`20P#SzP|^P0rGfPdRBuQqED-x8jUGb zmUj4$ouueRQWhnF%?QLNyCLTm>Lo(GwCkW8|Ils2SILy_I*B{T!hd{Rip(U>%G8!l zbd_BQxHAT=cG^dv()p`dPo5W=>*7ZIVrI{kb8;sRI{?D=ow)L*^hsrM43<_Ab}imS zN3M*bRJTvmnL92m&ldM`8%iFZDL%AxIkreES(l%ePMI;ciCHGh?Vq>y`yc0{cLpE| z_)^l3vMFyF6KNZ#JAXl+;?Kidv{%nV0IYyG!CV-J2LWJAcZ7E=0RRFF08Yr0Bf+;Y z)A|yjv=)7*r3Z5JNFbaS6KJz~Gu3cGyD5D@n_Y>(0ZV$*b$2ub&q;)Cw3pkq0D4U~ zE+avB&LeD(@JKR&@^&ub!(_p>N{nO+uH_Tc1^aXe^959O&wnKh2(`87G-V9Vs}QCP z_E{?)BDko_X-R?hcx4eFVo+|c=yFae?3)**w=ABSU+D5sGJr#XCSPdSp|CP%3_43V zy{@otHp3(XmCrzcoL3+A=>z5>u2DryMC`LZ%tUl;A6^EC*h9wzgZ%;6gAhKr29S3U z5Go@$1OY)yX@7MuLIwow-6sG6X;yCog7eKH7$EJMZ7@K@JP1S(5Rjo?+l&BrnQmZ) zHY22Eg>6|M+l-JQ1L5tYgBJ?Gzuq}Ed8YwYi9u(FXn_n(*gP?KerOOWY#QIO-HjPB zTstxu3+yu1f(5P_8N>rEwKe30c;NiVab|V<3UYNl#-I!iRUOwW?e}=u&~`bKPPwOsi=O%oBOvkm3$B zSTx0;p7W8P&T5a?SI$4SEts#(tYLfe2y(@6<50&sgKnQ5srisM4^cjz*{D~NwrTTE zCx$@~pJ6#+L7d3yWq3~bdz^>on>^0hI>nUl<$p6)QJ{c$()Maeh?NXlo>(YP$N9me z*rvsdB*uQ2kr(Jm?B#+=6A4)MoF8z{1y!9Mnu3$A@23L;F#VwK_qZCKbVjevo%_qD zXd&5xxN=3Wm2xN=9KIC(0wL#gQ>^kPxVk|7aStn{xL>xIav~H4WQ*x2N-6KD;M>_G z`hV2t@Y2$S(oMdK5Zvi#0R_dAgt5G9A9NFpGRfmWH6dfe(?^sOEXom7Ipock6Nu_yyCdDPkg;Cz&GmfR;(()c@>5QY!X*x=A zPdToXMLVw@2tTO&2F`P5RM2V5SmCFO_ zHrB?7^}LKxT~z??!j)LNrFdmR331SMJm*to$9S$GY}`+2yO`(2E=(Z7lguH`cQYSMINkK7T@k^vNik++nMgXTfVqb!CU`QrVzR&C*GX7;S+P zyf}$*r@Qh|VKCEODoTmA=2r76km?*qRb#0?LLs+{`{73IRE(pXKIl}qt%EgxB}*R)+eMS&s&+ex@BTG^dy@l_$j&K|n+3|Af#S>9j$s(;R*&<@a; z-l%gZ+Y(gm0}C_G`mS;D-qrC7)sY5O3X)-EpSiGT{r-vd&Hrg$2+c{IXMHvUPXN?y z$+?QqWZa385bdF#dshIFyd+1LGKAuNq5f9YVAGMQ6KX!YWU9)S#%$LwY-=i_tkac~ zFX_OAxe!cSwM{6+jBX0U!hgf52&1lhKUwyCh^ibrnH>;)r%0OH>vD%x>89>DkE~5c z*0MJ%Ge}k8l3bjtzRBe|;>^1#R6G(&#P$M8EFG0HRRHV2C@ICUgG1F3yVHf=blgD# z!6)I2#07`qwYaDWc$QKehju!K|KY;nh$kTdjCB;Rdbf#=v5AxiIe$JRk{G*)D}`+0 za-4ag2U|il@dXszF9~%%$hJ^YQiuSyF-NCZB{kJAuAOcJVC~Y3#NVrYR$F{E&t^^i zOIOioyg`MLPR=9{R0OMNCtrwl&Lnc?WuQ-Q*QSi6)!kYRWHF(lM*hwHT;j~^XsK>j z<3{aPj#bY0T>|W59)H-8K5Zp1mMWyHvfyl(Q?$d^z0gQ1rbWl=zRcn#-|-z^PEo?U zs*<}Jy`^t;Y4GxUDLAU^no<3_2 zz1nZ-m44L;ZwZ`oShJY^8P;+6D=E)LC_Pk8pSl1 zCowcMHY+eOConK4DIhORZ)8MabY&nYL^?7sGBhwYF*PwcF*GzbmvvkLvjH-b!O|3e z&01}58#faE?q9)=HV%@O?<7zZXU9?EYf`6n(q3a2hAgk0MHHTFGlm zaco?HDCWy>I5T`^I3!m(BN8E95YlS=#V=anjZj9RYK00$NbiNQs0S&mm#8aY14w-o zUU}hz@GkDikcc3u+lfHjh$KlO3ScjP6$&0L(s~rYRVQfnR!CzpD4<|5w+xQt08JnX zJor*k3z}aA!F=gI;>*HNKh5Ak5fgB5Xo(6niCLlsVL}B9#tA9t^^Q!4I70PA3Y8?D zhN7T|kXoQ3#1Tpn4a9;yFg!Y;9Elx03Q>y~go=s=NTCzwcECbt1r-&h(i;4KK&maQ z2cAMZ8VClOBv!DEQ6>nmH3qg(QVZiGCV}K8Ko=z~3NS)6!jjNRMq!n~j4Bb9gi@H^ zI?M)fuqxDJg^iwioB%h>h(&VVS`n3S5q4D|^HPN!rIqj+tQ2hO9fX4RK0+{sB?t)# z7e!EPaWrV+rh^DZ5ed2s00JC;1jr(=n878<4wfW1{0HLTK?qod08_xA&>P?ZT?9g~ z?lA#kjK{Q4%s>eOn=%PRb&v{*VufU~!+1idAel0TN`T%EKZwEmud`GP_NUXl z5QEd(%Yy4~vgv0rILPN$>HI7K)|2zW>%r0B1u7C1F*r%bg*d~C#C|k?ytI8XwDGc^ zKya*9-$23h!M+eQ%^%HQW=a42@iS&{aWfB%(DCfVZRDqUnZ(+faA?TH_M#6K47 z5ZtA6nEONw{`>n!LFP$fUmGW;x08uDzn2p3(f1&8LG_K>NDk0y6Z>A1;Gk;Xq9PZd4TMdbXm56T!6|j$>7~QAD^aV@WH#oAyzH@yI5*euHn1UO-dq9i*#BnV1!Vz zI!PD#?R=arIK*(%+w>|M9prz5A1y8dNMBL-F|v;UaZbGEU_u~&W_pIlf+JZe(asr% zGpd|F3PzGE4U7!zZ^-3C(kD+gP61Y^N7;|sbi?R6ySbgG{qbm4WcjqO@1V!~ZPBwr z32*nNFX1|yDK((x{z1TbELeiM1D2q^4J;JtR?!mLXekA!Ev)=&zXLsMK}Z?f4~TEx zsD40n)JpXo;=8whSjO;h5E{?ZFKKZx&gUsYP~zGk`d(0D`h>O)-M6$?Ip22_?i16G zayv|$Clp62i4cvb=v+U6XG?AR7JG{GzHg*|q>lx?t&gox!YmHr$nbyloK4=c{14O2 zZmwtZn@e%lNHjQ1|IEhe$*Y6&3gxwq!wfwBNev46A;*A!VmetCm#r{JU2MA~nf5SU zjOW>`$meDK=g}ARyc~XbcXIl#VKyJV&8K zI$~*-!Tw^*TMUBd;KgY6I?ZlA733^r*0QgskV+4ZiqRw+?@w%qA(Ns+IOHjt*&MWd(y3H)7B%y@(pY@#S=!UuDx9%z6b0vf^v+HJod- zNK5)|txI{YMi3yUXnMxEFNZg9&Ob~ua0Ol))ZH%!M5dNXoJ|w2Esw0R{~PD!jSapo zV6&s?b7E!IQ|utEcWbSG_eiAKY=YQ`*^|oYfe=S=4QGvW zgfS|@;ZXDxgwf}LyK|gon27cU)R7}1uSd~RG2vn)0_*_Wf^B$o{QBejf4#{r(|M6i zZx^SK_qtai;~vyWoF_z21Njn3DndbMp)O!4+NeXS(Lx>K*9z)-U{c`@+gJlTO6FH! z7uR5a7oG}s8}z@6KRQ_5!5{g|WAV3X1=fM+mq2vS0Yt@+)2<0d^y z!%ijUsbIH3|1Q}1F4(z8!*0_GtS%j09#pV@qYH&+fE@)cEiM1fg)|JR@<@$pK-Egq z{Hh(+Xx?mz*yD)qERO!LiPua)EUmG0pMa{N0d!q}A_Yu~*cuR6Xds%1*fD2ILDu7_ zWU=1Ps%kt3XbbLiv0yCzI?1sZCn;f(6FV6xKc=Ydn3<-F7eO~bbnvp^YlEyqw?Wi@ zG|ID*7V*pidmbVYS8K`Ta112>v#gAwyDxG^$rWZnwtspfiy%q-VhXB+R>#~!gl;l$AqbtjtS-3jw$7;W6I>I9P>ftJKR$0 z4!4x*(Qf&$@zUqwy$5oZ_5#j)l{K3(UpVOlnQu?tll#JNRzT<1K1-RG+xbSGe-Ea0a zuu0p1O`7KbTN(2?jB!MFK%ceCcr9Zcr%jA?K&Fh@c)Gui9E>S#)^u4-p%f#3=ssmF zjkd6sK@eKYqqWtXL{lg?UbT~Ho0PG&+9c%GnBISP`pfXAe|UDS)as#5sV6(sZP331 z-m2qtr_|$5cbisV4dkjh=FxM;Go?9-A8B}tr|@YJyJ$A81OKI+pMZxrwau?e)ys6q zHqL`Qz#>0zz=TgEJCeac(FMwXhcF>s33IYiIu}qDkTAK}IGN>CgOec}%E1@SL*@n90==mm#glQ;(> zKPDH{bSsQ@P1%%&mqHv*j!d*=+L&-^=0Ot}S z=2tfEED=FZP$*GOXuYfCR>tx{UvHnv4G&))d^os+{tf3W4nT@tCzboY0JPO9OU1SD z^K^&%4eEEqAKi7j*WYn}y5F<{>jB6w1JJV^@7q~gmAI|7JoJNa#3rv(;qKMvl2F?% z`6Ax9ZxEpzVwZEfWF_(B`-pF0_FTVho%HR=e|{PsE;F!)y_1hx+g|xTocL~+_Ug4u z5dCDAAonWX<(FO8ANujvANL!5%^~&j;zK{f#mDNq;i7r+qi-62%E|IudI5y+KV?^B zit6!DR%c#Wr7W@vo3b*BG*!DP*H7B&Z}mQ3KewKLixiCz^)pE4=!SerUtQqV51DJj zj&F-eHl=y79t%3|m$SYZwJNm;^~kIMghQ32?Th;LxRTt})p`1-s9r=@M%EAZ`@-u7 zMppUY&-8TVV+R|5RkLxilTA6YLjV_=k#=QdtuPB<>o+$xOf3!@#>ci{dU}n$Y1qpZ z_BF?neTPb}v8nYBjI=HNoW9G(HU_r3lMRpT62LY#HSvDSn6`myYnNuKWn(ir{g9bV zvkInr6-p`PT`5gtV6$pq`U2#hKpDwPUZ1vrdtngP;UFV-ar}K;J+v%7dzDJV_ z8Kd3f+`UbI_a FlqiL;wVj-?D5xeZKB0rSqdZ1M;BKqRQr-m5r?xeu_OWAs+udG zMfE<77N66}gv2B}CJ)fos(9H&GlTIa=~p5myH&R%yXhadBYxVKea$OXA#wfXpI6m% zcG2opA+F>51^P0PyJiTx#HM+1kqDM`-HZ(Xe zH#tN?GD1Z)HaRjvMMORzJV8M@G%`XtI5|N@H!(yuG&nFfIYdG-LPa$;IWj^;L_Q#0 zlkqJc12!``lflgueQdRUtR4J9z-Kf$cQnukJ2Nj@lLnYl4e{P=3tjjzNnQ>W%{17s6 zS?@CQBxJtJCYQ;4$O4u8TvUZ#{f??grQmH;#Xh;2-C95^5blwbfE@QYOH~TWz#hiN zsmehGILO!;s!d=s=w|FRRVAP=$#KTUsOV6V1(S@OqN)M4;5=g|sp`NMaEY-KR9itk zG7UzN+du=de-N-yvK{OIjbInp4VpkR*bCZJ3Liu_T3CAo^npWQKSnDRlP#{#T04rd zlZuTjHs=_|(UMNE4|IX}3g1iGRqCI|ZU;aIE8<4IU=Xl*(hml}Fz8X~_!-MMUor&Z z1cyQNZ$xFtV#+ZPeTjxeC*yhIEyq+Qf5p6b#(1MCe=wo4@IOQ6z%;m^vh+8`E`lrI zDwqXx;2Ky2H^60;`~9)vI+*8zv?-aP;w_C=wG?2U<>B5`dHOh{A{SKW-i0I)mJi6E zkvb!FRtz#KZ?ZA302F})kUA?-c`xA-Oe2^^JB>UWfinVPjVdetSIWww<5OR(ATLH< ztVv}Re|L4k@ue=@h)TpFr}A~(jc>OcKL)~W1MQ$gWv#)DwMULW_rfI`MmDTVWj*J{ z`m(5|r^6){7JpQ?YNpeT%ri&z!*F{5Z*IM+H6Pum9d`^bhf8RT(Ac2rXo(x6OOBaW x;Sw4f0R+S*055Iv55`Y7r8@iCSKPTR{{TTQ0+m~r-)sRN2{AYdB_%~qMhZZ`R2cvO diff --git a/src/body/leftrec.tex b/src/body/leftrec.tex index 3a4ed14..39daafa 100644 --- a/src/body/leftrec.tex +++ b/src/body/leftrec.tex @@ -447,7 +447,7 @@ \subsection{Unfolding the Core Combinators} } \end{minted} -\subsection{Composite Combinators} +\subsection{Composite Combinators}\label{sec:desguar-combinators} The remaining combinators are defined in terms of the core combinators, and are unfolded by recursively unfolding their constituent parts. For example, the \scala{map} combinator is defined as \scala{p.map(f) = pure(f) <*> p}, so its unfolding is simply implemented as: \begin{minted}{scala} @@ -477,7 +477,7 @@ \subsection{Composite Combinators} } \end{minted} -\subsection{Defining Utility Functions} +\subsection{Defining Utility Functions}\label{sec:leftrec-utils} In various places within the unfolding transformations, three higher-order functions were utilised which may not be provided by the Scala standard library: \begin{itemize} \item The flip function reverses the order of arguments applied to a function. This isn't defined in the standard library, so it must be defined manually. @@ -487,11 +487,11 @@ \subsection{Defining Utility Functions} % Therefore, \texttt{parsley-garnish} will insert the following definitions into the source file as a patch: \begin{minted}{scala} - def flip[A, B, C](f: A => B => C)(x: B)(y: A): C = f(y)(x) - def compose[A, B, C](f: B => C)(g: A => B)(x: A): C = f(g(x)) +def flip[A, B, C](f: A => B => C)(x: B)(y: A): C = f(y)(x) +def compose[A, B, C](f: B => C)(g: A => B)(x: A): C = f(g(x)) \end{minted} % -This brings these higher-order functions into scope, allowing the transformed code to make use of it. +Although this isn't very aesthetically pleasing, it is necessary to bring these higher-order functions into scope for the transformed code to make use of them. \subsection*{Success...?} With the unfolding transformations defined for all core combinators, the left-recursion factoring transformation is now complete. diff --git a/src/introduction/acknowledgements.pdf b/src/introduction/acknowledgements.pdf index e44e9d9b012936c126493684fcb708d62d78cedc..1f9ea8515575c4dd56c7ea7840d422856cf8caa5 100644 GIT binary patch delta 8653 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%0Djy0(6JqwFxR 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 diff --git a/src/introduction/acknowledgements.tex b/src/introduction/acknowledgements.tex index 948474a..ea7cc44 100644 --- a/src/introduction/acknowledgements.tex +++ b/src/introduction/acknowledgements.tex @@ -2,10 +2,21 @@ \begin{document} -\ourchapterstar{Acknowledgements} -\TODO{ - Jamie is cool - I love my family and friends etc. -} +\hspace{0pt} +\vfill +\section*{\centering Acknowledgements} +\noindent +I would like to thank my supervisor, Jamie Willis, for his support throughout not only this project but also my time at Imperial. +Thank you for always being available no matter what time of day, and for introducing me to Scala and parser combinators in the first place. +\newline + +\noindent +I would also like to thank my friends for making life interesting, and especially thank those who had to read my drafts and listen to my nonsensical ramblings about this project. +\newline + +\noindent +Finally, I'd like to thank my family for their unwavering and unconditional support throughout my life. +\vfill +\hspace{0pt} \end{document}