PNG  IHDRX cHRMz&u0`:pQ<bKGD pHYsodtIME MeqIDATxw]Wug^Qd˶ 6`!N:!@xI~)%7%@Bh&`lnjVF29gΨ4E$|>cɚ{gk= %,a KX%,a KX%,a KX%,a KX%,a KX%,a KX%, b` ǟzeאfp]<!SJmɤY޲ڿ,%c ~ع9VH.!Ͳz&QynֺTkRR.BLHi٪:l;@(!MԴ=žI,:o&N'Kù\vRmJ雵֫AWic H@" !: Cé||]k-Ha oݜ:y F())u]aG7*JV@J415p=sZH!=!DRʯvɱh~V\}v/GKY$n]"X"}t@ xS76^[bw4dsce)2dU0 CkMa-U5tvLƀ~mlMwfGE/-]7XAƟ`׮g ewxwC4\[~7@O-Q( a*XGƒ{ ՟}$_y3tĐƤatgvێi|K=uVyrŲlLӪuܿzwk$m87k( `múcE)"@rK( z4$D; 2kW=Xb$V[Ru819קR~qloѱDyįݎ*mxw]y5e4K@ЃI0A D@"BDk_)N\8͜9dz"fK0zɿvM /.:2O{ Nb=M=7>??Zuo32 DLD@D| &+֎C #B8ַ`bOb $D#ͮҪtx]%`ES`Ru[=¾!@Od37LJ0!OIR4m]GZRJu$‡c=%~s@6SKy?CeIh:[vR@Lh | (BhAMy=݃  G"'wzn޺~8ԽSh ~T*A:xR[ܹ?X[uKL_=fDȊ؂p0}7=D$Ekq!/t.*2ʼnDbŞ}DijYaȲ(""6HA;:LzxQ‘(SQQ}*PL*fc\s `/d'QXW, e`#kPGZuŞuO{{wm[&NBTiiI0bukcA9<4@SӊH*؎4U/'2U5.(9JuDfrޱtycU%j(:RUbArLֺN)udA':uGQN"-"Is.*+k@ `Ojs@yU/ H:l;@yyTn}_yw!VkRJ4P)~y#)r,D =ě"Q]ci'%HI4ZL0"MJy 8A{ aN<8D"1#IJi >XjX֔#@>-{vN!8tRݻ^)N_╗FJEk]CT՟ YP:_|H1@ CBk]yKYp|og?*dGvzنzӴzjֺNkC~AbZƷ`.H)=!QͷVTT(| u78y֮}|[8-Vjp%2JPk[}ԉaH8Wpqhwr:vWª<}l77_~{s۴V+RCģ%WRZ\AqHifɤL36: #F:p]Bq/z{0CU6ݳEv_^k7'>sq*+kH%a`0ԣisqにtү04gVgW΂iJiS'3w.w}l6MC2uԯ|>JF5`fV5m`Y**Db1FKNttu]4ccsQNnex/87+}xaUW9y>ͯ骵G{䩓Գ3+vU}~jJ.NFRD7<aJDB1#ҳgSb,+CS?/ VG J?|?,2#M9}B)MiE+G`-wo߫V`fio(}S^4e~V4bHOYb"b#E)dda:'?}׮4繏`{7Z"uny-?ǹ;0MKx{:_pÚmFמ:F " .LFQLG)Q8qN q¯¯3wOvxDb\. BKD9_NN &L:4D{mm o^tֽ:q!ƥ}K+<"m78N< ywsard5+вz~mnG)=}lYݧNj'QJS{S :UYS-952?&O-:W}(!6Mk4+>A>j+i|<<|;ر^߉=HE|V#F)Emm#}/"y GII웻Jі94+v뾧xu~5C95~ūH>c@덉pʃ1/4-A2G%7>m;–Y,cyyaln" ?ƻ!ʪ<{~h~i y.zZB̃/,雋SiC/JFMmBH&&FAbϓO^tubbb_hZ{_QZ-sύodFgO(6]TJA˯#`۶ɟ( %$&+V'~hiYy>922 Wp74Zkq+Ovn錄c>8~GqܲcWꂎz@"1A.}T)uiW4="jJ2W7mU/N0gcqܗOO}?9/wìXžΏ0 >֩(V^Rh32!Hj5`;O28؇2#ݕf3 ?sJd8NJ@7O0 b־?lldщ̡&|9C.8RTWwxWy46ah嘦mh٤&l zCy!PY?: CJyв]dm4ǜҐR޻RլhX{FƯanшQI@x' ao(kUUuxW_Ñ줮[w8 FRJ(8˼)_mQ _!RJhm=!cVmm ?sFOnll6Qk}alY}; "baӌ~M0w,Ggw2W:G/k2%R,_=u`WU R.9T"v,<\Ik޽/2110Ӿxc0gyC&Ny޽JҢrV6N ``یeA16"J³+Rj*;BϜkZPJaÍ<Jyw:NP8/D$ 011z֊Ⱳ3ι֘k1V_"h!JPIΣ'ɜ* aEAd:ݺ>y<}Lp&PlRfTb1]o .2EW\ͮ]38؋rTJsǏP@芎sF\> P^+dYJLbJ C-xϐn> ι$nj,;Ǖa FU *择|h ~izť3ᤓ`K'-f tL7JK+vf2)V'-sFuB4i+m+@My=O҈0"|Yxoj,3]:cо3 $#uŘ%Y"y죯LebqtҢVzq¼X)~>4L׶m~[1_k?kxֺQ`\ |ٛY4Ѯr!)N9{56(iNq}O()Em]=F&u?$HypWUeB\k]JɩSع9 Zqg4ZĊo oMcjZBU]B\TUd34ݝ~:7ڶSUsB0Z3srx 7`:5xcx !qZA!;%͚7&P H<WL!džOb5kF)xor^aujƍ7 Ǡ8/p^(L>ὴ-B,{ۇWzֺ^k]3\EE@7>lYBȝR.oHnXO/}sB|.i@ɥDB4tcm,@ӣgdtJ!lH$_vN166L__'Z)y&kH;:,Y7=J 9cG) V\hjiE;gya~%ks_nC~Er er)muuMg2;֫R)Md) ,¶ 2-wr#F7<-BBn~_(o=KO㭇[Xv eN_SMgSҐ BS헃D%g_N:/pe -wkG*9yYSZS.9cREL !k}<4_Xs#FmҶ:7R$i,fi!~' # !6/S6y@kZkZcX)%5V4P]VGYq%H1!;e1MV<!ϐHO021Dp= HMs~~a)ަu7G^];git!Frl]H/L$=AeUvZE4P\.,xi {-~p?2b#amXAHq)MWǾI_r`S Hz&|{ +ʖ_= (YS(_g0a03M`I&'9vl?MM+m~}*xT۲(fY*V4x@29s{DaY"toGNTO+xCAO~4Ϳ;p`Ѫ:>Ҵ7K 3}+0 387x\)a"/E>qpWB=1 ¨"MP(\xp߫́A3+J] n[ʼnӼaTbZUWb={~2ooKױӰp(CS\S筐R*JغV&&"FA}J>G֐p1ٸbk7 ŘH$JoN <8s^yk_[;gy-;߉DV{c B yce% aJhDȶ 2IdйIB/^n0tNtџdcKj4϶v~- CBcgqx9= PJ) dMsjpYB] GD4RDWX +h{y`,3ꊕ$`zj*N^TP4L:Iz9~6s) Ga:?y*J~?OrMwP\](21sZUD ?ܟQ5Q%ggW6QdO+\@ ̪X'GxN @'4=ˋ+*VwN ne_|(/BDfj5(Dq<*tNt1х!MV.C0 32b#?n0pzj#!38}޴o1KovCJ`8ŗ_"]] rDUy޲@ Ȗ-;xџ'^Y`zEd?0„ DAL18IS]VGq\4o !swV7ˣι%4FѮ~}6)OgS[~Q vcYbL!wG3 7띸*E Pql8=jT\꘿I(z<[6OrR8ºC~ډ]=rNl[g|v TMTղb-o}OrP^Q]<98S¤!k)G(Vkwyqyr޽Nv`N/e p/~NAOk \I:G6]4+K;j$R:Mi #*[AȚT,ʰ,;N{HZTGMoּy) ]%dHء9Պ䠬|<45,\=[bƟ8QXeB3- &dҩ^{>/86bXmZ]]yޚN[(WAHL$YAgDKp=5GHjU&99v簪C0vygln*P)9^͞}lMuiH!̍#DoRBn9l@ xA/_v=ȺT{7Yt2N"4!YN`ae >Q<XMydEB`VU}u]嫇.%e^ánE87Mu\t`cP=AD/G)sI"@MP;)]%fH9'FNsj1pVhY&9=0pfuJ&gޤx+k:!r˭wkl03׼Ku C &ѓYt{.O.zҏ z}/tf_wEp2gvX)GN#I ݭ߽v/ .& и(ZF{e"=V!{zW`, ]+LGz"(UJp|j( #V4, 8B 0 9OkRrlɱl94)'VH9=9W|>PS['G(*I1==C<5"Pg+x'K5EMd؞Af8lG ?D FtoB[je?{k3zQ vZ;%Ɠ,]E>KZ+T/ EJxOZ1i #T<@ I}q9/t'zi(EMqw`mYkU6;[t4DPeckeM;H}_g pMww}k6#H㶏+b8雡Sxp)&C $@'b,fPߑt$RbJ'vznuS ~8='72_`{q纶|Q)Xk}cPz9p7O:'|G~8wx(a 0QCko|0ASD>Ip=4Q, d|F8RcU"/KM opKle M3#i0c%<7׿p&pZq[TR"BpqauIp$ 8~Ĩ!8Սx\ւdT>>Z40ks7 z2IQ}ItԀ<-%S⍤};zIb$I 5K}Q͙D8UguWE$Jh )cu4N tZl+[]M4k8֦Zeq֮M7uIqG 1==tLtR,ƜSrHYt&QP윯Lg' I,3@P'}'R˪e/%-Auv·ñ\> vDJzlӾNv5:|K/Jb6KI9)Zh*ZAi`?S {aiVDԲuy5W7pWeQJk֤#5&V<̺@/GH?^τZL|IJNvI:'P=Ϛt"¨=cud S Q.Ki0 !cJy;LJR;G{BJy޺[^8fK6)=yʊ+(k|&xQ2`L?Ȓ2@Mf 0C`6-%pKpm')c$׻K5[J*U[/#hH!6acB JA _|uMvDyk y)6OPYjœ50VT K}cǻP[ $:]4MEA.y)|B)cf-A?(e|lɉ#P9V)[9t.EiQPDѠ3ϴ;E:+Օ t ȥ~|_N2,ZJLt4! %ա]u {+=p.GhNcŞQI?Nd'yeh n7zi1DB)1S | S#ًZs2|Ɛy$F SxeX{7Vl.Src3E℃Q>b6G ўYCmtկ~=K0f(=LrAS GN'ɹ9<\!a`)֕y[uՍ[09` 9 +57ts6}b4{oqd+J5fa/,97J#6yν99mRWxJyѡyu_TJc`~W>l^q#Ts#2"nD1%fS)FU w{ܯ R{ ˎ󅃏џDsZSQS;LV;7 Od1&1n$ N /.q3~eNɪ]E#oM~}v֯FڦwyZ=<<>Xo稯lfMFV6p02|*=tV!c~]fa5Y^Q_WN|Vs 0ҘދU97OI'N2'8N֭fgg-}V%y]U4 峧p*91#9U kCac_AFңĪy뚇Y_AiuYyTTYЗ-(!JFLt›17uTozc. S;7A&&<ԋ5y;Ro+:' *eYJkWR[@F %SHWP 72k4 qLd'J "zB6{AC0ƁA6U.'F3:Ȅ(9ΜL;D]m8ڥ9}dU "v!;*13Rg^fJyShyy5auA?ɩGHRjo^]׽S)Fm\toy 4WQS@mE#%5ʈfFYDX ~D5Ϡ9tE9So_aU4?Ѽm%&c{n>.KW1Tlb}:j uGi(JgcYj0qn+>) %\!4{LaJso d||u//P_y7iRJ߬nHOy) l+@$($VFIQ9%EeKʈU. ia&FY̒mZ=)+qqoQn >L!qCiDB;Y<%} OgBxB!ØuG)WG9y(Ą{_yesuZmZZey'Wg#C~1Cev@0D $a@˲(.._GimA:uyw֬%;@!JkQVM_Ow:P.s\)ot- ˹"`B,e CRtaEUP<0'}r3[>?G8xU~Nqu;Wm8\RIkբ^5@k+5(By'L&'gBJ3ݶ!/㮻w҅ yqPWUg<e"Qy*167΃sJ\oz]T*UQ<\FԎ`HaNmڜ6DysCask8wP8y9``GJ9lF\G g's Nn͵MLN֪u$| /|7=]O)6s !ĴAKh]q_ap $HH'\1jB^s\|- W1:=6lJBqjY^LsPk""`]w)󭃈,(HC ?䔨Y$Sʣ{4Z+0NvQkhol6C.婧/u]FwiVjZka&%6\F*Ny#8O,22+|Db~d ~Çwc N:FuuCe&oZ(l;@ee-+Wn`44AMK➝2BRՈt7g*1gph9N) *"TF*R(#'88pm=}X]u[i7bEc|\~EMn}P瘊J)K.0i1M6=7'_\kaZ(Th{K*GJyytw"IO-PWJk)..axӝ47"89Cc7ĐBiZx 7m!fy|ϿF9CbȩV 9V-՛^pV̌ɄS#Bv4-@]Vxt-Z, &ֺ*diؠ2^VXbs֔Ìl.jQ]Y[47gj=幽ex)A0ip׳ W2[ᎇhuE^~q흙L} #-b۸oFJ_QP3r6jr+"nfzRJTUqoaۍ /$d8Mx'ݓ= OՃ| )$2mcM*cЙj}f };n YG w0Ia!1Q.oYfr]DyISaP}"dIӗթO67jqR ҊƐƈaɤGG|h;t]䗖oSv|iZqX)oalv;۩meEJ\!8=$4QU4Xo&VEĊ YS^E#d,yX_> ۘ-e\ "Wa6uLĜZi`aD9.% w~mB(02G[6y.773a7 /=o7D)$Z 66 $bY^\CuP. (x'"J60׿Y:Oi;F{w佩b+\Yi`TDWa~|VH)8q/=9!g߆2Y)?ND)%?Ǐ`k/sn:;O299yB=a[Ng 3˲N}vLNy;*?x?~L&=xyӴ~}q{qE*IQ^^ͧvü{Huu=R|>JyUlZV, B~/YF!Y\u_ݼF{_C)LD]m {H 0ihhadd nUkf3oٺCvE\)QJi+֥@tDJkB$1!Đr0XQ|q?d2) Ӣ_}qv-< FŊ߫%roppVBwü~JidY4:}L6M7f٬F "?71<2#?Jyy4뷢<_a7_=Q E=S1И/9{+93֮E{ǂw{))?maÆm(uLE#lïZ  ~d];+]h j?!|$F}*"4(v'8s<ŏUkm7^7no1w2ؗ}TrͿEk>p'8OB7d7R(A 9.*Mi^ͳ; eeUwS+C)uO@ =Sy]` }l8^ZzRXj[^iUɺ$tj))<sbDJfg=Pk_{xaKo1:-uyG0M ԃ\0Lvuy'ȱc2Ji AdyVgVh!{]/&}}ċJ#%d !+87<;qN޼Nفl|1N:8ya  8}k¾+-$4FiZYÔXk*I&'@iI99)HSh4+2G:tGhS^繿 Kتm0 вDk}֚+QT4;sC}rՅE,8CX-e~>G&'9xpW,%Fh,Ry56Y–hW-(v_,? ; qrBk4-V7HQ;ˇ^Gv1JVV%,ik;D_W!))+BoS4QsTM;gt+ndS-~:11Sgv!0qRVh!"Ȋ(̦Yl.]PQWgٳE'`%W1{ndΗBk|Ž7ʒR~,lnoa&:ü$ 3<a[CBݮwt"o\ePJ=Hz"_c^Z.#ˆ*x z̝grY]tdkP*:97YľXyBkD4N.C_[;F9`8& !AMO c `@BA& Ost\-\NX+Xp < !bj3C&QL+*&kAQ=04}cC!9~820G'PC9xa!w&bo_1 Sw"ܱ V )Yl3+ס2KoXOx]"`^WOy :3GO0g;%Yv㐫(R/r (s } u B &FeYZh0y> =2<Ϟc/ -u= c&׭,.0"g"7 6T!vl#sc>{u/Oh Bᾈ)۴74]x7 gMӒ"d]U)}" v4co[ ɡs 5Gg=XR14?5A}D "b{0$L .\4y{_fe:kVS\\O]c^W52LSBDM! C3Dhr̦RtArx4&agaN3Cf<Ԉp4~ B'"1@.b_/xQ} _߃҉/gٓ2Qkqp0շpZ2fԫYz< 4L.Cyυι1t@鎫Fe sYfsF}^ V}N<_`p)alٶ "(XEAVZ<)2},:Ir*#m_YӼ R%a||EƼIJ,,+f"96r/}0jE/)s)cjW#w'Sʯ5<66lj$a~3Kʛy 2:cZ:Yh))+a߭K::N,Q F'qB]={.]h85C9cr=}*rk?vwV렵ٸW Rs%}rNAkDv|uFLBkWY YkX מ|)1!$#3%y?pF<@<Rr0}: }\J [5FRxY<9"SQdE(Q*Qʻ)q1E0B_O24[U'],lOb ]~WjHޏTQ5Syu wq)xnw8~)c 쫬gٲߠ H% k5dƝk> kEj,0% b"vi2Wس_CuK)K{n|>t{P1򨾜j>'kEkƗBg*H%'_aY6Bn!TL&ɌOb{c`'d^{t\i^[uɐ[}q0lM˕G:‚4kb祔c^:?bpg… +37stH:0}en6x˟%/<]BL&* 5&fK9Mq)/iyqtA%kUe[ڛKN]Ě^,"`/ s[EQQm?|XJ߅92m]G.E΃ח U*Cn.j_)Tѧj̿30ڇ!A0=͜ar I3$C^-9#|pk!)?7.x9 @OO;WƝZBFU keZ75F6Tc6"ZȚs2y/1 ʵ:u4xa`C>6Rb/Yм)^=+~uRd`/|_8xbB0?Ft||Z\##|K 0>>zxv8۴吅q 8ĥ)"6>~\8:qM}#͚'ĉ#p\׶ l#bA?)|g g9|8jP(cr,BwV (WliVxxᡁ@0Okn;ɥh$_ckCgriv}>=wGzβ KkBɛ[˪ !J)h&k2%07δt}!d<9;I&0wV/ v 0<H}L&8ob%Hi|޶o&h1L|u֦y~󛱢8fٲUsւ)0oiFx2}X[zVYr_;N(w]_4B@OanC?gĦx>мgx>ΛToZoOMp>40>V Oy V9iq!4 LN,ˢu{jsz]|"R޻&'ƚ{53ўFu(<٪9:΋]B;)B>1::8;~)Yt|0(pw2N%&X,URBK)3\zz&}ax4;ǟ(tLNg{N|Ǽ\G#C9g$^\}p?556]/RP.90 k,U8/u776s ʪ_01چ|\N 0VV*3H鴃J7iI!wG_^ypl}r*jɤSR 5QN@ iZ#1ٰy;_\3\BQQ x:WJv츟ٯ$"@6 S#qe딇(/P( Dy~TOϻ<4:-+F`0||;Xl-"uw$Цi󼕝mKʩorz"mϺ$F:~E'ҐvD\y?Rr8_He@ e~O,T.(ފR*cY^m|cVR[8 JҡSm!ΆԨb)RHG{?MpqrmN>߶Y)\p,d#xۆWY*,l6]v0h15M˙MS8+EdI='LBJIH7_9{Caз*Lq,dt >+~ّeʏ?xԕ4bBAŚjﵫ!'\Ը$WNvKO}ӽmSşذqsOy?\[,d@'73'j%kOe`1.g2"e =YIzS2|zŐƄa\U,dP;jhhhaxǶ?КZ՚.q SE+XrbOu%\GتX(H,N^~]JyEZQKceTQ]VGYqnah;y$cQahT&QPZ*iZ8UQQM.qo/T\7X"u?Mttl2Xq(IoW{R^ ux*SYJ! 4S.Jy~ BROS[V|žKNɛP(L6V^|cR7i7nZW1Fd@ Ara{詑|(T*dN]Ko?s=@ |_EvF]׍kR)eBJc" MUUbY6`~V޴dJKß&~'d3i WWWWWW
Current Directory: /opt/gsutil/third_party/pyparsing/examples
Viewing File: /opt/gsutil/third_party/pyparsing/examples/javascript_grammar.g
/* Copyright 2008 Chris Lambrou. All rights reserved. */ grammar JavaScript; options { output=AST; backtrack=true; memoize=true; } program : LT!* sourceElements LT!* EOF! ; sourceElements : sourceElement (LT!* sourceElement)* ; sourceElement : functionDeclaration | statement ; // functions functionDeclaration : 'function' LT!* Identifier LT!* formalParameterList LT!* functionBody ; functionExpression : 'function' LT!* Identifier? LT!* formalParameterList LT!* functionBody ; formalParameterList : '(' (LT!* Identifier (LT!* ',' LT!* Identifier)*)? LT!* ')' ; functionBody : '{' LT!* sourceElements LT!* '}' ; // statements statement : statementBlock | variableStatement | emptyStatement | expressionStatement | ifStatement | iterationStatement | continueStatement | breakStatement | returnStatement | withStatement | labelledStatement | switchStatement | throwStatement | tryStatement ; statementBlock : '{' LT!* statementList? LT!* '}' ; statementList : statement (LT!* statement)* ; variableStatement : 'var' LT!* variableDeclarationList (LT | ';')! ; variableDeclarationList : variableDeclaration (LT!* ',' LT!* variableDeclaration)* ; variableDeclarationListNoIn : variableDeclarationNoIn (LT!* ',' LT!* variableDeclarationNoIn)* ; variableDeclaration : Identifier LT!* initialiser? ; variableDeclarationNoIn : Identifier LT!* initialiserNoIn? ; initialiser : '=' LT!* assignmentExpression ; initialiserNoIn : '=' LT!* assignmentExpressionNoIn ; emptyStatement : ';' ; expressionStatement : expression (LT | ';')! ; ifStatement : 'if' LT!* '(' LT!* expression LT!* ')' LT!* statement (LT!* 'else' LT!* statement)? ; iterationStatement : doWhileStatement | whileStatement | forStatement | forInStatement ; doWhileStatement : 'do' LT!* statement LT!* 'while' LT!* '(' expression ')' (LT | ';')! ; whileStatement : 'while' LT!* '(' LT!* expression LT!* ')' LT!* statement ; forStatement : 'for' LT!* '(' (LT!* forStatementInitialiserPart)? LT!* ';' (LT!* expression)? LT!* ';' (LT!* expression)? LT!* ')' LT!* statement ; forStatementInitialiserPart : expressionNoIn | 'var' LT!* variableDeclarationListNoIn ; forInStatement : 'for' LT!* '(' LT!* forInStatementInitialiserPart LT!* 'in' LT!* expression LT!* ')' LT!* statement ; forInStatementInitialiserPart : leftHandSideExpression | 'var' LT!* variableDeclarationNoIn ; continueStatement : 'continue' Identifier? (LT | ';')! ; breakStatement : 'break' Identifier? (LT | ';')! ; returnStatement : 'return' expression? (LT | ';')! ; withStatement : 'with' LT!* '(' LT!* expression LT!* ')' LT!* statement ; labelledStatement : Identifier LT!* ':' LT!* statement ; switchStatement : 'switch' LT!* '(' LT!* expression LT!* ')' LT!* caseBlock ; caseBlock : '{' (LT!* caseClause)* (LT!* defaultClause (LT!* caseClause)*)? LT!* '}' ; caseClause : 'case' LT!* expression LT!* ':' LT!* statementList? ; defaultClause : 'default' LT!* ':' LT!* statementList? ; throwStatement : 'throw' expression (LT | ';')! ; tryStatement : 'try' LT!* statementBlock LT!* (finallyClause | catchClause (LT!* finallyClause)?) ; catchClause : 'catch' LT!* '(' LT!* Identifier LT!* ')' LT!* statementBlock ; finallyClause : 'finally' LT!* statementBlock ; // expressions expression : assignmentExpression (LT!* ',' LT!* assignmentExpression)* ; expressionNoIn : assignmentExpressionNoIn (LT!* ',' LT!* assignmentExpressionNoIn)* ; assignmentExpression : conditionalExpression | leftHandSideExpression LT!* assignmentOperator LT!* assignmentExpression ; assignmentExpressionNoIn : conditionalExpressionNoIn | leftHandSideExpression LT!* assignmentOperator LT!* assignmentExpressionNoIn ; leftHandSideExpression : callExpression | newExpression ; newExpression : memberExpression | 'new' LT!* newExpression ; memberExpression : (primaryExpression | functionExpression | 'new' LT!* memberExpression LT!* arguments) (LT!* memberExpressionSuffix)* ; memberExpressionSuffix : indexSuffix | propertyReferenceSuffix ; callExpression : memberExpression LT!* arguments (LT!* callExpressionSuffix)* ; callExpressionSuffix : arguments | indexSuffix | propertyReferenceSuffix ; arguments : '(' (LT!* assignmentExpression (LT!* ',' LT!* assignmentExpression)*)? LT!* ')' ; indexSuffix : '[' LT!* expression LT!* ']' ; propertyReferenceSuffix : '.' LT!* Identifier ; assignmentOperator : '=' | '*=' | '/=' | '%=' | '+=' | '-=' | '<<=' | '>>=' | '>>>=' | '&=' | '^=' | '|=' ; conditionalExpression : logicalORExpression (LT!* '?' LT!* assignmentExpression LT!* ':' LT!* assignmentExpression)? ; conditionalExpressionNoIn : logicalORExpressionNoIn (LT!* '?' LT!* assignmentExpressionNoIn LT!* ':' LT!* assignmentExpressionNoIn)? ; logicalORExpression : logicalANDExpression (LT!* '||' LT!* logicalANDExpression)* ; logicalORExpressionNoIn : logicalANDExpressionNoIn (LT!* '||' LT!* logicalANDExpressionNoIn)* ; logicalANDExpression : bitwiseORExpression (LT!* '&&' LT!* bitwiseORExpression)* ; logicalANDExpressionNoIn : bitwiseORExpressionNoIn (LT!* '&&' LT!* bitwiseORExpressionNoIn)* ; bitwiseORExpression : bitwiseXORExpression (LT!* '|' LT!* bitwiseXORExpression)* ; bitwiseORExpressionNoIn : bitwiseXORExpressionNoIn (LT!* '|' LT!* bitwiseXORExpressionNoIn)* ; bitwiseXORExpression : bitwiseANDExpression (LT!* '^' LT!* bitwiseANDExpression)* ; bitwiseXORExpressionNoIn : bitwiseANDExpressionNoIn (LT!* '^' LT!* bitwiseANDExpressionNoIn)* ; bitwiseANDExpression : equalityExpression (LT!* '&' LT!* equalityExpression)* ; bitwiseANDExpressionNoIn : equalityExpressionNoIn (LT!* '&' LT!* equalityExpressionNoIn)* ; equalityExpression : relationalExpression (LT!* ('==' | '!=' | '===' | '!==') LT!* relationalExpression)* ; equalityExpressionNoIn : relationalExpressionNoIn (LT!* ('==' | '!=' | '===' | '!==') LT!* relationalExpressionNoIn)* ; relationalExpression : shiftExpression (LT!* ('<' | '>' | '<=' | '>=' | 'instanceof' | 'in') LT!* shiftExpression)* ; relationalExpressionNoIn : shiftExpression (LT!* ('<' | '>' | '<=' | '>=' | 'instanceof') LT!* shiftExpression)* ; shiftExpression : additiveExpression (LT!* ('<<' | '>>' | '>>>') LT!* additiveExpression)* ; additiveExpression : multiplicativeExpression (LT!* ('+' | '-') LT!* multiplicativeExpression)* ; multiplicativeExpression : unaryExpression (LT!* ('*' | '/' | '%') LT!* unaryExpression)* ; unaryExpression : postfixExpression | ('delete' | 'void' | 'typeof' | '++' | '--' | '+' | '-' | '~' | '!') unaryExpression ; postfixExpression : leftHandSideExpression ('++' | '--')? ; primaryExpression : 'this' | Identifier | literal | arrayLiteral | objectLiteral | '(' LT!* expression LT!* ')' ; // arrayLiteral definition. arrayLiteral : '[' LT!* assignmentExpression? (LT!* ',' (LT!* assignmentExpression)?)* LT!* ']' ; // objectLiteral definition. objectLiteral : '{' LT!* propertyNameAndValue (LT!* ',' LT!* propertyNameAndValue)* LT!* '}' ; propertyNameAndValue : propertyName LT!* ':' LT!* assignmentExpression ; propertyName : Identifier | StringLiteral | NumericLiteral ; // primitive literal definition. literal : 'null' | 'true' | 'false' | StringLiteral | NumericLiteral ; // lexer rules. StringLiteral : '"' DoubleStringCharacter* '"' | '\'' SingleStringCharacter* '\'' ; fragment DoubleStringCharacter : ~('"' | '\\' | LT) | '\\' EscapeSequence ; fragment SingleStringCharacter : ~('\'' | '\\' | LT) | '\\' EscapeSequence ; fragment EscapeSequence : CharacterEscapeSequence | '0' | HexEscapeSequence | UnicodeEscapeSequence ; fragment CharacterEscapeSequence : SingleEscapeCharacter | NonEscapeCharacter ; fragment NonEscapeCharacter : ~(EscapeCharacter | LT) ; fragment SingleEscapeCharacter : '\'' | '"' | '\\' | 'b' | 'f' | 'n' | 'r' | 't' | 'v' ; fragment EscapeCharacter : SingleEscapeCharacter | DecimalDigit | 'x' | 'u' ; fragment HexEscapeSequence : 'x' HexDigit HexDigit ; fragment UnicodeEscapeSequence : 'u' HexDigit HexDigit HexDigit HexDigit ; NumericLiteral : DecimalLiteral | HexIntegerLiteral ; fragment HexIntegerLiteral : '0' ('x' | 'X') HexDigit+ ; fragment HexDigit : DecimalDigit | ('a'..'f') | ('A'..'F') ; fragment DecimalLiteral : DecimalDigit+ '.' DecimalDigit* ExponentPart? | '.'? DecimalDigit+ ExponentPart? ; fragment DecimalDigit : ('0'..'9') ; fragment ExponentPart : ('e' | 'E') ('+' | '-') ? DecimalDigit+ ; Identifier : IdentifierStart IdentifierPart* ; fragment IdentifierStart : UnicodeLetter | '$' | '_' | '\\' UnicodeEscapeSequence ; fragment IdentifierPart : (IdentifierStart) => IdentifierStart // Avoids ambiguity, as some IdentifierStart chars also match following alternatives. | UnicodeDigit | UnicodeConnectorPunctuation ; fragment UnicodeLetter // Any character in the Unicode categories "Uppercase letter (Lu)", : '\u0041'..'\u005A' // "Lowercase letter (Ll)", "Titlecase letter (Lt)", | '\u0061'..'\u007A' // "Modifier letter (Lm)", "Other letter (Lo)", or "Letter number (Nl)". | '\u00AA' | '\u00B5' | '\u00BA' | '\u00C0'..'\u00D6' | '\u00D8'..'\u00F6' | '\u00F8'..'\u021F' | '\u0222'..'\u0233' | '\u0250'..'\u02AD' | '\u02B0'..'\u02B8' | '\u02BB'..'\u02C1' | '\u02D0'..'\u02D1' | '\u02E0'..'\u02E4' | '\u02EE' | '\u037A' | '\u0386' | '\u0388'..'\u038A' | '\u038C' | '\u038E'..'\u03A1' | '\u03A3'..'\u03CE' | '\u03D0'..'\u03D7' | '\u03DA'..'\u03F3' | '\u0400'..'\u0481' | '\u048C'..'\u04C4' | '\u04C7'..'\u04C8' | '\u04CB'..'\u04CC' | '\u04D0'..'\u04F5' | '\u04F8'..'\u04F9' | '\u0531'..'\u0556' | '\u0559' | '\u0561'..'\u0587' | '\u05D0'..'\u05EA' | '\u05F0'..'\u05F2' | '\u0621'..'\u063A' | '\u0640'..'\u064A' | '\u0671'..'\u06D3' | '\u06D5' | '\u06E5'..'\u06E6' | '\u06FA'..'\u06FC' | '\u0710' | '\u0712'..'\u072C' | '\u0780'..'\u07A5' | '\u0905'..'\u0939' | '\u093D' | '\u0950' | '\u0958'..'\u0961' | '\u0985'..'\u098C' | '\u098F'..'\u0990' | '\u0993'..'\u09A8' | '\u09AA'..'\u09B0' | '\u09B2' | '\u09B6'..'\u09B9' | '\u09DC'..'\u09DD' | '\u09DF'..'\u09E1' | '\u09F0'..'\u09F1' | '\u0A05'..'\u0A0A' | '\u0A0F'..'\u0A10' | '\u0A13'..'\u0A28' | '\u0A2A'..'\u0A30' | '\u0A32'..'\u0A33' | '\u0A35'..'\u0A36' | '\u0A38'..'\u0A39' | '\u0A59'..'\u0A5C' | '\u0A5E' | '\u0A72'..'\u0A74' | '\u0A85'..'\u0A8B' | '\u0A8D' | '\u0A8F'..'\u0A91' | '\u0A93'..'\u0AA8' | '\u0AAA'..'\u0AB0' | '\u0AB2'..'\u0AB3' | '\u0AB5'..'\u0AB9' | '\u0ABD' | '\u0AD0' | '\u0AE0' | '\u0B05'..'\u0B0C' | '\u0B0F'..'\u0B10' | '\u0B13'..'\u0B28' | '\u0B2A'..'\u0B30' | '\u0B32'..'\u0B33' | '\u0B36'..'\u0B39' | '\u0B3D' | '\u0B5C'..'\u0B5D' | '\u0B5F'..'\u0B61' | '\u0B85'..'\u0B8A' | '\u0B8E'..'\u0B90' | '\u0B92'..'\u0B95' | '\u0B99'..'\u0B9A' | '\u0B9C' | '\u0B9E'..'\u0B9F' | '\u0BA3'..'\u0BA4' | '\u0BA8'..'\u0BAA' | '\u0BAE'..'\u0BB5' | '\u0BB7'..'\u0BB9' | '\u0C05'..'\u0C0C' | '\u0C0E'..'\u0C10' | '\u0C12'..'\u0C28' | '\u0C2A'..'\u0C33' | '\u0C35'..'\u0C39' | '\u0C60'..'\u0C61' | '\u0C85'..'\u0C8C' | '\u0C8E'..'\u0C90' | '\u0C92'..'\u0CA8' | '\u0CAA'..'\u0CB3' | '\u0CB5'..'\u0CB9' | '\u0CDE' | '\u0CE0'..'\u0CE1' | '\u0D05'..'\u0D0C' | '\u0D0E'..'\u0D10' | '\u0D12'..'\u0D28' | '\u0D2A'..'\u0D39' | '\u0D60'..'\u0D61' | '\u0D85'..'\u0D96' | '\u0D9A'..'\u0DB1' | '\u0DB3'..'\u0DBB' | '\u0DBD' | '\u0DC0'..'\u0DC6' | '\u0E01'..'\u0E30' | '\u0E32'..'\u0E33' | '\u0E40'..'\u0E46' | '\u0E81'..'\u0E82' | '\u0E84' | '\u0E87'..'\u0E88' | '\u0E8A' | '\u0E8D' | '\u0E94'..'\u0E97' | '\u0E99'..'\u0E9F' | '\u0EA1'..'\u0EA3' | '\u0EA5' | '\u0EA7' | '\u0EAA'..'\u0EAB' | '\u0EAD'..'\u0EB0' | '\u0EB2'..'\u0EB3' | '\u0EBD'..'\u0EC4' | '\u0EC6' | '\u0EDC'..'\u0EDD' | '\u0F00' | '\u0F40'..'\u0F6A' | '\u0F88'..'\u0F8B' | '\u1000'..'\u1021' | '\u1023'..'\u1027' | '\u1029'..'\u102A' | '\u1050'..'\u1055' | '\u10A0'..'\u10C5' | '\u10D0'..'\u10F6' | '\u1100'..'\u1159' | '\u115F'..'\u11A2' | '\u11A8'..'\u11F9' | '\u1200'..'\u1206' | '\u1208'..'\u1246' | '\u1248' | '\u124A'..'\u124D' | '\u1250'..'\u1256' | '\u1258' | '\u125A'..'\u125D' | '\u1260'..'\u1286' | '\u1288' | '\u128A'..'\u128D' | '\u1290'..'\u12AE' | '\u12B0' | '\u12B2'..'\u12B5' | '\u12B8'..'\u12BE' | '\u12C0' | '\u12C2'..'\u12C5' | '\u12C8'..'\u12CE' | '\u12D0'..'\u12D6' | '\u12D8'..'\u12EE' | '\u12F0'..'\u130E' | '\u1310' | '\u1312'..'\u1315' | '\u1318'..'\u131E' | '\u1320'..'\u1346' | '\u1348'..'\u135A' | '\u13A0'..'\u13B0' | '\u13B1'..'\u13F4' | '\u1401'..'\u1676' | '\u1681'..'\u169A' | '\u16A0'..'\u16EA' | '\u1780'..'\u17B3' | '\u1820'..'\u1877' | '\u1880'..'\u18A8' | '\u1E00'..'\u1E9B' | '\u1EA0'..'\u1EE0' | '\u1EE1'..'\u1EF9' | '\u1F00'..'\u1F15' | '\u1F18'..'\u1F1D' | '\u1F20'..'\u1F39' | '\u1F3A'..'\u1F45' | '\u1F48'..'\u1F4D' | '\u1F50'..'\u1F57' | '\u1F59' | '\u1F5B' | '\u1F5D' | '\u1F5F'..'\u1F7D' | '\u1F80'..'\u1FB4' | '\u1FB6'..'\u1FBC' | '\u1FBE' | '\u1FC2'..'\u1FC4' | '\u1FC6'..'\u1FCC' | '\u1FD0'..'\u1FD3' | '\u1FD6'..'\u1FDB' | '\u1FE0'..'\u1FEC' | '\u1FF2'..'\u1FF4' | '\u1FF6'..'\u1FFC' | '\u207F' | '\u2102' | '\u2107' | '\u210A'..'\u2113' | '\u2115' | '\u2119'..'\u211D' | '\u2124' | '\u2126' | '\u2128' | '\u212A'..'\u212D' | '\u212F'..'\u2131' | '\u2133'..'\u2139' | '\u2160'..'\u2183' | '\u3005'..'\u3007' | '\u3021'..'\u3029' | '\u3031'..'\u3035' | '\u3038'..'\u303A' | '\u3041'..'\u3094' | '\u309D'..'\u309E' | '\u30A1'..'\u30FA' | '\u30FC'..'\u30FE' | '\u3105'..'\u312C' | '\u3131'..'\u318E' | '\u31A0'..'\u31B7' | '\u3400' | '\u4DB5' | '\u4E00' | '\u9FA5' | '\uA000'..'\uA48C' | '\uAC00' | '\uD7A3' | '\uF900'..'\uFA2D' | '\uFB00'..'\uFB06' | '\uFB13'..'\uFB17' | '\uFB1D' | '\uFB1F'..'\uFB28' | '\uFB2A'..'\uFB36' | '\uFB38'..'\uFB3C' | '\uFB3E' | '\uFB40'..'\uFB41' | '\uFB43'..'\uFB44' | '\uFB46'..'\uFBB1' | '\uFBD3'..'\uFD3D' | '\uFD50'..'\uFD8F' | '\uFD92'..'\uFDC7' | '\uFDF0'..'\uFDFB' | '\uFE70'..'\uFE72' | '\uFE74' | '\uFE76'..'\uFEFC' | '\uFF21'..'\uFF3A' | '\uFF41'..'\uFF5A' | '\uFF66'..'\uFFBE' | '\uFFC2'..'\uFFC7' | '\uFFCA'..'\uFFCF' | '\uFFD2'..'\uFFD7' | '\uFFDA'..'\uFFDC' ; fragment UnicodeCombiningMark // Any character in the Unicode categories "Non-spacing mark (Mn)" : '\u0300'..'\u034E' // or "Combining spacing mark (Mc)". | '\u0360'..'\u0362' | '\u0483'..'\u0486' | '\u0591'..'\u05A1' | '\u05A3'..'\u05B9' | '\u05BB'..'\u05BD' | '\u05BF' | '\u05C1'..'\u05C2' | '\u05C4' | '\u064B'..'\u0655' | '\u0670' | '\u06D6'..'\u06DC' | '\u06DF'..'\u06E4' | '\u06E7'..'\u06E8' | '\u06EA'..'\u06ED' | '\u0711' | '\u0730'..'\u074A' | '\u07A6'..'\u07B0' | '\u0901'..'\u0903' | '\u093C' | '\u093E'..'\u094D' | '\u0951'..'\u0954' | '\u0962'..'\u0963' | '\u0981'..'\u0983' | '\u09BC'..'\u09C4' | '\u09C7'..'\u09C8' | '\u09CB'..'\u09CD' | '\u09D7' | '\u09E2'..'\u09E3' | '\u0A02' | '\u0A3C' | '\u0A3E'..'\u0A42' | '\u0A47'..'\u0A48' | '\u0A4B'..'\u0A4D' | '\u0A70'..'\u0A71' | '\u0A81'..'\u0A83' | '\u0ABC' | '\u0ABE'..'\u0AC5' | '\u0AC7'..'\u0AC9' | '\u0ACB'..'\u0ACD' | '\u0B01'..'\u0B03' | '\u0B3C' | '\u0B3E'..'\u0B43' | '\u0B47'..'\u0B48' | '\u0B4B'..'\u0B4D' | '\u0B56'..'\u0B57' | '\u0B82'..'\u0B83' | '\u0BBE'..'\u0BC2' | '\u0BC6'..'\u0BC8' | '\u0BCA'..'\u0BCD' | '\u0BD7' | '\u0C01'..'\u0C03' | '\u0C3E'..'\u0C44' | '\u0C46'..'\u0C48' | '\u0C4A'..'\u0C4D' | '\u0C55'..'\u0C56' | '\u0C82'..'\u0C83' | '\u0CBE'..'\u0CC4' | '\u0CC6'..'\u0CC8' | '\u0CCA'..'\u0CCD' | '\u0CD5'..'\u0CD6' | '\u0D02'..'\u0D03' | '\u0D3E'..'\u0D43' | '\u0D46'..'\u0D48' | '\u0D4A'..'\u0D4D' | '\u0D57' | '\u0D82'..'\u0D83' | '\u0DCA' | '\u0DCF'..'\u0DD4' | '\u0DD6' | '\u0DD8'..'\u0DDF' | '\u0DF2'..'\u0DF3' | '\u0E31' | '\u0E34'..'\u0E3A' | '\u0E47'..'\u0E4E' | '\u0EB1' | '\u0EB4'..'\u0EB9' | '\u0EBB'..'\u0EBC' | '\u0EC8'..'\u0ECD' | '\u0F18'..'\u0F19' | '\u0F35' | '\u0F37' | '\u0F39' | '\u0F3E'..'\u0F3F' | '\u0F71'..'\u0F84' | '\u0F86'..'\u0F87' | '\u0F90'..'\u0F97' | '\u0F99'..'\u0FBC' | '\u0FC6' | '\u102C'..'\u1032' | '\u1036'..'\u1039' | '\u1056'..'\u1059' | '\u17B4'..'\u17D3' | '\u18A9' | '\u20D0'..'\u20DC' | '\u20E1' | '\u302A'..'\u302F' | '\u3099'..'\u309A' | '\uFB1E' | '\uFE20'..'\uFE23' ; fragment UnicodeDigit // Any character in the Unicode category "Decimal number (Nd)". : '\u0030'..'\u0039' | '\u0660'..'\u0669' | '\u06F0'..'\u06F9' | '\u0966'..'\u096F' | '\u09E6'..'\u09EF' | '\u0A66'..'\u0A6F' | '\u0AE6'..'\u0AEF' | '\u0B66'..'\u0B6F' | '\u0BE7'..'\u0BEF' | '\u0C66'..'\u0C6F' | '\u0CE6'..'\u0CEF' | '\u0D66'..'\u0D6F' | '\u0E50'..'\u0E59' | '\u0ED0'..'\u0ED9' | '\u0F20'..'\u0F29' | '\u1040'..'\u1049' | '\u1369'..'\u1371' | '\u17E0'..'\u17E9' | '\u1810'..'\u1819' | '\uFF10'..'\uFF19' ; fragment UnicodeConnectorPunctuation // Any character in the Unicode category "Connector punctuation (Pc)". : '\u005F' | '\u203F'..'\u2040' | '\u30FB' | '\uFE33'..'\uFE34' | '\uFE4D'..'\uFE4F' | '\uFF3F' | '\uFF65' ; Comment : '/*' (options {greedy=false;} : .)* '*/' {$channel=HIDDEN;} ; LineComment : '//' ~(LT)* {$channel=HIDDEN;} ; LT : '\n' // Line feed. | '\r' // Carriage return. | '\u2028' // Line separator. | '\u2029' // Paragraph separator. ; WhiteSpace // Tab, vertical tab, form feed, space, non-breaking space and any other unicode "space separator". : ('\t' | '\v' | '\f' | ' ' | '\u00A0') {$channel=HIDDEN;} ;