Why Gemfury? Push, build, and install  RubyGems npm packages Python packages Maven artifacts PHP packages Go Modules Debian packages RPM packages NuGet packages

Repository URL to install this package:

Details    
Pygments / examplefiles / output / example.whiley
Size: Mime:
€]q(cpygments.token
_TokenType
qXLiteralqXStringqXDocq‡q…qq}q(Xsubtypesq	cbuiltins
set
q
]q…qRq
Xparentqhhh†q…qq}q(h	h
]q(hhhXInterpolq‡q…qq}q(h	h
]q…qRqhhubhhhX	Delimeterq‡q…qq}q (h	h
]q!…q"Rq#hhubhhhXCharq$‡q%…q&q'}q((h	h
]q)…q*Rq+hhubhhhXSymbolq,‡q-…q.q/}q0(h	h
]q1…q2Rq3hhubhhhXSingleq4‡q5…q6q7}q8(h	h
]q9…q:Rq;hhubhhhXOtherq<‡q=…q>q?}q@(h	h
]qA…qBRqChhubhhhXBacktickqD‡qE…qFqG}qH(h	h
]qI…qJRqKhhubhhhXEscapeqL‡qM…qNqO}qP(h	h
]qQ…qRRqShhubhhhXRegexqT‡qU…qVqW}qX(h	h
]qY…qZRq[hhubhhhXMomentq\‡q]…q^q_}q`(h	h
]qa…qbRqchhubhhhXBooleanqd‡qe…qfqg}qh(h	h
]qi…qjRqkhhubhhhX	Characterql‡qm…qnqo}qp(h	h
]qq…qrRqshhubhhhX	Delimiterqt‡qu…qvqw}qx(h	h
]qy…qzRq{hhubhhhhXNameq|‡q}…q~q}q€(h	h
]q…q‚RqƒhhubhhhXAffixq„‡q……q†q‡}qˆ(h	h
]q‰…qŠRq‹hhubhhhXHeredocqŒ‡q…qށq}q(h	h
]q‘…q’Rq“hhubhhhXDoubleq”‡q•…q–q—}q˜(h	h
]q™…qšRq›hhubhhhXInterpqœ‡q…qžqŸ}q (h	h
]q¡…q¢Rq£hhubhhhXAtomq¤‡q¥…q¦q§}q¨(h	h
]q©…qªRq«hhube…q¬Rq­hhh…q®…q¯q°}q±(h	h
]q²(hhh<†q³…q´qµ}q¶(h	h
]q·…q¸Rq¹hh°ubhhh$†qº…q»q¼}q½(h	h
]q¾…q¿RqÀhh°ubhhXDateqFq…qÁqÄ}qÅ(h	h
]qƅqÇRqÈhh°ubhhXScalarqɆqʅqˁqÌ}qÍ(h	h
]qÎhhhÉXPlainqχqЅqсqÒ}qÓ(h	h
]qԅqÕRqÖhhÌuba…q×RqØhh°hÏhÒubhhhXNumberqنqڅqہqÜ}qÝ(h	h
]qÞ(hhhÙXFloatq߇qà…qáqâ}qã(h	h
]qä…qåRqæhhÜubhhhÙXDecqç‡qè…qéqê}që(h	h
]qì…qíRqîhhÜubhhhÙXRadixqï‡qð…qñqò}qó(h	h
]qô…qõRqöhhÜubhhhÙXOctq÷‡qø…qùqú}qû(h	h
]qü…qýRqþhhÜubhhhÙXBinqÿ‡r…rr}r(h	h
]r…rRrhhÜubhhhÙX	Attributer‡r…r	r
}r(h	h
]r…r
RrhhÜubhhhÙXHexr‡r…rr}r(h	h
]r…rRrhhÜubhhhÙXIntegerr‡r…rr}r(h	h
]rh(hhÙjXLongrtr…rr }r!(h	h
]r"…r#Rr$hjuba…r%Rr&hhÜjj ubhhhÙXDecimalr'‡r(…r)r*}r+(h	h
]r,…r-Rr.hhÜube…r/Rr0hh°hÿjhßhâjjjjh÷húhïhòjj
j'j*hçhêube…r1Rr2hh)…r3r4}r5(h	h
]r6(hhL…r7…r8r9}r:(h	h
]r;…r<Rr=hj4ubhXOperatorr>…r?…r@rA}rB(h	h
]rC(hj>XDBSrD†rE…rFrG}rH(h	h
]rI…rJRrKhjAubhj>XWordrL†rM…rNrO}rP(h	h
]rQ…rRRrShjAube…rTRrUhj4jLjOjDjGubhh|…rV…rWrX}rY(h	h
]rZ(hh|XTagr[†r\…r]r^}r_(h	h
]r`…raRrbhjXubhh|XEntityrc†rd…rerf}rg(h	h
]rhhh|jcjD‡ri…rjrk}rl(h	h
]rm…rnRrohjfuba…rpRrqhjXjDjkubhh|X	Exceptionrr†rs…rtru}rv(h	h
]rw…rxRryhjXubhh|X	Decoratorrz†r{…r|r}}r~(h	h
]r…r€RrhjXubhh|XClassr‚†rƒ…r„r…}r†(h	h
]r‡(hh|j‚jD‡rˆ…r‰rŠ}r‹(h	h
]rŒ…rRrŽhj…ubhh|j‚XStartr‡r…r‘r’}r“(h	h
]r”…r•Rr–hj…ube…r—Rr˜hjXjj’jDjŠubhh|XVariabler™†rš…r›rœ}r(h	h
]rž(hh|j™X	AnonymousrŸ‡r …r¡r¢}r£(h	h
]r¤…r¥Rr¦hjœubhh|j™j‚‡r§…r¨r©}rª(h	h
]r«…r¬Rr­hjœubhh|j™XMagicr®‡r¯…r°r±}r²(h	h
]r³…r´Rrµhjœubhh|j™XGlobalr¶‡r·…r¸r¹}rº(h	h
]r»…r¼Rr½hjœubhh|j™XInstancer¾‡r¿…rÀrÁ}rÂ(h	h
]rÃ…rÄRrÅhjœube…rÆRrÇhjXj‚j©j¶j¹j¾jÁj®j±jŸj¢ubhh|j†rÈ…rɁrÊ}rË(h	h
]rÌhh|jj™‡rÍ…r΁rÏ}rÐ(h	h
]rÑ…rÒRrÓhjÊuba…rÔRrÕhjXj™jÏubhh|X	NamespacerÖ†r×…r؁rÙ}rÚ(h	h
]rÛ…rÜRrÝhjXubhh|XPropertyrÞ†rß…ràrá}râ(h	h
]rã…räRråhjXubhh|h,†ræ…rçrè}ré(h	h
]rê…rëRrìhjXubhh|XClassesrí†rî…rïrð}rñ(h	h
]rò…róRrôhjXubhh|XPseudorõ†rö…r÷rø}rù(h	h
]rú…rûRrühjXubhh|XLabelrý†rþ…rÿr}r(h	h
]r…rRrhjXubhh|j>†r…rr}r(h	h
]r	…r
RrhjXubhh|XBuiltinr†r
…rr}r(h	h
]r(hh|jjõ‡r…rr}r(h	h
]r…rRrhjubhh|jXTyper‡r…rr}r(h	h
]r…rRr hjube…r!Rr"hjXjõjjjubhh|XFieldr#†r$…r%r&}r'(h	h
]r(…r)Rr*hjXubhh|h<†r+…r,r-}r.(h	h
]r/hh|h<XMemberr0‡r1…r2r3}r4(h	h
]r5…r6Rr7hj-uba…r8Rr9hjXj0j3ubhh|XFunctionr:†r;…r<r=}r>(h	h
]r?hh|j:j®‡r@…rArB}rC(h	h
]rD…rERrFhj=uba…rGRrHhjXj®jBubhh|j†rI…rJrK}rL(h	h
]rM…rNRrOhjXubhh|XConstantrP†rQ…rRrS}rT(h	h
]rU…rVRrWhjXube…rXRrYhj4jjÊjjj‚j…jPjSjzj}jcjfjrjuj:j=jÞjájýjjÖjÙh<j-j[j^j™jœj#j&h,jèjõjøj>jjíjðjjKubh°hXGenericrZ…r[…r\r]}r^(h	h
]r_(hjZXErrorr`†ra…rbrc}rd(h	h
]re…rfRrghj]ubhjZX
Subheadingrh†ri…rjrk}rl(h	h
]rm…rnRrohj]ubhjZX	Tracebackrp†rq…rrrs}rt(h	h
]ru…rvRrwhj]ubhjZXOutputrx†ry…rzr{}r|(h	h
]r}…r~Rrhj]ubhjZXPromptr€†r…r‚rƒ}r„(h	h
]r……r†Rr‡hj]ubhjZXDeletedrˆ†r‰…rЁr‹}rŒ(h	h
]r…rŽRrhj]ubhjZXInsertedr†r‘…r’r“}r”(h	h
]r•…r–Rr—hj]ubhjZXHeadingr˜†r™…ršr›}rœ(h	h
]r…ržRrŸhj]ubhjZXStrongr †r¡…r¢r£}r¤(h	h
]r¥…r¦Rr§hj]ubhjZXEmphr¨†r©…rªr«}r¬(h	h
]r­…r®Rr¯hj]ube…r°Rr±hj4jˆj‹j¨j«j`jcj˜j›jj“jxj{j€jƒj j£jhjkjpjsubhj`…r²…r³r´}rµ(h	h
]r¶…r·Rr¸hj4ubhXKeywordr¹…rº…r»r¼}r½(h	h
]r¾(hj¹jL†r¿…rÀrÁ}rÂ(h	h
]rÃ…rÄRrÅhj¼ubhj¹j¹†rÆ…rǁrÈ}rÉ(h	h
]rÊ…rËRrÌhj¼ubhj¹j†rÍ…r΁rÏ}rÐ(h	h
]rÑ…rÒRrÓhj¼ubhj¹XPreProcrÔ†rÕ…rցr×}rØ(h	h
]rÙ…rÚRrÛhj¼ubhj¹XControlr܆rÝ…rށrß}rà(h	h
]rá…râRrãhj¼ubhj¹jP†rä…råræ}rç(h	h
]rè…réRrêhj¼ubhj¹jÖ†rë…rìrí}rî(h	h
]rï…rðRrñhj¼ubhj¹jõ†rò…rórô}rõ(h	h
]rö…r÷Rrøhj¼ubhj¹XDeclarationrù†rú…rûrü}rý(h	h
]rþ…rÿRrhj¼ubhj¹XReservedr†r…rr}r(h	h
]r…rRrhj¼ube…r	Rr
hj4jPjæjùjüjÖjíjõjôjjjjÏjÜjßj¹jÈjÔj×jLjÁubhh<…r…rr
}r(h	h
]r…rRrhj4ubhXTextr…r…rr}r(h	h
]r(hjXRootr†r…rr}r(h	h
]r…rRrhjubhjh,†r …r!r"}r#(h	h
]r$…r%Rr&hjubhjXRagr'†r(…r)r*}r+(h	h
]r,…r-Rr.hjubhjX
Whitespacer/†r0…r1r2}r3(h	h
]r4…r5Rr6hjubhjXBeerr7†r8…r9r:}r;(h	h
]r<…r=Rr>hjubhjXPunctuationr?†r@…rArB}rC(h	h
]rD…rERrFhjube…rGRrHhj4j/j2h,j"j?jBjjj7j:j'j*ubhXCommentrI…rJ…rKrL}rM(h	h
]rN(hjIXPreprocrO†rP…rQrR}rS(h	h
]rT…rURrVhjLubhjIXMultirW†rX…rYrZ}r[(h	h
]r\…r]Rr^hjLubhjIXHashbangr_†r`…rarb}rc(h	h
]rd…reRrfhjLubhjIh4†rg…rhri}rj(h	h
]rk…rlRrmhjLubhjIX
SingleLinern†ro…rprq}rr(h	h
]rs…rtRruhjLubhjIh†rv…rwrx}ry(h	h
]rz…r{Rr|hjLubhjIX	Directiver}†r~…rr€}r(h	h
]r‚…rƒRr„hjLubhjIX	Multiliner…†r†…r‡rˆ}r‰(h	h
]rŠ…r‹RrŒhjLubhjIX
Singleliner†rŽ…rr}r‘(h	h
]r’…r“Rr”hjLubhjIXPreprocFiler•†r–…r—r˜}r™(h	h
]rš…r›RrœhjLubhjIXSpecialr†rž…rŸr }r¡(h	h
]r¢…r£Rr¤hjLube…r¥Rr¦hj4j_jbj…jˆjOjRj•j˜h4jijj j}j€jnjqhjxjWjZjjubhj?…r§…r¨r©}rª(h	h
]r«hj?X	Indicatorr¬†r­…r®r¯}r°(h	h
]r±…r²Rr³hj©uba…r´Rrµhj4j¬j¯ube…r¶Rr·jjhLj9j`j´h<j
j¹j¼h|jXhh°j?j©j>jAjIjLjZj]XTokenr¸j4hhhÙhÜubhhhÙhÜhÁhÄhÉhÌh<hµh$h¼ubh„h‡hDhGh$h'hthwhhh”h—hLhOhŒhhhh<h?hThWh4h7h,h/hlhoh\h_hœhŸhdhghhh¤h§h|hububXš/**
 * Example Whiley program, taken from the Whiley benchmark suite.
 * https://github.com/Whiley/WyBench/blob/master/src/101_interpreter/Main.whiley
 */r¹†rºjX

r»†r¼jíXimportr½†r¾jX r¿†rÀjXXwhileyrÁ†rÂj©X.rÆrÄjXXlangrņrÆj©jÆrÇjXXSystemrȆrÉjX
rʆrËjíXimportr̆rÍjj¿†rÎjXXwhileyrφrÐj©jÆrÑjXXlangrÒ†rÓj©jÆrÔjXXIntrÕ†rÖjjʆr×jíXimportr؆rÙjj¿†rÚjXXwhileyrÛ†rÜj©jÆrÝjXXiorÞ†rßj©jÆràjXXFilerá†râjjʆrãjíXimporträ†råjj¿†ræjXXstringrç†rèjj¿†réjíXfromrê†rëjj¿†rìjXXwhileyrí†rîj©jÆrïjXXlangrð†rñj©jÆròjXXASCIIró†rôjjʆrõjíXimportrö†r÷jj¿†røjXXcharrù†rújj¿†rûjíXfromrü†rýjj¿†rþjXXwhileyrÿ†rj©jÆrjXXlangr†rj©jÆrjXXASCIIr†rjX

r†rjiX7// ====================================================r	†r
jjʆrjiX&// A simple calculator for expressionsr†r
jjʆrjiX7// ====================================================r†rjX

r†rjüXconstantr†rjj¿†rjXXADDr†rjj¿†rjXisr†rjj¿†rjX0r†rjjʆrjüXconstantr†r jj¿†r!jXXSUBr"†r#jj¿†r$jXisr%†r&jj¿†r'jX1r(†r)jjʆr*jüXconstantr+†r,jj¿†r-jXXMULr.†r/jj¿†r0jXisr1†r2jj¿†r3jX2r4†r5jjʆr6jüXconstantr7†r8jj¿†r9jXXDIVr:†r;jj¿†r<jXisr=†r>jj¿†r?jX3r@†rAjX

rB†rCjiX// binary operationrD†rEjjʆrFjüXtyperG†rHjj¿†rIjXXBOprJ†rKjj¿†rLjXisrM†rNjj¿†rOj©X(rP†rQjÏXintrR†rSjj¿†rTjXXxrU†rVj©X)rW†rXjj¿†rYjXwhererZ†r[jj¿†r\jXXADDr]†r^jj¿†r_jAX<r`†rajAX=rb†rcjj¿†rdjXjU†rejj¿†rfjAX&rg†rhjAjg†rijj¿†rjjXjU†rkjj¿†rljAj`†rmjAjb†rnjj¿†rojXXDIVrp†rqjjʆrrjüXtypers†rtjj¿†rujXXBinOprv†rwjj¿†rxjXisry†rzjj¿†r{j©X{r|†r}jj¿†r~jXXBOpr†r€jj¿†rjXXopr‚†rƒj©X,r„†r…jj¿†r†jXXExprr‡†rˆjj¿†r‰jXXlhsrІr‹j©j„†rŒjj¿†rjXXExprrކrjj¿†rjXXrhsr‘†r’jj¿†r“j©X}r”†r•jX 

r–†r—jiX// variablesr˜†r™jjʆršjüXtyper›†rœjj¿†rjXXVarrž†rŸjj¿†r jXisr¡†r¢jj¿†r£j©j|†r¤jj¿†r¥jXXstringr¦†r§jj¿†r¨jXXidr©†rªjj¿†r«j©j”†r¬jX

r­†r®jiX// list accessr¯†r°jjʆr±jüXtyper²†r³jj¿†r´jXX
ListAccessrµ†r¶jj¿†r·jXisr¸†r¹jj¿†rºj©j|†r»jX 
    r¼†r½jXXExprr¾†r¿jj¿†rÀjXXsrcrÁ†rÂj©j„†rÃjX 
    rĆrÅjXXExprrƆrÇjj¿†rÈjXXindexrɆrÊjjʆrËj©j”†rÌjX 

r͆rÎjiX// expression treerφrÐjjʆrÑjüXtyperÒ†rÓjj¿†rÔjXXExprrÕ†rÖjj¿†r×jXisr؆rÙjj¿†rÚjÏXintrÛ†rÜjj¿†rÝjAX|rÞ†rßjX  rà†rájiX// constantrâ†rãjX
    rä†råjXXVarræ†rçjj¿†rèjAjÞ†réjX              rê†rëjiX// variablerì†ríjX
    rî†rïjXXBinOprð†rñjj¿†ròjAjÞ†rójX            rô†rõjiX// binary operatorrö†r÷jX
    rø†rùjXXExprrú†rûj©X[rü†rýj©X]rþ†rÿjj¿†rjAjÞ†rjX           r†rjiX// array constructorr†rjX
    r†rjXX
ListAccessr†r	jX	         r
†rjiX// list accessr†r
jX

r†rjiX	// valuesr†rjjʆrjüXtyper†rjj¿†rjXXValuer†rjj¿†rjXisr†rjj¿†rjÏXintr†rjj¿†rjAjÞ†rjj¿†r jXXValuer!†r"j©jü†r#j©jþ†r$jX

r%†r&jiX// stmtsr'†r(jjʆr)jüXtyper*†r+jj¿†r,jXXPrintr-†r.jj¿†r/jXisr0†r1jj¿†r2j©j|†r3jj¿†r4jXXExprr5†r6jj¿†r7jXXrhsr8†r9jj¿†r:j©j”†r;jjʆr<jüXtyper=†r>jj¿†r?jXXSetr@†rAjj¿†rBjXisrC†rDjj¿†rEj©j|†rFjj¿†rGjXXstringrH†rIjj¿†rJjXXlhsrK†rLj©j„†rMjj¿†rNjXXExprrO†rPjj¿†rQjXXrhsrR†rSjj¿†rTj©j”†rUjjʆrVjüXtyperW†rXjj¿†rYjXXStmtrZ†r[jj¿†r\jXisr]†r^jj¿†r_jXXPrintr`†rajj¿†rbjAjÞ†rcjj¿†rdjXXSetre†rfjX

rg†rhjiX7// ====================================================ri†rjjjʆrkjiX// Expression Evaluatorrl†rmjjʆrnjiX7// ====================================================ro†rpjX

rq†rrjüXtypers†rtjj¿†rujXXRuntimeErrorrv†rwjj¿†rxjXisry†rzjj¿†r{j©j|†r|jj¿†r}jXXstringr~†rjj¿†r€jXXmsgr†r‚jj¿†rƒj©j”†r„jjʆr…jüXtyper††r‡jj¿†rˆjXXEnvironmentr‰†rŠjj¿†r‹jXisrŒ†rjj¿†rŽj©jü†rj©j|†rjXXstringr‘†r’jj¿†r“jXXkr”†r•j©j„†r–jj¿†r—jXXValuer˜†r™jj¿†ršjXXvr›†rœj©j”†rj©jþ†ržjX

rŸ†r jiXE// Evaluate an expression in a given environment reducing either to ar¡†r¢jjʆr£jiXC// value, or a runtime error.  The latter occurs if evaluation getsr¤†r¥jjʆr¦jiX2// "stuck" (e.g. expression is // not well-formed)r§†r¨jjʆr©jüXfunctionrª†r«jj¿†r¬jXXevaluater­†r®j©jP†r¯jXXExprr°†r±jj¿†r²jXXer³†r´j©j„†rµjj¿†r¶jXXEnvironmentr·†r¸jj¿†r¹jXXenvrº†r»j©jW†r¼jj¿†r½jAX-r¾†r¿jAX>rÀ†rÁjj¿†rÂjXXValuerÆrÄjj¿†rÅjAjÞ†rÆjj¿†rÇjXXRuntimeErrorrȆrÉjAX:rʆrËjX
    r̆rÍjiX//rΆrÏjX
    rІrÑjXifrÒ†rÓjj¿†rÔjXj³†rÕjj¿†rÖjXisr׆rØjj¿†rÙjÏXintrÚ†rÛjAjʆrÜjX	
        r݆rÞjXreturnr߆ràjj¿†rájXj³†râjX
    rã†räjXelserå†ræjj¿†rçjXifrè†réjj¿†rêjXj³†rëjj¿†rìjXisrí†rîjj¿†rïjXXVarrð†rñjAjʆròjX	
        ró†rôjXreturnrõ†röjj¿†r÷jXXenvrø†rùj©jü†rújXj³†rûj©jÆrüjXXidrý†rþj©jþ†rÿjX
    r†rjXelser†rjj¿†rjXifr†rjj¿†rjXj³†rjj¿†r	jXisr
†rjj¿†rjXXBinOpr
†rjAjʆrjX	
        r†rjXXValuer†rjAjÞ†rjXXRuntimeErrorr†rjj¿†rjXXlhsr†rjj¿†rjAjb†rjj¿†rjXXevaluater†rj©jP†rjXj³†r j©jÆr!jXXlhsr"†r#j©j„†r$jj¿†r%jXXenvr&†r'j©jW†r(jX	
        r)†r*jXXValuer+†r,jAjÞ†r-jXXRuntimeErrorr.†r/jj¿†r0jXXrhsr1†r2jj¿†r3jAjb†r4jj¿†r5jXXevaluater6†r7j©jP†r8jXj³†r9j©jÆr:jXXrhsr;†r<j©j„†r=jj¿†r>jXXenvr?†r@j©jW†rAjX	
        rB†rCjiX// check if stuckrD†rEjX	
        rF†rGjXifrH†rIjj¿†rJjAX!rK†rLj©jP†rMjXXlhsrN†rOjj¿†rPjXisrQ†rRjj¿†rSjÏXintrT†rUjj¿†rVjAjg†rWjAjg†rXjj¿†rYjXXrhsrZ†r[jj¿†r\jXisr]†r^jj¿†r_jÏXintr`†raj©jW†rbjAjʆrcjX

            rd†rejXreturnrf†rgjj¿†rhj©j|†rijXXmsgrj†rkjAjʆrljj¿†rmhX"rn†rohX)arithmetic attempted on non-numeric valuerp†rqhjn†rrj©j”†rsjX	
        rt†rujiX!// switch statement would be goodrv†rwjX	
        rx†ryjXifrz†r{jj¿†r|jXj³†r}j©jÆr~jXXopr†r€jj¿†rjAjb†r‚jAjb†rƒjj¿†r„jXXADDr…†r†jAjʆr‡jX

            rˆ†r‰jXreturnrІr‹jj¿†rŒjXXlhsr†rŽjj¿†rjAX+r†r‘jj¿†r’jXXrhsr“†r”jX	
        r•†r–jXelser—†r˜jj¿†r™jXifrš†r›jj¿†rœjXj³†rj©jÆržjXXoprŸ†r jj¿†r¡jAjb†r¢jAjb†r£jj¿†r¤jXXSUBr¥†r¦jAjʆr§jX

            r¨†r©jXreturnrª†r«jj¿†r¬jXXlhsr­†r®jj¿†r¯jAj¾†r°jj¿†r±jXXrhsr²†r³jX	
        r´†rµjXelser¶†r·jj¿†r¸jXifr¹†rºjj¿†r»jXj³†r¼j©jÆr½jXXopr¾†r¿jj¿†rÀjAjb†rÁjAjb†rÂjj¿†rÃjXXMULrĆrÅjAjʆrÆjX

            rdžrÈjXreturnrɆrÊjj¿†rËjXXlhsr̆rÍjj¿†rÎjAX*rφrÐjj¿†rÑjXXrhsrÒ†rÓjX	
        rÔ†rÕjXelserÖ†r×jj¿†rØjXifrÙ†rÚjj¿†rÛjXXrhsr܆rÝjj¿†rÞjAjK†rßjAjb†ràjj¿†rájj†râjAjʆrãjX

            rä†råjXreturnræ†rçjj¿†rèjXXlhsré†rêjj¿†rëjAX/rì†ríjj¿†rîjXXrhsrï†rðjX	
        rñ†ròjXreturnró†rôjj¿†rõj©j|†röjXXmsgr÷†røjAjʆrùjj¿†rúhjn†rûhXdivide-by-zerorü†rýhjn†rþj©j”†rÿjX
    r†rjXelser†rjj¿†rjXifr†rjj¿†rjXj³†rjj¿†r	jXisr
†rjj¿†rjXXExprr
†rj©jü†rj©jþ†rjAjʆrjX	
        r†rj©jü†rjXXValuer†rj©jþ†rjj¿†rjXXrr†rjj¿†rjAjb†rjj¿†rj©jü†rj©jþ†rjX	
        r †r!jXforr"†r#jj¿†r$jXXir%†r&jj¿†r'jXinr(†r)jj¿†r*jXj³†r+jAjʆr,jX

            r-†r.jXXValuer/†r0jAjÞ†r1jXXRuntimeErrorr2†r3jj¿†r4jXj›†r5jj¿†r6jAjb†r7jj¿†r8jXXevaluater9†r:j©jP†r;jXj%†r<j©j„†r=jj¿†r>jXXenvr?†r@j©jW†rAjX

            rB†rCjXifrD†rEjj¿†rFjXj›†rGjj¿†rHjXisrI†rJjj¿†rKjXXRuntimeErrorrL†rMjAjʆrNjX
                rO†rPjXreturnrQ†rRjj¿†rSjXj›†rTjX

            rU†rVjXelserW†rXjAjʆrYjX
                rZ†r[jXj†r\jj¿†r]jAjb†r^jj¿†r_jXj†r`jj¿†rajAj†rbjAj†rcjj¿†rdj©jü†rejXj›†rfj©jþ†rgjX	
        rh†rijXreturnrj†rkjj¿†rljXj†rmjX
    rn†rojXelserp†rqjj¿†rrjXifrs†rtjj¿†rujXj³†rvjj¿†rwjXisrx†ryjj¿†rzjXX
ListAccessr{†r|jAjʆr}jX	
        r~†rjXXValuer€†rjAjÞ†r‚jXXRuntimeErrorrƒ†r„jj¿†r…jXXsrcr††r‡jj¿†rˆjAjb†r‰jj¿†rŠjXXevaluater‹†rŒj©jP†rjXj³†rŽj©jÆrjXXsrcr†r‘j©j„†r’jj¿†r“jXXenvr”†r•j©jW†r–jX	
        r—†r˜jXXValuer™†ršjAjÞ†r›jXXRuntimeErrorrœ†rjj¿†ržjXXindexrŸ†r jj¿†r¡jAjb†r¢jj¿†r£jXXevaluater¤†r¥j©jP†r¦jXj³†r§j©jÆr¨jXXindexr©†rªj©j„†r«jj¿†r¬jXXenvr­†r®j©jW†r¯jX	
        r°†r±jiX// santity checksr²†r³jX	
        r´†rµjXifr¶†r·jj¿†r¸jXXsrcr¹†rºjj¿†r»jXisr¼†r½jj¿†r¾j©jü†r¿jXXValuerÀ†rÁj©jþ†rÂjj¿†rÃjAjg†rÄjAjg†rÅjj¿†rÆjXXindexrdžrÈjj¿†rÉjXisrʆrËjj¿†rÌjÏXintr͆rÎjj¿†rÏjAjg†rÐjAjg†rÑjj¿†rÒjXXindexrÓ†rÔjj¿†rÕjAjÀ†rÖjAjb†r×jj¿†rØjj†rÙjj¿†rÚjAjg†rÛjAjg†rÜjj¿†rÝjXXindexrÞ†rßjj¿†ràjAj`†rájj¿†râjAjÞ†rãjXXsrcrä†råjAjÞ†ræjAjʆrçjX

            rè†réjXreturnrê†rëjj¿†rìjXXsrcrí†rîj©jü†rïjXXindexrð†rñj©jþ†ròjX	
        ró†rôjXelserõ†röjAjʆr÷jX

            rø†rùjXreturnrú†rûjj¿†rüj©j|†rýjXXmsgrþ†rÿjAjʆrjj¿†rhjn†rhXinvalid list accessr†rhjn†rj©j”†rjX
    r†rjXelser	†r
jAjʆrjX	
        r†r
jXreturnr†rjj¿†rjj†rjj¿†rjiX// dead-coder†rjX

r†rjiX7// ====================================================r†rjjʆrjiX// Expression Parserr†rjjʆrjiX7// ====================================================r†rjX

r†r jüXtyper!†r"jj¿†r#jXXStater$†r%jj¿†r&jXisr'†r(jj¿†r)j©j|†r*jj¿†r+jXXstringr,†r-jj¿†r.jXXinputr/†r0j©j„†r1jj¿†r2jÏXintr3†r4jj¿†r5jXXposr6†r7jj¿†r8j©j”†r9jjʆr:jüXtyper;†r<jj¿†r=jXXSyntaxErrorr>†r?jj¿†r@jXisrA†rBjj¿†rCj©j|†rDjj¿†rEjXXstringrF†rGjj¿†rHjXXmsgrI†rJj©j„†rKjj¿†rLjÏXintrM†rNjj¿†rOjXXstartrP†rQj©j„†rRjj¿†rSjÏXintrT†rUjj¿†rVjXXendrW†rXjj¿†rYj©j”†rZjX

r[†r\jüXfunctionr]†r^jj¿†r_jXXSyntaxErrorr`†raj©jP†rbjXXstringrc†rdjj¿†rejXXmsgrf†rgj©j„†rhjj¿†rijÏXintrj†rkjj¿†rljXXstartrm†rnj©j„†rojj¿†rpjÏXintrq†rrjj¿†rsjXXendrt†ruj©jW†rvjj¿†rwjAj¾†rxjAjÀ†ryjj¿†rzjXXSyntaxErrorr{†r|jAjʆr}jX
    r~†rjXreturnr€†rjj¿†r‚j©j|†rƒjj¿†r„jXXmsgr…†r†jAjʆr‡jj¿†rˆjXXmsgr‰†rŠj©j„†r‹jj¿†rŒjXXstartr†rŽjAjʆrjj¿†rjXXstartr‘†r’j©j„†r“jj¿†r”jXXendr•†r–jAjʆr—jj¿†r˜jXXendr™†ršjj¿†r›j©j”†rœjX

r†ržjiX// Top-level parse methodrŸ†r jjʆr¡jüXfunctionr¢†r£jj¿†r¤jXXparser¥†r¦j©jP†r§jXXStater¨†r©jj¿†rªjXXstr«†r¬j©jW†r­jj¿†r®jAj¾†r¯jAjÀ†r°jj¿†r±j©jP†r²jXXStmtr³†r´j©j„†rµjXXStater¶†r·j©jW†r¸jAjÞ†r¹jXXSyntaxErrorrº†r»jAjʆr¼jX
    r½†r¾jiX//r¿†rÀjX
    rÁ†rÂjXXVarrÆrÄjj¿†rÅjXXkeywordrƆrÇj©j„†rÈjj¿†rÉjXXVarrʆrËjj¿†rÌjXj›†rÍjX
    rΆrÏjXXExprrІrÑjj¿†rÒjXj³†rÓjX
    rÔ†rÕjÏXintrÖ†r×jj¿†rØjXXstartrÙ†rÚjj¿†rÛjAjb†rÜjj¿†rÝjXXstrÞ†rßj©jÆràjXXposrá†râjX
    rã†räjiX//rå†ræjX
    rç†rèjXXkeywordré†rêj©j„†rëjXXstrì†ríjj¿†rîjAjb†rïjj¿†rðjXXparseIdentifierrñ†ròj©jP†rójXXstrô†rõj©jW†röjX
    r÷†røjXswitchrù†rújj¿†rûjXXkeywordrü†rýj©jÆrþjXXidrÿ†r	jAjʆr	jX	
        r	†r	jXcaser	†r	jj¿†r	hjn†r	hXprintr	†r		hjn†r
	jAjʆr	jX

            r	†r
	jÏXanyr	†r	jj¿†r	jXj†r	jj¿†r	jAjb†r	jj¿†r	jXXparseAddSubExprr	†r	j©jP†r	jXXstr	†r	j©jW†r	jX

            r	†r	jXifr	†r	jj¿†r	jAjK†r 	j©jP†r!	jXj†r"	jj¿†r#	jXisr$	†r%	jj¿†r&	jXXSyntaxErrorr'	†r(	j©jW†r)	jAjʆr*	jX
                r+	†r,	jXj³†r-	j©j„†r.	jXXstr/	†r0	jj¿†r1	jAjb†r2	jj¿†r3	jXj†r4	jX
                r5	†r6	jXreturnr7	†r8	jj¿†r9	j©j|†r:	jXXrhsr;	†r<	jAjʆr=	jj¿†r>	jXj³†r?	j©j”†r@	j©j„†rA	jXXstrB	†rC	jX

            rD	†rE	jXelserF	†rG	jAjʆrH	jX
                rI	†rJ	jXreturnrK	†rL	jj¿†rM	jXj†rN	jj¿†rO	jiX
// error caserP	†rQ	jX	
        rR	†rS	jXcaserT	†rU	jj¿†rV	hjn†rW	hXsetrX	†rY	hjn†rZ	jAjʆr[	jX

            r\	†r]	jXXstr^	†r_	jj¿†r`	jAjb†ra	e(jj¿†rb	jXXparseWhiteSpacerc	†rd	j©jP†re	jXXstrf	†rg	j©jW†rh	jX

            ri	†rj	jXj›†rk	j©j„†rl	jXXstrm	†rn	jj¿†ro	jAjb†rp	jj¿†rq	jXXparseIdentifierrr	†rs	j©jP†rt	jXXstru	†rv	j©jW†rw	jX

            rx	†ry	jÏXanyrz	†r{	jj¿†r|	jXj†r}	jj¿†r~	jAjb†r	jj¿†r€	jXXparseAddSubExprr	†r‚	j©jP†rƒ	jXXstr„	†r…	j©jW†r†	jX

            r‡	†rˆ	jXifr‰	†rŠ	jj¿†r‹	jAjK†rŒ	j©jP†r	jXj†rŽ	jj¿†r	jXisr	†r‘	jj¿†r’	jXXSyntaxErrorr“	†r”	j©jW†r•	jAjʆr–	jX
                r—	†r˜	jXj³†r™	j©j„†rš	jXXstr›	†rœ	jj¿†r	jAjb†rž	jj¿†rŸ	jXj†r 	jX
                r¡	†r¢	jXreturnr£	†r¤	jj¿†r¥	j©j|†r¦	jXXlhsr§	†r¨	jAjʆr©	jj¿†rª	jXj›†r«	j©jÆr¬	jXXidr­	†r®	j©j„†r¯	jj¿†r°	jXXrhsr±	†r²	jAjʆr³	jj¿†r´	jXj³†rµ	j©j”†r¶	j©j„†r·	jXXstr¸	†r¹	jX

            rº	†r»	jXelser¼	†r½	jAjʆr¾	jX
                r¿	†rÀ	jXreturnrÁ	†rÂ	jj¿†rÃ	jXj†rÄ	jj¿†rÅ	jiX
// error caserÆ	†rÇ	jX	
        rÈ	†rÉ	jXdefaultrÊ	†rË	jAjʆrÌ	jX

            rÍ	†rÎ	jXreturnrÏ	†rÐ	jj¿†rÑ	jXXSyntaxErrorrÒ	†rÓ	j©jP†rÔ	hjn†rÕ	hXunknown statementrÖ	†r×	hjn†rØ	j©j„†rÙ	jXXstartrÚ	†rÛ	j©j„†rÜ	jXXstrÝ	†rÞ	j©jÆrß	jXXposrà	†rá	jAj¾†râ	jj(†rã	j©jW†rä	jX

rå	†ræ	jüXfunctionrç	†rè	jj¿†ré	jXXparseAddSubExprrê	†rë	j©jP†rì	jXXStaterí	†rî	jj¿†rï	jXXstrð	†rñ	j©jW†rò	jj¿†ró	jAj¾†rô	jAjÀ†rõ	jj¿†rö	j©jP†r÷	jXXExprrø	†rù	j©j„†rú	jj¿†rû	jXXStaterü	†rý	j©jW†rþ	jAjÞ†rÿ	jXXSyntaxErrorr
†r
jAjʆr
jX	    
    r
†r
jiX//r
†r
jX
    r
†r
jXXExprr	
†r

jj¿†r
jXXlhsr
†r
j©j„†r
jj¿†r
jXXExprr
†r
jj¿†r
jXXrhsr
†r
jX      
    r
†r
jiX// First, pass left-hand side r
†r
jX
    r
†r
jÏXanyr
†r
jj¿†r
jXj†r
jX  r
†r 
jAjb†r!
jj¿†r"
jXXparseMulDivExprr#
†r$
j©jP†r%
jXXstr&
†r'
j©jW†r(
jX
    r)
†r*
jiX//r+
†r,
jX
    r-
†r.
jXifr/
†r0
jj¿†r1
jXj†r2
jj¿†r3
jXisr4
†r5
jj¿†r6
jXXSyntaxErrorr7
†r8
jAjʆr9
jX	
        r:
†r;
jXreturnr<
†r=
jj¿†r>
jXj†r?
jX
    r@
†rA
jiX//    rB
†rC
jX
    rD
†rE
jXXlhsrF
†rG
j©j„†rH
jXXstrI
†rJ
jj¿†rK
jAjb†rL
jj¿†rM
jXj†rN
jX
    rO
†rP
jXXstrQ
†rR
jj¿†rS
jAjb†rT
jj¿†rU
jXXparseWhiteSpacerV
†rW
j©jP†rX
jXXstrY
†rZ
j©jW†r[
jX
    r\
†r]
jiX,// Second, see if there is a right-hand sider^
†r_
jX
    r`
†ra
jXifrb
†rc
jj¿†rd
jXXstre
†rf
j©jÆrg
jXXposrh
†ri
jj¿†rj
jAj`†rk
jj¿†rl
jAjކrm
jXXstrn
†ro
j©jÆrp
jXXinputrq
†rr
jAjކrs
jj¿†rt
jAjg†ru
jAjg†rv
jj¿†rw
jXXstrx
†ry
j©jÆrz
jXXinputr{
†r|
j©jü†r}
jXXstr~
†r
j©jÆr€
jXXposr
†r‚
j©jþ†rƒ
jj¿†r„
jAjb†r…
jAjb†r†
jj¿†r‡
h'X'+'rˆ
†r‰
jAjʆrŠ
jX	
        r‹
†rŒ
jiX// add expressionr
†rŽ
jX	
        r
†r
jXXstr‘
†r’
j©jÆr“
jXXposr”
†r•
jj¿†r–
jAjb†r—
jj¿†r˜
jXXstr™
†rš
j©jÆr›
jXXposrœ
†r
jj¿†rž
jAj†rŸ
jj¿†r 
jj(†r¡
jX	
        r¢
†r£
jXj†r¤
jj¿†r¥
jAjb†r¦
jj¿†r§
jXXparseAddSubExprr¨
†r©
j©jP†rª
jXXstr«
†r¬
j©jW†r­
jX        
        r®
†r¯
jXifr°
†r±
jj¿†r²
jAjK†r³
j©jP†r´
jXj†rµ
jj¿†r¶
jXisr·
†r¸
jj¿†r¹
jXXSyntaxErrorrº
†r»
j©jW†r¼
jAjʆr½
jX

            r¾
†r¿
jXXrhsrÀ
†rÁ
j©j„†rÂ
jXXstrÃ
†rÄ
jj¿†rÅ
jAjb†rÆ
jj¿†rÇ
jXj†rÈ
jX

            rÉ
†rÊ
jXreturnrË
†rÌ
jj¿†rÍ
j©j|†rÎ
jXXoprÏ
†rÐ
jAjʆrÑ
jj¿†rÒ
jXXADDrÓ
†rÔ
j©j„†rÕ
jj¿†rÖ
jXXlhsr×
†rØ
jAjʆrÙ
jj¿†rÚ
jXXlhsrÛ
†rÜ
j©j„†rÝ
jj¿†rÞ
jXXrhsrß
†rà
jAjʆrá
jj¿†râ
jXXrhsrã
†rä
j©j”†rå
j©j„†ræ
jXXstrç
†rè
jX	
        ré
†rê
jXelserë
†rì
jAjʆrí
jX

            rî
†rï
jXreturnrð
†rñ
jj¿†rò
jXj†ró
jX
    rô
†rõ
jXelserö
†r÷
jj¿†rø
jXifrù
†rú
jj¿†rû
jXXstrü
†rý
j©jÆrþ
jXXposrÿ
†rjj¿†rjAj`†rjj¿†rjAjÞ†rjXXstr†rj©jÆrjXXinputr†r	jAjÞ†r
jj¿†rjAjg†rjAjg†r
jj¿†rjXXstr†rj©jÆrjXXinputr†rj©jü†rjXXstr†rj©jÆrjXXposr†rj©jþ†rjj¿†rjAjb†rjAjb†rjj¿†rh'X'-'r†r jAjʆr!jX	
        r"†r#jiX// subtract expressionr$†r%jX	
        r&†r'jXXstr(†r)j©jÆr*jXXposr+†r,jj¿†r-jAjb†r.jj¿†r/jXXstr0†r1j©jÆr2jXXposr3†r4jj¿†r5jAj†r6jj¿†r7jj(†r8jX	
        r9†r:jXj†r;jj¿†r<jAjb†r=jj¿†r>jXXparseAddSubExprr?†r@j©jP†rAjXXstrB†rCj©jW†rDjX        
        rE†rFjXifrG†rHjj¿†rIjAjK†rJj©jP†rKjXj†rLjj¿†rMjXisrN†rOjj¿†rPjXXSyntaxErrorrQ†rRj©jW†rSjAjʆrTjX

            rU†rVjXXrhsrW†rXj©j„†rYjXXstrZ†r[jj¿†r\jAjb†r]jj¿†r^jXj†r_jX

            r`†rajXreturnrb†rcjj¿†rdj©j|†rejXXoprf†rgjAjʆrhjj¿†rijXXSUBrj†rkj©j„†rljj¿†rmjXXlhsrn†rojAjʆrpjj¿†rqjXXlhsrr†rsj©j„†rtjj¿†rujXXrhsrv†rwjAjʆrxjj¿†ryjXXrhsrz†r{j©j”†r|j©j„†r}jXXstr~†rjX	
        r€†rjXelser‚†rƒjAjʆr„jX

            r…†r†jXreturnr‡†rˆjj¿†r‰jXj†rŠjX	    
    r‹†rŒjiX// No right-hand sider†rŽjX
    r†rjXreturnr‘†r’jj¿†r“j©jP†r”jXXlhsr•†r–j©j„†r—jXXstr˜†r™j©jW†ršjX

r›†rœjüXfunctionr†ržjj¿†rŸjXXparseMulDivExprr †r¡j©jP†r¢jXXStater£†r¤jj¿†r¥jXXstr¦†r§j©jW†r¨jj¿†r©jAj¾†rªjAjÀ†r«jj¿†r¬j©jP†r­jXXExprr®†r¯j©j„†r°jj¿†r±jXXStater²†r³j©jW†r´jAjÞ†rµjXXSyntaxErrorr¶†r·jAjʆr¸jX	    
    r¹†rºjiX// First, parse left-hand sider»†r¼jX
    r½†r¾jXXExprr¿†rÀjj¿†rÁjXXlhsr†rÃj©j„†rÄjj¿†rÅjXXExprrƆrÇjj¿†rÈjXXrhsrɆrÊjX
    rˆrÌjÏXanyr͆rÎjj¿†rÏjXj†rÐjX  rцrÒjAjb†rÓjj¿†rÔjXX	parseTermrÕ†rÖj©jP†r×jXXstr؆rÙj©jW†rÚjX
    rÛ†rÜjXifr݆rÞjj¿†rßjXj†ràjj¿†rájXisrâ†rãjj¿†räjXXSyntaxErrorrå†ræjAjʆrçjX	
        rè†réjXreturnrê†rëjj¿†rìjXj†ríjX
    rî†rïjiX//rð†rñjX
    rò†rójXXlhsrô†rõj©j„†röjXXstr÷†røjj¿†rùjAjb†rújj¿†rûjXj†rüjX
    rý†rþjXXstrÿ†rjj¿†rjAjb†rjj¿†rjXXparseWhiteSpacer†rj©jP†rjXXstr†rj©jW†r	jX
    r
†rjiX,// Second, see if there is a right-hand sider†r
jX
    r†rjXifr†rjj¿†rjXXstr†rj©jÆrjXXposr†rjj¿†rjAj`†rjj¿†rjAjÞ†rjXXstr†rj©jÆrjXXinputr†r jAjÞ†r!jj¿†r"jAjg†r#jAjg†r$jj¿†r%jXXstr&†r'j©jÆr(jXXinputr)†r*j©jü†r+jXXstr,†r-j©jÆr.jXXposr/†r0j©jþ†r1jj¿†r2jAjb†r3jAjb†r4jj¿†r5h'X'*'r6†r7jAjʆr8jX	
        r9†r:jiX// add expressionr;†r<jX	
        r=†r>jXXstr?†r@j©jÆrAjXXposrB†rCjj¿†rDjAjb†rEjj¿†rFjXXstrG†rHj©jÆrIjXXposrJ†rKjj¿†rLjAj†rMjj¿†rNjj(†rOjX	
        rP†rQjXj†rRjj¿†rSjAjb†rTjj¿†rUjXXparseMulDivExprrV†rWj©jP†rXjXXstrY†rZj©jW†r[jX   
        r\†r]jXifr^†r_jj¿†r`jAjK†raj©jP†rbjXj†rcjj¿†rdjXisre†rfjj¿†rgjXXSyntaxErrorrh†rij©jW†rjjAjʆrkjX

            rl†rmjXXrhsrn†roj©j„†rpjXXstrq†rrjj¿†rsjAjb†rtjj¿†rujXj†rvjX

            rw†rxjXreturnry†rzjj¿†r{j©j|†r|jXXopr}†r~jAjʆrjj¿†r€jXXMULr†r‚j©j„†rƒjj¿†r„jXXlhsr…†r†jAjʆr‡jj¿†rˆjXXlhsr‰†rŠj©j„†r‹jj¿†rŒjXXrhsr†rŽjAjʆrjj¿†rjXXrhsr‘†r’j©j”†r“j©j„†r”jj¿†r•jXXstr–†r—jX	
        r˜†r™jXelserš†r›jAjʆrœjX

            r†ržjXreturnrŸ†r jj¿†r¡jXj†r¢jX
    r£†r¤jXelser¥†r¦jj¿†r§jXifr¨†r©jj¿†rªjXXstr«†r¬j©jÆr­jXXposr®†r¯jj¿†r°jAj`†r±jj¿†r²jAjÞ†r³jXXstr´†rµj©jÆr¶jXXinputr·†r¸jAjÞ†r¹jj¿†rºjAjg†r»jAjg†r¼jj¿†r½jXXstr¾†r¿j©jÆrÀjXXinputrÁ†rÂj©jü†rÃjXXstrÄ†rÅj©jÆrÆjXXposrÇ†rÈj©jþ†rÉjj¿†rÊjAjb†rËjAjb†rÌjj¿†rÍh'X'/'rÎ†rÏjAjʆrÐjX	
        rÑ†rÒjiX// subtract expressionrÓ†rÔjX	
        rÕ†rÖjXXstr×†rØj©jÆrÙjXXposrÚ†rÛjj¿†rÜjAjb†rÝjj¿†rÞjXXstrß†ràj©jÆrájXXposrâ†rãjj¿†räjAj†råjj¿†ræjj(†rçjX	
        rè†réjXj†rêjj¿†rëjAjb†rìjj¿†ríjXXparseMulDivExprrî†rïj©jP†rðjXXstrñ†ròj©jW†rójX        
        rô†rõjXifrö†r÷jj¿†røjAjK†rùj©jP†rújXj†rûjj¿†rüjXisrý†rþjj¿†rÿjXXSyntaxErrorr
†r
j©jW†r
jAjʆr
jX

            r
†r
jXXrhsr
†r
j©j„†r
jXXstr	
†r

jj¿†r
jAjb†r
jj¿†r

jXj†r
jX

            r
†r
jXreturnr
†r
jj¿†r
j©j|†r
jXXopr
†r
jAjʆr
jj¿†r
jXXDIVr
†r
j©j„†r
jj¿†r
jXXlhsr
†r
jAjʆr
jj¿†r 
jXXlhsr!
†r"
j©j„†r#
jj¿†r$
jXXrhsr%
†r&
jAjʆr'
jj¿†r(
jXXrhsr)
†r*
j©j”†r+
j©j„†r,
jj¿†r-
jXXstr.
†r/
jX	
        r0
†r1
jXelser2
†r3
jAjʆr4
jX

            r5
†r6
jXreturnr7
†r8
jj¿†r9
jXj†r:
jX
    r;
†r<
jiX// No right-hand sider=
†r>
jX
    r?
†r@
jXreturnrA
†rB
jj¿†rC
j©jP†rD
jXXlhsrE
†rF
j©j„†rG
jXXstrH
†rI
j©jW†rJ
jX

rK
†rL
jüXfunctionrM
†rN
jj¿†rO
jXX	parseTermrP
†rQ
j©jP†rR
jXXStaterS
†rT
jj¿†rU
jXXstrV
†rW
j©jW†rX
jj¿†rY
jAj¾†rZ
jAjˠr[
jj¿†r\
j©jP†r]
jXXExprr^
†r_
j©j„†r`
jj¿†ra
jXXStaterb
†rc
j©jW†rd
jAjކre
jXXSyntaxErrorrf
†rg
jAjʆrh
jX
    ri
†rj
jiX//rk
†rl
jX
    rm
†rn
jXXstro
†rp
jj¿†rq
jAjb†rr
jj¿†rs
jXXparseWhiteSpacert
†ru
j©jP†rv
jXXstrw
†rx
j©jW†ry
jX
        
    rz
†r{
jXifr|
†r}
jj¿†r~
jXXstr
†r€
j©jÆr
jXXposr‚
†rƒ
jj¿†r„
jAj`†r…
jj¿†r†
jAjÞ†r‡
jXXstrˆ
†r‰
j©jÆrŠ
jXXinputr‹
†rŒ
jAjÞ†r
jAjʆrŽ
jX	
        r
†r
jXifr‘
†r’
jj¿†r“
jXXASCIIr”
†r•
j©jÆr–
jXXisLetterr—
†r˜
j©jP†r™
jXXstrš
†r›
j©jÆrœ
jXXinputr
†rž
j©jü†rŸ
jXXstr 
†r¡
j©jÆr¢
jXXposr£
†r¤
j©jþ†r¥
j©jW†r¦
jAjʆr§
jX

            r¨
†r©
jXreturnrª
†r«
jj¿†r¬
jXXparseIdentifierr­
†r®
j©jP†r¯
jXXstr°
†r±
j©jW†r²
jX	
        r³
†r´
jXelserµ
†r¶
jj¿†r·
jXifr¸
†r¹
jj¿†rº
jXXASCIIr»
†r¼
j©jÆr½
jXXisDigitr¾
†r¿
j©jP†rÀ
jXXstrÁ
†rÂ
j©jÆrÃ
jXXinputrÄ
†rÅ
j©jü†rÆ
jXXstrÇ
†rÈ
j©jÆrÉ
jXXposrÊ
†rË
j©jþ†rÌ
j©jW†rÍ
jAjʆrÎ
jX

            rÏ
†rÐ
jXreturnrÑ
†rÒ
jj¿†rÓ
jXXparseNumberrÔ
†rÕ
j©jP†rÖ
jXXstr×
†rØ
j©jW†rÙ
jX	
        rÚ
†rÛ
jXelserÜ
†rÝ
jj¿†rÞ
jXifrß
†rà
jj¿†rá
jXXstrâ
†rã
j©jÆrä
jXXinputrå
†ræ
j©jü†rç
jXXstrè
†ré
j©jÆrê
jXXposrë
†rì
j©jþ†rí
jj¿†rî
jAjb†rï
jAjb†rð
jj¿†rñ
h'X'['rò
†ró
jAjʆrô
jX

            rõ
†rö
jXreturnr÷
†rø
jj¿†rù
jXX	parseListrú
†rû
j©jP†rü
jXXstrý
†rþ
j©jW†rÿ
jX
    r†rjiX//r†rjX
    r†rjXreturnr†rjj¿†rjXXSyntaxErrorr	†r
j©jP†rhjn†rhXexpecting number or variabler
†rhjn†rj©j„†rjXXstr†rj©jÆrjXXposr†rj©j„†rjXXstr†rj©jÆrjXXposr†rj©jW†rjX

r†rjüXfunctionr†r jj¿†r!jXXparseIdentifierr"†r#j©jP†r$jXXStater%†r&jj¿†r'jXXstr(†r)j©jW†r*jj¿†r+jAj¾†r,jAjÀ†r-jj¿†r.j©jP†r/jXXVarr0†r1j©j„†r2jj¿†r3jXXStater4†r5j©jW†r6jAjʆr7jX
    r8†r9jiX//r:†r;jX
    r<†r=jXXstringr>†r?jj¿†r@jXXtxtrA†rBjj¿†rCjAjb†rDjj¿†rEhjn†rFhjn†rGjX
    rH†rIjiX/// inch forward until end of identifier reachedrJ†rKjX
    rL†rMjXwhilerN†rOjj¿†rPjXXstrQ†rRj©jÆrSjXXposrT†rUjj¿†rVjAj`†rWjj¿†rXjAjÞ†rYjXXstrZ†r[j©jÆr\jXXinputr]†r^jAjÞ†r_jj¿†r`jAjg†rajAjg†rbjj¿†rcjXXASCIIrd†rej©jÆrfjXXisLetterrg†rhj©jP†rijXXstrj†rkj©jÆrljXXinputrm†rnj©jü†rojXXstrp†rqj©jÆrrjXXposrs†rtj©jþ†ruj©jW†rvjAjʆrwjX	
        rx†ryjXXtxtrz†r{jj¿†r|jAjb†r}jj¿†r~jXXtxtr†r€jj¿†rjAj†r‚jAj†rƒjj¿†r„j©jü†r…jXXstr††r‡j©jÆrˆjXXinputr‰†rŠj©jü†r‹jXXstrŒ†rj©jÆrŽjXXposr†rj©jþ†r‘j©jþ†r’jX	
        r“†r”jXXstr•†r–j©jÆr—jXXposr˜†r™jj¿†ršjAjb†r›jj¿†rœjXXstr†ržj©jÆrŸjXXposr †r¡jj¿†r¢jAj†r£jj¿†r¤jj(†r¥jX
    r¦†r§jXreturnr¨†r©jj¿†rªj©jP†r«j©j|†r¬jXXidr­†r®jAjʆr¯jXXtxtr°†r±j©j”†r²j©j„†r³jj¿†r´jXXstrµ†r¶j©jW†r·jX

r¸†r¹jüXfunctionrº†r»jj¿†r¼jXXparseNumberr½†r¾j©jP†r¿jXXStaterÀ†rÁjj¿†rÂjXXstrÆrÄj©jW†rÅjj¿†rÆjAj¾†rÇjAjÀ†rÈjj¿†rÉj©jP†rÊjXXExprrˆrÌj©j„†rÍjj¿†rÎjXXStaterφrÐj©jW†rÑjAjÞ†rÒjXXSyntaxErrorrÓ†rÔjAjʆrÕjX	    
    rÖ†r×jiX/// inch forward until end of identifier reachedr؆rÙjX
    rÚ†rÛjÏXintr܆rÝjj¿†rÞjXXstartr߆ràjj¿†rájAjb†râjj¿†rãjXXsträ†råj©jÆræjXXposrç†rèjX
    ré†rêjXwhilerë†rìe(jj¿†ríjXXstrî†rïj©jÆrðjXXposrñ†ròjj¿†rójAj`†rôjj¿†rõjAjÞ†röjXXstr÷†røj©jÆrùjXXinputrú†rûjAjÞ†rüjj¿†rýjAjg†rþjAjg†rÿjj¿†rjXXASCIIr†rj©jÆrjXXisDigitr†rj©jP†rjXXstr†rj©jÆr	jXXinputr
†rj©jü†rjXXstr
†rj©jÆrjXXposr†rj©jþ†rj©jW†rjAjʆrjX	
        r†rjXXstr†rj©jÆrjXXposr†rjj¿†rjAjb†rjj¿†rjXXstr†r j©jÆr!jXXposr"†r#jj¿†r$jAj†r%jj¿†r&jj(†r'jX	    
    r(†r)jiX//r*†r+jX
    r,†r-jÏXintr.†r/jAjÞ†r0jæXnullr1†r2jj¿†r3jXXivr4†r5jj¿†r6jAjb†r7jj¿†r8jXXIntr9†r:j©jÆr;jXXparser<†r=j©jP†r>jXXstr?†r@j©jÆrAjXXinputrB†rCj©jü†rDjXXstartrE†rFj©jÆrGj©jÆrHjXXstrI†rJj©jÆrKjXXposrL†rMj©jþ†rNj©jW†rOjX
    rP†rQjXifrR†rSjj¿†rTjXXivrU†rVjj¿†rWjAjb†rXjAjb†rYjj¿†rZjæXnullr[†r\jAjʆr]jX	
        r^†r_jXreturnr`†rajj¿†rbjXXSyntaxErrorrc†rdj©jP†rehjn†rfhXError parsing numberrg†rhhjn†rij©j„†rjjXXstartrk†rlj©j„†rmjXXstrn†roj©jÆrpjXXposrq†rrj©jW†rsjX
    rt†rujXelserv†rwjAjʆrxjX	
        ry†rzjXreturnr{†r|jj¿†r}jXXivr~†rj©j„†r€jj¿†rjXXstr‚†rƒjX

r„†r…jüXfunctionr††r‡jj¿†rˆjXX	parseListr‰†rŠj©jP†r‹jXXStaterŒ†rjj¿†rŽjXXstr†rj©jW†r‘jj¿†r’jAj¾†r“jAjÀ†r”jj¿†r•j©jP†r–jXXExprr—†r˜j©j„†r™jj¿†ršjXXStater›†rœj©jW†rjAjÞ†ržjXXSyntaxErrorrŸ†r jAjʆr¡jX	    
    r¢†r£jiX//r¤†r¥jX
    r¦†r§jXXstr¨†r©j©jÆrªjXXposr«†r¬jj¿†r­jAjb†r®jj¿†r¯jXXstr°†r±j©jÆr²jXXposr³†r´jj¿†rµjAj†r¶jj¿†r·jj(†r¸jj¿†r¹jiX// skip '['rº†r»jX
    r¼†r½jXXstr¾†r¿jj¿†rÀjAjb†rÁjj¿†rÂjXXparseWhiteSpacerÆrÄj©jP†rÅjXXstrƆrÇj©jW†rÈjX
    rɆrÊj©jü†rËjXXExprr̆rÍj©jþ†rÎjj¿†rÏjXXlrІrÑjj¿†rÒjAjb†rÓjj¿†rÔj©jü†rÕj©jþ†rÖjj¿†r×jiX// initial listr؆rÙjX
    rÚ†rÛjÏXboolr܆rÝjj¿†rÞjXX	firstTimer߆ràjj¿†rájAjb†râjj¿†rãjæXtruerä†råjX
    ræ†rçjXwhilerè†réjj¿†rêjXXstrë†rìj©jÆríjXXposrî†rïjj¿†rðjAj`†rñjj¿†ròjAjÞ†rójXXstrô†rõj©jÆröjXXinputr÷†røjAjÞ†rùjj¿†rújAjg†rûjAjg†rüjj¿†rýjXXstrþ†rÿj©jÆrjXXinputr†rj©jü†rjXXstr†rj©jÆrjXXposr†rj©jþ†r	jj¿†r
jAjK†rjAjb†rjj¿†r
h'X']'r†rjAjʆrjX	
        r†rjXifr†rjj¿†rjAjK†rjXX	firstTimer†rjj¿†rjAjg†rjAjg†rjj¿†rjXXstr†rj©jÆrjXXinputr †r!j©jü†r"jXXstr#†r$j©jÆr%jXXposr&†r'j©jþ†r(jj¿†r)jAjK†r*jAjb†r+jj¿†r,h'X','r-†r.jAjʆr/jX

            r0†r1jXreturnr2†r3jj¿†r4jXXSyntaxErrorr5†r6j©jP†r7hjn†r8hXexpecting commar9†r:hjn†r;j©j„†r<jXXstr=†r>j©jÆr?jXXposr@†rAj©j„†rBjXXstrC†rDj©jÆrEjXXposrF†rGj©jW†rHjX	
        rI†rJjXelserK†rLjj¿†rMjXifrN†rOjj¿†rPjAjK†rQjXX	firstTimerR†rSjAjʆrTjX

            rU†rVjXXstrW†rXj©jÆrYjXXposrZ†r[jj¿†r\jAjb†r]jj¿†r^jXXstr_†r`j©jÆrajXXposrb†rcjj¿†rdjAj†rejj¿†rfjj(†rgjj¿†rhjiX// skip ','ri†rjjX	
        rk†rljXX	firstTimerm†rnjj¿†rojAjb†rpjj¿†rqjæXfalserr†rsjX	
        rt†rujÏXanyrv†rwjj¿†rxjXj†ryjj¿†rzjAjb†r{jj¿†r|jXXparseAddSubExprr}†r~j©jP†rjXXstr€†rj©jW†r‚jX	
        rƒ†r„jXifr…†r†jj¿†r‡jXj†rˆjj¿†r‰jXisrІr‹jj¿†rŒjXXSyntaxErrorr†rŽjAjʆrjX

            r†r‘jXreturnr’†r“jj¿†r”jXj†r•jX	
        r–†r—jXelser˜†r™jAjʆršjX

            r›†rœjXXExprr†ržjj¿†rŸjXj³†r jX

            r¡†r¢jXj³†r£j©j„†r¤jXXstr¥†r¦jj¿†r§jAjb†r¨jj¿†r©jXj†rªjX

            r«†r¬jiX#// perform annoying error check    r­†r®jX

            r¯†r°jXjІr±jj¿†r²jAjb†r³jj¿†r´jXjІrµjj¿†r¶jAj†r·jAj†r¸jj¿†r¹j©jü†rºjXj³†r»j©jþ†r¼jX

            r½†r¾jXXstr¿†rÀjj¿†rÁjAjb†rÂjj¿†rÃjXXparseWhiteSpacerĆrÅj©jP†rÆjXXstrdžrÈj©jW†rÉjX
    rʆrËjXXstr̆rÍj©jÆrÎjXXposrφrÐjj¿†rÑjAjb†rÒjj¿†rÓjXXstrÔ†rÕj©jÆrÖjXXposr׆rØjj¿†rÙjAj†rÚjj¿†rÛjj(†rÜjX
    r݆rÞjXreturnr߆ràjj¿†rájXjІrâj©j„†rãjXXsträ†råjX
 
ræ†rçjiX(// Parse all whitespace upto end-of-filerè†réjjʆrêjüXfunctionrë†rìjj¿†ríjXXparseWhiteSpacerî†rïj©jP†rðjXXStaterñ†ròjj¿†rójXXstrô†rõj©jW†röjj¿†r÷jAj¾†røjAjÀ†rùjj¿†rújXXStaterû†rüjAjʆrýjX
    rþ†rÿjXwhiler†rjj¿†rjXXstr†rj©jÆrjXXposr†rjj¿†rjAj`†r	jj¿†r
jAjÞ†rjXXstr†r
j©jÆrjXXinputr†rjAjÞ†rjj¿†rjAjg†rjAjg†rjj¿†rjXXASCIIr†rj©jÆrjXXisWhiteSpacer†rj©jP†rjXXstr†rj©jÆrjXXinputr†r j©jü†r!jXXstr"†r#j©jÆr$jXXposr%†r&j©jþ†r'j©jW†r(jAjʆr)jX	
        r*†r+jXXstr,†r-j©jÆr.jXXposr/†r0jj¿†r1jAjb†r2jj¿†r3jXXstr4†r5j©jÆr6jXXposr7†r8jj¿†r9jAj†r:jj¿†r;jj(†r<jX
    r=†r>jXreturnr?†r@jj¿†rAjXXstrB†rCjX

rD†rEjiX7// ====================================================rF†rGjjʆrHjiX// Main MethodrI†rJjjʆrKjiX7// ====================================================rL†rMjX

rN†rOjüXpublicrP†rQjj¿†rRjüXmethodrS†rTjj¿†rUjXXmainrV†rWj©jP†rXjXXSystemrY†rZj©jÆr[jXXConsoler\†r]jj¿†r^jXXsysr_†r`j©jW†rajAjʆrbjX
    rc†rdjXifre†rfj©jP†rgjAjÞ†rhjXXsysri†rjj©jÆrkjXXargsrl†rmjAjÞ†rnjj¿†rojAjb†rpjAjb†rqjj¿†rrjj†rsj©jW†rtjAjʆrujX	
        rv†rwjXXsysrx†ryj©jÆrzjXXoutr{†r|j©jÆr}jXXprintlnr~†rj©jP†r€hjn†rhXno parameter provided!r‚†rƒhjn†r„j©jW†r…jX
    r††r‡jXelserˆ†r‰jAjʆrŠjX	
        r‹†rŒjXXFiler†rŽj©jÆrjXXReaderr†r‘jj¿†r’jXXfiler“†r”jj¿†r•jAjb†r–jj¿†r—jXXFiler˜†r™j©jÆršjXXReaderr›†rœj©jP†rjXXsysrž†rŸj©jÆr jXXargsr¡†r¢j©jü†r£jj†r¤j©jþ†r¥j©jW†r¦jX	
        r§†r¨jXXstringr©†rªjj¿†r«jXXinputr¬†r­jj¿†r®jAjb†r¯jj¿†r°jXXASCIIr±†r²j©jÆr³jXX	fromBytesr´†rµj©jP†r¶jXXfiler·†r¸j©jÆr¹jXXreadAllrº†r»j©jP†r¼j©jW†r½j©jW†r¾jX
        
        r¿†rÀjXXEnvironmentrÁ†rÂjj¿†rÃjXXenvrĆrÅjj¿†rÆjAjb†rÇjj¿†rÈjXXEnvironmentrɆrÊj©jP†rËj©jW†rÌjX	
        r͆rÎjXXStaterφrÐjj¿†rÑjXXstrÒ†rÓjj¿†rÔjAjb†rÕjj¿†rÖj©j|†r×jXXposr؆rÙjAjʆrÚjj¿†rÛjj†rÜj©j„†rÝjj¿†rÞjXXinputr߆ràjAjʆrájj¿†râjXXinputrã†räj©j”†råjX	
        ræ†rçjXwhilerè†réjj¿†rêjXXstrë†rìj©jÆríjXXposrî†rïjj¿†rðjAj`†rñjj¿†ròjAjÞ†rójXXstrô†rõj©jÆröjXXinputr÷†røjAjÞ†rùjAjʆrújX

            rû†rüjXXStmtrý†rþjj¿†rÿjXXsr†rjX

            r†rjÏXanyr†rjj¿†rjXj†rjj¿†rjAjb†r	jj¿†r
jXXparser†rj©jP†r
jXXstr†rj©jW†rjX

            r†rjXifr†rjj¿†rjXj†rjj¿†rjXisr†rjj¿†rjXXSyntaxErrorr†rjAjʆrjX
                r†rjXXsysr †r!j©jÆr"jXXoutr#†r$j©jÆr%jXXprintlnr&†r'j©jP†r(hjn†r)hXsyntax error: r*†r+hjn†r,jj¿†r-jAj†r.jAj†r/jj¿†r0jXj†r1j©jÆr2jXXmsgr3†r4j©jW†r5jX  
                r6†r7jXreturnr8†r9jX

            r:†r;jXj†r<j©j„†r=jXXstr>†r?jj¿†r@jAjb†rAjj¿†rBjXj†rCjX

            rD†rEjXXValuerF†rGjAjÞ†rHjXXRuntimeErrorrI†rJjj¿†rKjXj›†rLjj¿†rMjAjb†rNjj¿†rOjXXevaluaterP†rQj©jP†rRjXj†rSj©jÆrTjXXrhsrU†rVj©j„†rWjXXenvrX†rYj©jW†rZjX

            r[†r\jXifr]†r^jj¿†r_jXj›†r`jj¿†rajXisrb†rcjj¿†rdjXXRuntimeErrorre†rfjAjʆrgjX
                rh†rijXXsysrj†rkj©jÆrljXXoutrm†rnj©jÆrojXXprintlnrp†rqj©jP†rrhjn†rshXruntime error: rt†ruhjn†rvjj¿†rwjAj†rxjAj†ryjj¿†rzjXj›†r{j©jÆr|jXXmsgr}†r~j©jW†rjX 
                r€†rjXreturnr‚†rƒjX

            r„†r…jXifr††r‡jj¿†rˆjXj†r‰jj¿†rŠjXisr‹†rŒjj¿†rjXXSetrކrjAjʆrjX
                r‘†r’jXXenvr“†r”j©jü†r•jXj†r–j©jÆr—jXXlhsr˜†r™j©jþ†ršjj¿†r›jAjb†rœjj¿†rjXj›†ržjX

            rŸ†r jXelser¡†r¢jAjʆr£jX
                r¤†r¥jXXsysr¦†r§j©jÆr¨jXXoutr©†rªj©jÆr«jXXprintlnr¬†r­j©jP†r®jXj†r¯j©jW†r°jX

            r±†r²jXXstr³†r´jj¿†rµjAjb†r¶jj¿†r·jXXparseWhiteSpacer¸†r¹j©jP†rºjXXstr»†r¼j©jW†r½jX
            
r¾†r¿e.