/* Ċ Ġ* ĠMessage Splitter . kt Ċ Ġ* ĠCopyright ĠÂ© Ġ 1 9 9 3 - 2 0 2 1 , ĠThe ĠAv ail ĠFoundation , ĠLLC . Ċ Ġ* ĠAll Ġrights Ġreserved . Ċ Ġ* Ċ Ġ* ĠRedistribution Ġand Ġuse Ġin Ġsource Ġand Ġbinary Ġforms , Ġwith Ġor Ġwithout Ċ Ġ* Ġmodification , Ġare Ġpermitted Ġprovided Ġthat Ġthe Ġfollowing Ġconditions Ġare Ġmet : Ċ Ġ* Ċ Ġ* Ġ* ĠRedistributions Ġof Ġsource Ġcode Ġmust Ġretain Ġthe Ġabove Ġcopyright Ġnotice , Ġthis Ċ Ġ* ĠĠ Ġlist Ġof Ġconditions Ġand Ġthe Ġfollowing Ġdisclaimer . Ċ Ġ* Ċ Ġ* Ġ* ĠRedistributions Ġin Ġbinary Ġform Ġmust Ġreproduce Ġthe Ġabove Ġcopyright Ġnotice , Ċ Ġ* ĠĠ Ġthis Ġlist Ġof Ġconditions Ġand Ġthe Ġfollowing Ġdisclaimer Ġin Ġthe Ġdocumentation Ċ Ġ* ĠĠ Ġand / or Ġother Ġmaterials Ġprovided Ġwith Ġthe Ġdistribution . Ċ Ġ* Ċ Ġ* Ġ* ĠNeither Ġthe Ġname Ġof Ġthe Ġcopyright Ġholder Ġnor Ġthe Ġnames Ġof Ġthe Ġcontributors Ċ Ġ* ĠĠ Ġmay Ġbe Ġused Ġto Ġendorse Ġor Ġpromote Ġproducts Ġderived Ġfrom Ġthis Ġsoftware Ċ Ġ* ĠĠ Ġwithout Ġspecific Ġprior Ġwritten Ġpermission . Ċ Ġ* Ċ Ġ* ĠTHIS ĠSOFTWARE ĠIS ĠPROVIDED ĠBY ĠTHE ĠCOPYRIGHT ĠHOLDERS ĠAND ĠCONTRIBUTORS Ġ" AS ĠIS " Ċ Ġ* ĠAND ĠANY ĠEXPRESS ĠOR ĠIMPLIED ĠWARRANTIES , ĠINCLUDING , ĠBUT ĠNOT ĠLIMITED ĠTO , ĠTHE Ċ Ġ* ĠIMPLIED ĠWARRANTIES ĠOF ĠMERCHANTABILITY ĠAND ĠFITNESS ĠFOR ĠA ĠPARTICULAR ĠPURPOSE Ċ Ġ* ĠARE ĠDISCLAIMED . ĠIN ĠNO ĠEVENT ĠSHALL ĠTHE ĠCOPYRIGHT ĠHOLDER ĠOR ĠCONTRIBUTORS ĠBE Ċ Ġ* ĠLIABLE ĠFOR ĠANY ĠDIRECT , ĠINDIRECT , ĠINCIDENTAL , ĠSPECIAL , ĠEXEMPLARY , ĠOR Ċ Ġ* ĠCONSEQUENTIAL ĠDAMAGES Ġ( INCLUDING , ĠBUT ĠNOT ĠLIMITED ĠTO , ĠPROCUREMENT ĠOF Ċ Ġ* ĠSUBSTITUTE ĠGOODS ĠOR ĠSERVICES ; ĠLOSS ĠOF ĠUSE , ĠDATA , ĠOR ĠPROFITS ; ĠOR ĠBUSINESS Ċ Ġ* ĠINTERRUPTION ) ĠHOWEVER ĠCAUSED ĠAND ĠON ĠANY ĠTHEORY ĠOF ĠLIABILITY , ĠWHETHER ĠIN Ċ Ġ* ĠCONTRACT , ĠSTRICT ĠLIABILITY , ĠOR ĠTORT Ġ( INCLUDING ĠNEGLIGENCE ĠOR ĠOTHERWISE ) Ċ Ġ* ĠARISING ĠIN ĠANY ĠWAY ĠOUT ĠOF ĠTHE ĠUSE ĠOF ĠTHIS ĠSOFTWARE , ĠEVEN ĠIF ĠADVISED ĠOF ĠTHE Ċ Ġ* ĠPOSSIBILITY ĠOF ĠSUCH ĠDAMAGE . Ċ Ġ*/ Ċ Ċ package Ġcom . avail . compiler . splitter Ċ Ċ import Ġcom . avail . compiler . Parsing Operation Ċ import Ġcom . avail . compiler . problems . Compiler Diagnostics Ċ import Ġcom . avail . compiler . splitter . Message Splitter . Met ach ar acter . BACK _ QUOTE Ċ import Ġcom . avail . compiler . splitter . Message Splitter . Met ach ar acter . CLOSE _ GU IL LE MET Ċ import Ġcom . avail . compiler . splitter . Message Splitter . Met ach ar acter . Companion . can Be Back Quoted Ċ import Ġcom . avail . compiler . splitter . Message Splitter . Met ach ar acter . DOUBLE _ DAG GER Ċ import Ġcom . avail . compiler . splitter . Message Splitter . Met ach ar acter . DOUBLE _ QUEST ION _ MARK Ċ import Ġcom . avail . compiler . splitter . Message Splitter . Met ach ar acter . EL LI PS IS Ċ import Ġcom . avail . compiler . splitter . Message Splitter . Met ach ar acter . EXCL AM ATION _ MARK Ċ import Ġcom . avail . compiler . splitter . Message Splitter . Met ach ar acter . OCT OTH OR P Ċ import Ġcom . avail . compiler . splitter . Message Splitter . Met ach ar acter . OPEN _ GU IL LE MET Ċ import Ġcom . avail . compiler . splitter . Message Splitter . Met ach ar acter . QUEST ION _ MARK Ċ import Ġcom . avail . compiler . splitter . Message Splitter . Met ach ar acter . SECTION _ SIGN Ċ import Ġcom . avail . compiler . splitter . Message Splitter . Met ach ar acter . SINGLE _ DAG GER Ċ import Ġcom . avail . compiler . splitter . Message Splitter . Met ach ar acter . T IL DE Ċ import Ġcom . avail . compiler . splitter . Message Splitter . Met ach ar acter . UNDER SCORE Ċ import Ġcom . avail . compiler . splitter . Message Splitter . Met ach ar acter . UP _ ARROW Ċ import Ġcom . avail . compiler . splitter . Message Splitter . Met ach ar acter . VERTICAL _ BAR Ċ import Ġcom . avail . descriptor . atoms . Atom Descriptor . Companion . false Object Ċ import Ġcom . avail . descriptor . atoms . Atom Descriptor . Companion . true Object Ċ import Ġcom . avail . descriptor . atoms . Atom Descriptor . Special Atom Ċ import Ġcom . avail . descriptor . bundles . A _ Bundle Ċ import Ġcom . avail . descriptor . bundles . A _ Bundle Tree Ċ import Ġcom . avail . descriptor . methods . A _ Macro Ċ import Ġcom . avail . descriptor . methods . Definition Descriptor Ċ import Ġcom . avail . descriptor . methods . Macro Descriptor Ċ import Ġcom . avail . descriptor . methods . Method Definition Descriptor Ċ import Ġcom . avail . descriptor . numbers . A _ Number . Companion . extract Int Ċ import Ġcom . avail . descriptor . numbers . Integer Descriptor Ċ import Ġcom . avail . descriptor . parsing . A _ Lexer Ċ import Ġcom . avail . descriptor . ph rases . A _ Phrase Ċ import Ġcom . avail . descriptor . ph rases . A _ Phrase . Companion . arguments ListNode Ċ import Ġcom . avail . descriptor . ph rases . A _ Phrase . Companion . expressions Tuple Ċ import Ġcom . avail . descriptor . ph rases . List Phrase Descriptor Ċ import Ġcom . avail . descriptor . ph rases . Per mut edList Phrase Descriptor Ċ import Ġcom . avail . descriptor . ph rases . Reference Phrase Descriptor Ċ import Ġcom . avail . descriptor . ph rases . Send Phrase Descriptor Ċ import Ġcom . avail . descriptor . ph rases . Variable Use Phrase Descriptor Ċ import Ġcom . avail . descriptor . representation . A _ Basic Object Ċ import Ġcom . avail . descriptor . representation . Avail Object Ċ import Ġcom . avail . descriptor . sets . A _ Set Ċ import Ġcom . avail . descriptor . sets . Set Descriptor . Companion . set Ċ import Ġcom . avail . descriptor . tokens . Literal Token Descriptor Ċ import Ġcom . avail . descriptor . tuples . A _ String Ċ import Ġcom . avail . descriptor . tuples . A _ Tuple Ċ import Ġcom . avail . descriptor . tuples . A _ Tuple . Companion . append Can Destroy Ċ import Ġcom . avail . descriptor . tuples . A _ Tuple . Companion . tuple At Ċ import Ġcom . avail . descriptor . tuples . A _ Tuple . Companion . tuple Code Point At Ċ import Ġcom . avail . descriptor . tuples . A _ Tuple . Companion . tuple Size Ċ import Ġcom . avail . descriptor . tuples . String Descriptor Ċ import Ġcom . avail . descriptor . tuples . String Descriptor . Companion . string From Ċ import Ġcom . avail . descriptor . tuples . Tuple Descriptor Ċ import Ġcom . avail . descriptor . tuples . Tuple Descriptor . Companion . empty Tuple Ċ import Ġcom . avail . descriptor . types . A _ Type Ċ import Ġcom . avail . descriptor . types . A _ Type . Companion . args Tuple Type Ċ import Ġcom . avail . descriptor . types . A _ Type . Companion . lower Bound Ċ import Ġcom . avail . descriptor . types . A _ Type . Companion . size Range Ċ import Ġcom . avail . descriptor . types . A _ Type . Companion . upper Bound Ċ import Ġcom . avail . descriptor . types . FunctionType Descriptor Ċ import Ġcom . avail . descriptor . types . Phrase TypeDescriptor Ċ import Ġcom . avail . descriptor . types . Tuple TypeDescriptor Ċ import Ġcom . avail . exceptions . Avail ErrorCode Ċ import Ġcom . avail . exceptions . Avail ErrorCode . E _ ALTER NATIVE _ MUST _ NOT _ CONTAIN _ ARGUMENT S Ċ import Ġcom . avail . exceptions . Avail ErrorCode . E _ CASE _ INS ENS ITIVE _ EXPRESSION _ CAN ON IZATION Ċ import Ġcom . avail . exceptions . Avail ErrorCode . E _ DOUBLE _ QUEST ION _ MARK _ MUST _ FOLLOW _ A _ TOKEN _ OR _ SIMPLE _ GROUP Ċ import Ġcom . avail . exceptions . Avail ErrorCode . E _ EXCL AM ATION _ MARK _ MUST _ FOLLOW _ AN _ ALTER N ATION _ GROUP Ċ import Ġcom . avail . exceptions . Avail ErrorCode . E _ EXPECTED _ OPERATOR _ AFTER _ BACK QUOTE Ċ import Ġcom . avail . exceptions . Avail ErrorCode . E _ IN CON SIST ENT _ ARGUMENT _ RE ORDER ING Ċ import Ġcom . avail . exceptions . Avail ErrorCode . E _ IN CORRECT _ ARGUMENT _ TYPE Ċ import Ġcom . avail . exceptions . Avail ErrorCode . E _ IN CORRECT _ NUMBER _ OF _ ARGUMENT S Ċ import Ġcom . avail . exceptions . Avail ErrorCode . E _ IN CORRECT _ TYPE _ FOR _ BOOLEAN _ GROUP Ċ import Ġcom . avail . exceptions . Avail ErrorCode . E _ IN CORRECT _ TYPE _ FOR _ COMPLEX _ GROUP Ċ import Ġcom . avail . exceptions . Avail ErrorCode . E _ IN CORRECT _ TYPE _ FOR _ COUNT ING _ GROUP Ċ import Ġcom . avail . exceptions . Avail ErrorCode . E _ IN CORRECT _ TYPE _ FOR _ GROUP Ċ import Ġcom . avail . exceptions . Avail ErrorCode . E _ IN CORRECT _ TYPE _ FOR _ NUMBER ED _ CHO ICE Ċ import Ġcom . avail . exceptions . Avail ErrorCode . E _ IN CORRECT _ USE _ OF _ DOUBLE _ DAG GER Ċ import Ġcom . avail . exceptions . Avail ErrorCode . E _ METHOD _ NAME _ IS _ NOT _ CAN ON ICAL Ċ import Ġcom . avail . exceptions . Avail ErrorCode . E _ OCT OTH OR P _ MUST _ FOLLOW _ A _ SIMPLE _ GROUP _ OR _ EL LI PS IS Ċ import Ġcom . avail . exceptions . Avail ErrorCode . E _ QUEST ION _ MARK _ MUST _ FOLLOW _ A _ SIMPLE _ GROUP Ċ import Ġcom . avail . exceptions . Avail ErrorCode . E _ UN BAL ANCED _ GU IL LE ME TS Ċ import Ġcom . avail . exceptions . Avail ErrorCode . E _ UP _ ARROW _ MUST _ FOLLOW _ ARGUMENT Ċ import Ġcom . avail . exceptions . Avail ErrorCode . E _ VERTICAL _ BAR _ MUST _ SEPAR ATE _ TOKEN S _ OR _ SIMPLE _ GROUP S Ċ import Ġcom . avail . exceptions . Malformed Message Exception Ċ import Ġcom . avail . exceptions . Signature Exception Ċ import Ġcom . avail . utility . cast Ċ import Ġcom . avail . utility . safe Write Ċ import Ġjava . util . concurrent . atomic . Atomic Reference Ċ import Ġjava . util . concurrent . locks . Re entrant ReadWrite Lock Ċ import Ġkotlin . concurrent . read Ċ import Ġkotlin . streams . toList Ċ Ċ /** Ċ Ġ* Ġ` Message Splitter ` Ġis Ġused Ġto Ġsplit ĠAv ail Ġmessage Ġnames Ġinto Ġa Ġsequence Ġof Ċ Ġ* Ġ[ instructions ][ Parsing Operation ] Ġthat Ġcan Ġbe Ġused Ġdirectly Ġfor Ġparsing . Ċ Ġ* Ċ Ġ* ĠMessage Ġsplitting Ġoccurs Ġin Ġtwo Ġphases . Ġ ĠIn Ġthe Ġfirst Ġset Phase , Ġthe Ġmessage Ċ Ġ* Ġis Ġtoken ized Ġand Ġparsed Ġinto Ġan Ġabstract Ġ[ Expression ] Ġtree . ĠIn Ġthe Ġsecond Ċ Ġ* Ġset Phase , Ġa Ġ[ tuple &# 3 2 ; type ][ Tuple TypeDescriptor ] Ġof Ċ Ġ* Ġ[ phrase &# 3 2 ; types ][ Phrase TypeDescriptor ] Ġis Ġsupplied , Ġand Ġproduces Ġa Ġtuple Ġof Ċ Ġ* Ġinteger - encoded Ġ[ Parsing Operation ] s . Ċ Ġ* Ċ Ġ* Ġ@ author ĠMark Ġvan ĠG ul ik Ġ& lt ; mark @ avail lang . org & gt ; Ċ Ġ* Ġ@ author ĠT odd ĠL ĠSmith Ġ& lt ; tod d @ avail lang . org & gt ; Ċ Ġ* Ċ Ġ* Ġ@ constructor Ċ Ġ* Ċ Ġ* ĠConstruct Ġa Ġnew Ġ` Message Splitter `, Ġparsing Ġthe Ġprovided Ġmessage Ġinto Ġtoken Ċ Ġ* Ġstrings Ġand Ġgenerating Ġ[ parsing ][ Parsing Operation ] Ġfor Ġparsing Ġoccurrences Ġof Ċ Ġ* Ġthis Ġmessage . Ċ Ġ* Ċ Ġ* Ġ@ param Ġmessage Name Ċ Ġ* ĠĠ ĠAn ĠAv ail Ġ[ string ][ String Descriptor ] Ġspecifying Ġthe Ġkeywords Ġand Ġarguments Ċ Ġ* ĠĠ Ġof Ġsome Ġmessage Ġbeing Ġdefined . Ċ Ġ* Ġ@ throws ĠMal formed Message Exception Ċ Ġ* ĠĠĠĠĠĠĠĠ ĠIf Ġthe Ġmessage Ġname Ġis Ġmalformed . Ċ Ġ*/ Ċ class ĠMessage Splitter Ċ @ Throws ( Malformed Message Exception :: class ) Ċ constructor ( message Name : ĠA _ String ) Ġ{ Ċ ĉ /** Ċĉ Ġ* ĠThe ĠAv ail Ġstring Ġto Ġbe Ġparsed . Ċĉ Ġ*/ Ċ ĉ val Ġmessage Name : ĠA _ String ĊĊ ĉ /** Ċĉ Ġ* ĠThe Ġindividual Ġtokens Ġ([ strings ][ String Descriptor ]) Ċĉ Ġ* Ġconst it uting Ġthe Ġmessage . Ċĉ Ġ* Ċĉ Ġ* Ġ Ġ* ĠAl phanum erics Ġare Ġin Ġruns , Ġseparated Ġfrom Ġother Ġal phanum erics Ġby Ġa Ċĉ Ġ* ĠĠĠ Ġsingle Ġspace . Ċĉ Ġ* Ġ Ġ* ĠOperator Ġcharacters Ġare Ġnever Ġbes ide Ġspaces , Ġand Ġare Ġalways Ġparsed Ġas Ċĉ Ġ* ĠĠĠ Ġindividual Ġtokens . Ċĉ Ġ* Ġ Ġ* Ġ[ Open &# 3 2 ; gu ille met ][ Met ach ar acter . OPEN _ GU IL LE MET ] Ġ( Â « ), Ċĉ Ġ* ĠĠĠ Ġ[ double &# 3 2 ; d agger ][ Met ach ar acter . DOUBLE _ DAG GER ] Ġ( âĢ ¡ ), Ġand Ċĉ Ġ* ĠĠĠ Ġ[ close &# 3 2 ; gu ille met ][ Met ach ar acter . CLOSE _ GU IL LE MET ] Ġ( Â» ) Ġare Ġused Ġto Ċĉ Ġ* ĠĠĠ Ġindicate Ġrepeated Ġor Ġoptional Ġsub structures . Ċĉ Ġ* Ġ Ġ* ĠThe Ġcharacters Ġ[ oct oth orp ][ Met ach ar acter . OCT OTH OR P ] Ċĉ Ġ* ĠĠĠ Ġ(# ) Ġand Ġ[ question &# 3 2 ; mark ][ Met ach ar acter . QUEST ION _ MARK ] Ġ( ?) Ġmodify Ċĉ Ġ* ĠĠĠ Ġthe Ġoutput Ġof Ġrepeated Ġsub structures Ġto Ġproduce Ġeither Ġa Ġcount Ġof Ġthe Ċĉ Ġ* ĠĠĠ Ġrepet itions Ġor Ġa Ġboolean Ġindicating Ġwhether Ġan Ġoptional Ġsub expression Ċĉ Ġ* ĠĠĠ Ġ( expect ing Ġno Ġarguments ) Ġwas Ġpresent . Ċĉ Ġ* Ġ Ġ* ĠPl acing Ġa Ġ[ question &# 3 2 ; mark ][ Met ach ar acter . QUEST ION _ MARK ] Ċĉ Ġ* ĠĠĠ Ġ( ?) Ġafter Ġa Ġgroup Ġcontaining Ġarguments Ġbut Ġno Ċĉ Ġ* ĠĠĠ Ġ[ double &# 3 2 ; d agger ][ Met ach ar acter . DOUBLE _ DAG GER ] Ġ( âĢ ¡ ) Ġwill Ġlimit Ġthe Ċĉ Ġ* ĠĠĠ Ġrepet itions Ġof Ġthe Ġgroup Ġto Ġat Ġmost Ġone . Ġ ĠAlthough Ġlimiting Ġthe Ġmethod Ċĉ Ġ* ĠĠĠ Ġdefinitions Ġto Ġonly Ġaccept Ġ 0 .. 1 Ġoccurrences Ġwould Ġaccomplish Ġthe Ġsame Ċĉ Ġ* ĠĠĠ Ġgram matic al Ġnarrow ing , Ġthe Ġparser Ġmight Ġstill Ġattempt Ġto Ġparse Ġmore Ċĉ Ġ* ĠĠĠ Ġthan Ġone Ġoccurrence , Ġleading Ġto Ġun ne cess arily Ġconfusing Ġdiagnostics . Ċĉ Ġ* Ġ Ġ* ĠAn Ġ[ ex clamation &# 3 2 ; mark ][ Met ach ar acter . EXCL AM ATION _ MARK ] Ġ(! ) Ġcan Ċĉ Ġ* ĠĠĠ Ġfollow Ġa Ġgroup Ġof Ġaltern ations Ġto Ġproduce Ġthe Ġ 1 - based Ġindex Ġof Ġthe Ċĉ Ġ* ĠĠĠ Ġalternative Ġthat Ġactually Ġoccurred . Ċĉ Ġ* Ġ Ġ* ĠAn Ġ[ underscore ][ Met ach ar acter . UNDER SCORE ] Ġ(_) Ġindicates Ġwhere Ġan Ċĉ Ġ* ĠĠĠ Ġargument Ġoccurs . Ċĉ Ġ* Ġ Ġ* ĠA Ġ[ single &# 3 2 ; d agger ][ Met ach ar acter . SINGLE _ DAG GER ] Ġ( âĢ ł ) Ġmay Ġoccur Ċĉ Ġ* ĠĠĠ Ġimmediately Ġafter Ġan Ġunderscore Ġto Ġcause Ġthe Ġargument Ġexpression Ġto Ġbe Ċĉ Ġ* ĠĠĠ Ġevaluated Ġin Ġthe Ġstatic Ġscope Ġduring Ġcompilation , Ġwrapping Ġthe Ġvalue Ċĉ Ġ* ĠĠĠ Ġin Ġa Ġ[ literal &# 3 2 ; phrase ][ Literal Phrase Descriptor ]. Ġ ĠThis Ġis Ċĉ Ġ* ĠĠĠ Ġapplicable Ġto Ġboth Ġmethods Ġand Ġmacros . Ġ ĠThe Ġexpression Ġis Ġsubject Ġto Ċĉ Ġ* ĠĠĠ Ġgram matic al Ġrestrictions , Ġand Ġit Ġmust Ġyield Ġa Ġvalue Ġof Ġsuitable Ġtype . Ċĉ Ġ* Ġ Ġ* ĠAn Ġ[ up - arrow ][ Met ach ar acter . UP _ ARROW ] Ġ( âĨ ĳ ) Ġafter Ġan Ġunderscore Ċĉ Ġ* ĠĠĠ Ġindicates Ġan Ġin - scope Ġvariable Ġname Ġis Ġto Ġbe Ġparsed . Ġ ĠThe Ċĉ Ġ* ĠĠĠ Ġsub expression Ġcauses Ġthe Ġvariable Ġitself Ġto Ġbe Ġprovided , Ġrather Ġthan Ċĉ Ġ* ĠĠĠ Ġits Ġvalue . Ċĉ Ġ* Ġ Ġ* ĠAn Ġ[ ex clamation &# 3 2 ; mark ][ Met ach ar acter . EXCL AM ATION _ MARK ] Ġ(! ) Ġmay Ċĉ Ġ* ĠĠĠ Ġoccur Ġafter Ġthe Ġunderscore Ġinstead , Ġto Ġindicate Ġthe Ġargument Ċĉ Ġ* ĠĠĠ Ġexpression Ġmay Ġbe ĠâĬ ¤ - valu ed Ġor ĠâĬ ¥ - valu ed . Ġ ĠSince Ġa Ġfunction Ġ( and Ċĉ Ġ* ĠĠĠ Ġtherefore Ġa Ġmethod Ġdefinition ) Ġcannot Ġaccept Ġa ĠâĬ ¤ - valu ed Ġargument , Ġthis Ċĉ Ġ* ĠĠĠ Ġmechanism Ġonly Ġmakes Ġsense Ġfor Ġmacros , Ġsince Ġmacros Ġbodies Ġare Ġpassed Ċĉ Ġ* ĠĠĠ Ġphrases , Ġwhich Ġmay Ġbe Ġtyped Ġas Ġ* yield ing * Ġa Ġtop - valu ed Ġresult . Ċĉ Ġ* Ġ Ġ* ĠAn Ġ[ EL LI PS IS ][ Met ach ar acter . EL LI PS IS ] Ġ( âĢ¦ ) Ġmatches Ġa Ġsingle Ċĉ Ġ* ĠĠĠ Ġ[ keyword &# 3 2 ; token ][ A _ Token ]. Ċĉ Ġ* Ġ Ġ* ĠAn Ġ[ ex clamation &# 3 2 ; mark ][ Met ach ar acter . EXCL AM ATION _ MARK ] Ġ(! ) Ġafter Ġan Ċĉ Ġ* ĠĠĠ ĠEL LI PS IS Ġindicates Ġ* any * Ġtoken Ġwill Ġbe Ġaccepted Ġat Ġthat Ġposition . Ċĉ Ġ* Ġ Ġ* ĠAn Ġ[ OCT OTH OR P ][ Met ach ar acter . OCT OTH OR P ] Ġ(# ) Ġafter Ġan Ġellipsis Ċĉ Ġ* ĠĠĠ Ġindicates Ġonly Ġa Ġ* literal * Ġtoken Ġwill Ġbe Ġaccepted . Ċĉ Ġ* Ġ Ġ* ĠThe ĠN < sup > th </ sup > Ġ[ section ][ Met ach ar acter . SECTION _ SIGN ] Ġ( Â§ ) Ġin Ġa Ċĉ Ġ* ĠĠĠ Ġmessage Ġname Ġindicates Ġwhere Ġa Ġmacro 's ĠN < sup > th </ sup > Ċĉ Ġ* ĠĠĠ Ġ[ prefix &# 3 2 ; function ][ A _ Definition . prefix Functions ] Ġshould Ġbe Ġinvoked Ċĉ Ġ* ĠĠĠ Ġwith Ġthe Ġcurrent Ġparse Ġstack Ġup Ġto Ġthat Ġpoint . Ċĉ Ġ* Ġ Ġ* ĠA Ġ[ back quote ][ Met ach ar acter . BACK _ QUOTE ] Ġ( `) Ġcan Ġprece de Ġany Ġoperator Ċĉ Ġ* ĠĠĠ Ġcharacter , Ġsuch Ġas Ġgu il leme ts Ġor Ġdouble Ġdagger , Ġto Ġensure Ġit Ġis Ġnot Ċĉ Ġ* ĠĠĠ Ġused Ġin Ġa Ġspecial Ġway . ĠA Ġback quote Ġmay Ġalso Ġoperate Ġon Ġanother Ċĉ Ġ* ĠĠĠ Ġback quote Ġ( to Ġindicate Ġthat Ġan Ġactual Ġback quote Ġtoken Ġwill Ġappear Ġin Ġa Ċĉ Ġ* ĠĠĠ Ġcall ). Ċĉ Ġ*/ Ċ ĉ val Ġmessage Parts : ĠArray < A _ String > ĊĊ ĉ /** Ċĉ Ġ* ĠA Ġcollection Ġof Ġone - based Ġpositions Ġin Ġthe Ġoriginal Ġstring , Ġcorresponding Ċĉ Ġ* Ġto Ġthe Ġ[ message Parts ] Ġarray Ġthat Ġhave Ġbeen Ġextracted . Ċĉ Ġ*/ Ċ ĉ private Ġval Ġmessage Part Positions : ĠInt Array ĊĊ ĉ /** ĠThe Ġcurrent Ġone - based Ġparsing Ġposition Ġin Ġthe Ġlist Ġof Ġtokens . Ġ*/ Ċ ĉ private Ġvar Ġmessage Part Position : ĠInt Ġ= Ġ 0 ĊĊ ĉ /** Ċĉ Ġ* ĠThe Ġnumber Ġof Ġunders cores / el lip ses Ġpresent Ġin Ġthe Ġmethod Ġname . ĠThis Ġis Ċĉ Ġ* Ġnot Ġthe Ġsame Ġas Ġthe Ġnumber Ġof Ġarguments Ġthat Ġa Ġmethod Ġimplementing Ġthis Ċĉ Ġ* Ġname Ġwould Ġaccept , Ġas Ġa Ġtop - level Ġgu ille met Ġgroup Ġwith Ġ` N ` Ġrecursively Ċĉ Ġ* Ġembedded Ġunders cores / el lip ses Ġis Ġcounted Ġas Ġ` N `, Ġnot Ġone . Ċĉ Ġ* Ċĉ Ġ* ĠThis Ġcount Ġof Ġunders cores / el lip ses Ġis Ġessential Ġfor Ġexpress ing Ġnegative Ċĉ Ġ* Ġprecedence Ġrules Ġ( gram matic al Ġrestrictions ) Ġin Ġthe Ġpresence Ġof Ġrepeated Ċĉ Ġ* Ġarguments . Ġ ĠAlso Ġnote Ġthat Ġback quoted Ġunders cores Ġare Ġnot Ġcounted , Ġsince Ċĉ Ġ* Ġthey Ġdon 't Ġrepresent Ġa Ġposition Ġat Ġwhich Ġa Ġsub expression Ġmust Ġoccur . Ċĉ Ġ* ĠSimilar ly , Ġback quoted Ġel lip ses Ġare Ġnot Ġa Ġplace Ġwhere Ġan Ġarbitrary Ġinput Ċĉ Ġ* Ġtoken Ġcan Ġgo . Ċĉ Ġ*/ Ċ ĉ var Ġleaf Argument Count Ġ= Ġ 0 Ċĉ ĉ private Ġset ĊĊ ĉ /** Ċĉ Ġ* ĠThe Ġnumber Ġof Ġ[ Section Checkpoint ] s Ġencountered Ġso Ġfar . Ċĉ Ġ*/ Ċ ĉ var ĠnumberOf Section Check points : ĠInt Ġ= Ġ 0 ĊĊ ĉ /** ĠThe Ġtop - most Ġ[ sequence ][ Sequence ]. Ġ*/ Ċ ĉ private Ġval Ġroot Sequence : ĠSequence ĊĊ ĉ /** Ċĉ Ġ* ĠThe Ġmet ach ar acters Ġused Ġin Ġmessage Ġnames . Ċĉ Ġ* Ċĉ Ġ* Ġ@ constructor Ċĉ Ġ* Ċĉ Ġ* ĠInitialize Ġan Ġenum Ġinstance . Ċĉ Ġ* Ċĉ Ġ* Ġ@ param Ġjava String Ċĉ Ġ* ĠĠ ĠThe ĠJava Ġ[ String ] Ġden oting Ġthe Ġmet ach ar acter . Ċĉ Ġ*/ Ċ ĉ enum Ġclass ĠMet ach ar acter Ġconstructor ( java String : ĠString ) Ġ{ Ċĉ ĉ /** Ċĉĉ Ġ* ĠA Ġback - quote Ġ( `) Ġprece des Ġa Ġmet ach ar acter Ġto Ġcause Ġit Ġto Ġbe Ġtreated Ċĉĉ Ġ* Ġas Ġan Ġordinary Ġcharacter . Ġ ĠSince Ġno Ġmet ach ar acters Ġare Ġal phanumeric , Ċĉĉ Ġ* Ġand Ġsince Ġnon - al phanumeric Ġcharacters Ġare Ġalways Ġtoken ized Ċĉĉ Ġ* Ġindividually , Ġback - quote Ġonly Ġoper ates Ġon Ġthe Ġsingle Ġcharacter Ċĉĉ Ġ* Ġfollowing Ġit . Ġ ĠNote Ġthat Ġsince Ġback - quote Ġis Ġitself Ġa Ġmet ach ar acter , Ċĉĉ Ġ* Ġtwo Ġsuccess ive Ġback quotes Ġindicates Ġa Ġsingle Ġback - quote Ġshould Ġbe Ċĉĉ Ġ* Ġparsed Ġfrom Ġthe ĠAv ail Ġsource Ġcode . Ċĉĉ Ġ* Ċĉĉ Ġ* ĠThe Ġonly Ġcharacters Ġthat Ġcan Ġbe Ġback quoted Ġ( and Ġmust Ġbe Ġto Ġuse Ċĉĉ Ġ* Ġthem Ġin Ġa Ġnon - special Ġway ) Ġare Ġthe Ġ` Met ach ar acter ` s , Ġspace , Ġand Ċĉĉ Ġ* Ġthe Ġ[ circ led &# 3 2 ; numbers ][ circ led Numbers String ]. Ċĉĉ Ġ*/ Ċĉ ĉ BACK _ QUOTE (" ` "), ĊĊĉ ĉ /** Ċĉĉ Ġ* ĠA Ġclose - gu ille met Ġ( Â» ) Ġindicates Ġthe Ġend Ġof Ġa Ġgroup Ġor Ġother Ġstructure Ċĉĉ Ġ* Ġthat Ġstarted Ġwith Ġan Ġ[ OPEN _ GU IL LE MET ] Ġopen - gu ille met Ġ( Â « ). Ċĉĉ Ġ*/ Ċĉ ĉ CLOSE _ GU IL LE MET (" Â» "), ĊĊĉ ĉ /** Ċĉĉ Ġ* ĠThe Ġdouble - d agger Ġ( âĢ ¡ ) Ġis Ġused Ġwithin Ġa Ġ[ Group ] Ġto Ġde limit Ġthe Ċĉĉ Ġ* Ġleft Ġpart , Ġwhich Ġrepe ats , Ġfrom Ġthe Ġright Ġpart , Ġwhich Ġsepar ates Ċĉĉ Ġ* Ġoccurrences Ġof Ġthe Ġleft Ġpart . Ċĉĉ Ġ* Ċĉĉ Ġ* ĠThe Ġactual Ġmethod Ġargument Ġ( or Ġportion Ġof Ġa Ġmethod Ġargument Ċĉĉ Ġ* Ġassociated Ġwith Ġthis Ġsub expression ) Ġmust Ġbe Ġable Ġto Ġaccept Ġsome Ċĉĉ Ġ* Ġnumber Ġof Ġoccurrences Ġof Ġtuples Ġwhose Ġsize Ġis Ġthe Ġtotal Ġnumber Ġof Ċĉĉ Ġ* Ġvalue - yield ing Ġsub expressions Ġin Ġthe Ġgroup , Ġplus Ġone Ġfinal Ġtuple Ġthat Ċĉĉ Ġ* Ġonly Ġhas Ġvalues Ġy ielded Ġfrom Ġsub expressions Ġleft Ġof Ġthe Ċĉĉ Ġ* Ġdouble - d agger . Ġ ĠIn Ġthe Ġspecial , Ġmost Ġcommon Ġcase Ġof Ġthe Ġleft Ġside Ċĉĉ Ġ* Ġhaving Ġexactly Ġone Ġyield ing Ġexpression , Ġand Ġthe Ġright Ġside Ġyield ing Ċĉĉ Ġ* Ġnothing , Ġthe Ġinner Ġone - element Ġtuples Ġare Ġel ided . Ċĉĉ Ġ*/ Ċĉ ĉ DOUBLE _ DAG GER (" âĢ ¡ "), ĊĊĉ ĉ /** Ċĉĉ Ġ* ĠThe Ġdouble - question - mark Ġ( âģ ĩ ) Ġis Ġa Ġsingle ĠUnicode Ġcharacter Ġ( U + 2 0 4 7 ). Ċĉĉ Ġ* ĠIt Ġcan Ġbe Ġplaced Ġafter Ġa Ġtoken Ġor Ġafter Ġa Ġsimple Ġgroup Ġ( a Ġgroup Ġthat Ċĉĉ Ġ* Ġhas Ġno Ġright Ġside Ġand Ġdoes Ġnot Ġyield Ġanything Ġfrom Ġits Ġleft Ġside ). Ċĉĉ Ġ* ĠIn Ġthe Ġcase Ġof Ġa Ġtoken , Ġit Ġallows Ġzero Ġor Ġone Ġoccurrences Ġof Ġthe Ċĉĉ Ġ* Ġtoken Ġto Ġoccur Ġin Ġthe ĠAv ail Ġsource , Ġand Ġ* dis cards * Ġinformation Ċĉĉ Ġ* Ġabout Ġwhether Ġthe Ġtoken Ġwas Ġencountered . Ġ ĠSimilar ly , Ġwhen Ġapplied Ġto Ċĉĉ Ġ* Ġa Ġsimple Ġgroup Ġit Ġaccepts Ġzero Ġor Ġone Ġoccurrences Ġof Ġthe Ġgroup 's Ġleft Ċĉĉ Ġ* Ġside , Ġdiscard ing Ġthe Ġdist inction . Ġ ĠIn Ġboth Ġcases , Ġthe Ċĉĉ Ġ* Ġdouble - question - mark Ġcauses Ġa Ġ[ Comp let ely Optional ] Ġto Ġbe Ġbuilt . Ċĉĉ Ġ* Ċĉĉ Ġ* ĠThis Ġcan Ġbe Ġuseful Ġto Ġmake Ġexpressions Ġread Ġmore Ġfluid ly Ġby Ċĉĉ Ġ* Ġallowing Ġin essential Ġwords Ġto Ġbe Ġel ided Ġwhen Ġthey Ġwould Ġbe Ċĉĉ Ġ* Ġgram matically Ġawk ward . Ċĉĉ Ġ*/ Ċĉ ĉ DOUBLE _ QUEST ION _ MARK (" âģ ĩ "), ĊĊĉ ĉ /** Ċĉĉ Ġ* ĠAn Ġellipsis Ġ( âĢ¦ ) Ġindicates Ġthat Ġa Ġsingle Ġtoken Ġshould Ġbe Ġconsumed Ġfrom Ċĉĉ Ġ* Ġthe ĠAv ail Ġsource Ġcode Ġ( tokens Ġare Ġproduced Ġfrom Ġthe Ġactual Ġfile Ċĉĉ Ġ* Ġcontent Ġvia Ġ[ A _ Lexer ] s ). Ġ ĠThere Ġare Ġa Ġfew Ġvariants : Ċĉĉ Ġ* Ċĉĉ Ġ* Ġ Ġ* ĠIf Ġleft Ġun ad orn ed , Ġit Ġcreates Ġa Ġ[ Raw Keyword Token Argument ], Ġwhich Ċĉĉ Ġ* ĠĠĠ Ġmatches Ġa Ġsingle Ġ[ A _ Token ] Ġof Ġkind Ġ[ TokenType . KEYWORD ]. Ċĉĉ Ġ* Ġ Ġ* ĠIf Ġfollowed Ġby Ġan Ġ[ OCT OTH OR P ] Ġ(# ), Ġit Ġcreates Ġa Ċĉĉ Ġ* ĠĠĠ Ġ[ Raw Token Argument ], Ġwhich Ġmatches Ġa Ġsingle Ġ[ A _ Token ] Ġof Ġkind Ċĉĉ Ġ* ĠĠĠ Ġ[ TokenType . LITERAL ]. Ċĉĉ Ġ* Ġ Ġ* ĠIf Ġfollowed Ġby Ġan Ġ[ EXCL AM ATION _ MARK ] Ġ(! ), Ġit Ġcreates Ġa Ċĉĉ Ġ* ĠĠĠ Ġ[ Raw Token Argument ], Ġwhich Ġmatches Ġa Ġsingle Ġ[ A _ Token ] Ġof Ġany Ġkind Ċĉĉ Ġ* ĠĠĠ Ġexcept Ġ[ TokenType . WH ITES PACE ] Ġor Ġ[ TokenType . COMMENT ]. Ċĉĉ Ġ*/ Ċĉ ĉ EL LI PS IS (" âĢ¦ "), ĊĊĉ ĉ /** Ċĉĉ Ġ* ĠThe Ġex clamation Ġmark Ġ(! ) Ġcan Ġfollow Ġan Ġ[ EL LI PS IS ] Ġ( âĢ¦ ) Ġto Ġcause Ċĉĉ Ġ* Ġcreation Ġof Ġa Ġ[ Raw Token Argument ], Ġwhich Ġmatches Ġany Ġtoken Ġthat Ċĉĉ Ġ* Ġisn 't Ġwhitespace Ġor Ġa Ġcomment . Ċĉĉ Ġ* Ċĉĉ Ġ* ĠWhen Ġit Ġfollows Ġan Ġ[ UNDER SCORE ] Ġ(_ ), Ġit Ġcreates Ġan Ċĉĉ Ġ* Ġ[ Argument For Macro Only ], Ġwhich Ġmatches Ġany Ġ[ A _ Phrase ], Ġeven Ġthose Ġthat Ċĉĉ Ġ* Ġyield ĠâĬ ¤ Ġor ĠâĬ ¥ . Ġ ĠSince Ġthese Ġargument Ġtypes Ġare Ġforbidden Ġfor Ġmethods , Ċĉĉ Ġ* Ġthis Ġconstruct Ġcan Ġonly Ġbe Ġused Ġin Ġmacros , Ġwhere Ġwhat Ġis Ġpassed Ġas Ġan Ċĉĉ Ġ* Ġargument Ġis Ġa Ġ* phrase * Ġyield ing Ġthat Ġtype . Ċĉĉ Ġ* Ċĉĉ Ġ* ĠWhen Ġan Ġex clamation Ġmark Ġfollows Ġa Ġgu ille met Ġgroup , Ġthat Ġgroup Ġmust Ċĉĉ Ġ* Ġcontain Ġan Ġaltern ation . Ġ ĠIf Ġno Ġalternatives Ġproduce Ġa Ġvalue , Ġthe Ċĉĉ Ġ* Ġeffect Ġis Ġto Ġpush Ġa Ġconstant Ġcorresponding Ġwith Ġthe Ġalternative 's Ċĉĉ Ġ* Ġone - based Ġindex Ġin Ġthe Ġaltern ation . Ċĉĉ Ġ* Ċĉĉ Ġ* ĠIf Ġthe Ġex clamation Ġmark Ġfollows Ġa Ġgu ille met Ġgroup Ġthat Ġcontains Ġan Ċĉĉ Ġ* Ġaltern ation Ġwhere Ġat Ġleast Ġone Ġalternative Ġproduces Ġa Ġvalue , Ġit Ċĉĉ Ġ* Ġattempts Ġto Ġparse Ġa Ġseries Ġof Ġalternative Ġphrases . Ġ ĠEach Ġparsed Ċĉĉ Ġ* Ġphrase Ġis Ġnumber ed Ġwith Ġan Ġascending Ġone - based Ġsub script , Ċĉĉ Ġ* Ġrepresenting Ġthe Ġorder Ġin Ġwhich Ġthe Ġphrases Ġoccurred Ġin Ġthe Ġsource . Ċĉĉ Ġ* ĠThe Ġfinal Ġeffect Ġis Ġto Ġpush Ġa Ġsingle Ġtuple Ġwith ĠN Ġelements , Ċĉĉ Ġ* Ġcorresponding Ġto Ġthe ĠN Ġalternatives . Ġ ĠEach Ġelement Ġis Ġitself Ġa Ġtuple Ċĉĉ Ġ* Ġwith Ġan Ġappropriate Ġnumber Ġof Ġarguments Ġfor Ġthat Ġalternative , Ġbut Ċĉĉ Ġ* Ġprece ded Ġby Ġa Ġnatural Ġnumber Ġindicating Ġthe Ġorder Ġof Ġthat Ġphrase Ġin Ċĉĉ Ġ* Ġthe Ġsource . Ċĉĉ Ġ*/ Ċĉ ĉ EXCL AM ATION _ MARK (" ! "), ĊĊĉ ĉ /** Ċĉĉ Ġ* ĠAn Ġoct oth orp Ġ(# ) Ġafter Ġan Ġ[ EL LI PS IS ] Ġ( âĢ¦ ) Ġindicates Ġthat Ġa Ċĉĉ Ġ* Ġwhole - number - valu ed Ġliteral Ġtoken Ġshould Ġbe Ġconsumed Ġfrom Ġthe ĠAv ail Ċĉĉ Ġ* Ġsource Ġcode Ġat Ġthis Ġposition . Ġ ĠThis Ġis Ġaccomp lished Ġthrough Ġthe Ġuse Ċĉĉ Ġ* Ġof Ġa Ġ[ Raw Literal Token Argument ]. Ċĉĉ Ġ*/ Ċĉ ĉ OCT OTH OR P ("# "), ĊĊĉ ĉ /** Ċĉĉ Ġ* ĠAn Ġopen - gu ille met Ġ( Â « ) Ġindicates Ġthe Ġstart Ġof Ġa Ġgroup Ġor Ġother Ċĉĉ Ġ* Ġstructure Ġthat Ġwill Ġeventually Ġend Ġwith Ġa Ġ[ CLOSE _ GU IL LE MET ] Ġ( Â» ). Ċĉĉ Ġ*/ Ċĉ ĉ OPEN _ GU IL LE MET (" Â « "), ĊĊĉ ĉ /** Ċĉĉ Ġ* ĠA Ġquestion Ġmark Ġ( ?) Ġmay Ġfollow Ġa Ġ[ Simple ] Ġexpression , Ġwhich Ġcreates Ċĉĉ Ġ* Ġan Ġ[ Optional ], Ġwhich Ġyields Ġa Ġboolean Ġliteral Ġindicating Ġwhether Ġthe Ċĉĉ Ġ* Ġtoken Ġwas Ġpresent Ġor Ġnot . Ċĉĉ Ġ* Ċĉĉ Ġ* ĠWhen Ġa Ġquestion Ġmark Ġfollows Ġa Ġsimple Ġ[ Group ], Ġi . e ., Ġone Ġthat Ġhas Ġno Ċĉĉ Ġ* Ġ[ DOUBLE _ DAG GER ] Ġ( âĢ ¡ ) Ġand Ġyields Ġno Ġvalues , Ġit Ġcreates Ġan Ġ[ Optional ]. Ċĉĉ Ġ* ĠThis Ġcauses Ġa Ġboolean Ġliteral Ġto Ġbe Ġgenerated Ġat Ġa Ġcall Ġsite , Ċĉĉ Ġ* Ġindicating Ġwhether Ġthe Ġsequence Ġof Ġtokens Ġfrom Ġthat Ġgroup Ġactually Ċĉĉ Ġ* Ġoccurred . Ċĉĉ Ġ* Ċĉĉ Ġ* ĠWhen Ġa Ġquestion Ġmark Ġfollows Ġa Ġ[ Group ] Ġwhich Ġproduces Ġone Ġor Ġmore Ċĉĉ Ġ* Ġvalues , Ġit Ġsimply Ġlimits Ġthat Ġgroup Ġto Ġ[ 0 .. 1 ] Ġoccurrences . Ġ ĠThe Ċĉĉ Ġ* Ġ[ DOUBLE _ DAG GER ] Ġ( âĢ ¡ ) Ġis Ġforbidden Ġhere Ġas Ġwell , Ġbecause Ġthe Ġsequence Ċĉĉ Ġ* Ġafter Ġthe Ġdouble - d agger Ġwould Ġonly Ġever Ġoccur Ġbetween Ġrepet itions , Ċĉĉ Ġ* Ġbut Ġthere Ġcannot Ġbe Ġtwo Ġof Ġthem . Ċĉĉ Ġ*/ Ċĉ ĉ QUEST ION _ MARK (" ? "), ĊĊĉ ĉ /** Ċĉĉ Ġ* ĠA Ġsection Ġsign Ġ( Â§ ) Ġindicates Ġwhere , Ġin Ġthe Ġparsing Ġof Ġa Ġmacro Ċĉĉ Ġ* Ġinvocation , Ġit Ġshould Ġinvoke Ġone Ġof Ġits Ċĉĉ Ġ* Ġ[ prefix &# 3 2 ; functions ][ A _ Macro . prefix Functions ]. Ġ ĠThe Ġorder Ġof Ċĉĉ Ġ* Ġsection Ġsigns Ġin Ġthe Ġmethod Ġname Ġcorresponds Ġwith Ġthe Ġorder Ġof Ġthe Ċĉĉ Ġ* Ġprefix Ġfunctions . Ċĉĉ Ġ* Ċĉĉ Ġ* ĠPrefix Ġfunctions Ġare Ġpassed Ġall Ġarguments Ġthat Ġhave Ġbeen Ġparsed Ġso Ċĉĉ Ġ* Ġfar . Ġ ĠThey Ġcan Ġaccess Ġa Ġfiber - specific Ġvariable , Ċĉĉ Ġ* Ġ[ Special Atom . CLIENT _ DATA _ GLOBAL _ KEY ], Ġwhich Ġallows Ġmanipulation Ġof Ċĉĉ Ġ* Ġthe Ġcurrent Ġvariables Ġthat Ġare Ġin Ġscope , Ġand Ġalso Ġearly Ġparse Ċĉĉ Ġ* Ġrejection Ġbased Ġon Ġwhat Ġhas Ġbeen Ġparsed Ġso Ġfar . Ċĉĉ Ġ*/ Ċĉ ĉ SECTION _ SIGN (" Â§ "), ĊĊĉ ĉ /** Ċĉĉ Ġ* ĠA Ġsingle - d agger Ġ( âĢ ł ) Ġfollowing Ġan Ġ[ UNDER SCORE ] Ġ(_) Ġcauses Ġcreation Ġof Ċĉĉ Ġ* Ġan Ġ[ Argument In Module Scope ]. Ġ ĠThis Ġwill Ġparse Ġan Ġexpression Ġthat Ġdoes Ċĉĉ Ġ* Ġnot Ġuse Ġany Ġvariables Ġin Ġthe Ġlocal Ġscope , Ġthen Ġevaluate Ġit Ġand Ġwrap Ċĉĉ Ġ* Ġit Ġin Ġa Ġ[ literal ][ Literal Token Descriptor ]. Ċĉĉ Ġ*/ Ċĉ ĉ SINGLE _ DAG GER (" âĢ ł "), ĊĊĉ ĉ /** Ċĉĉ Ġ* ĠA Ġspace Ġcharacter Ġsepar ates Ġal phanumeric Ġtokens Ġin Ġa Ġmessage Ġname . Ċĉĉ Ġ*/ Ċĉ ĉ SPACE (" Ġ"), ĊĊĉ ĉ /** Ċĉĉ Ġ* ĠAn Ġ[ Expression ] Ġfollowed Ġby Ġa Ġtil de Ġ(~ ) Ġcauses Ġall Ġ[ Simple ] Ċĉĉ Ġ* Ġexpressions Ġanywhere Ġwithin Ġit Ġto Ġmatch Ġcase - ins ensit ively Ġto Ġthe Ċĉĉ Ġ* Ġtokens Ġle xed Ġfrom Ġthe ĠAv ail Ġsource Ġcode . Ġ ĠAll Ġof Ġthese Ġsimple Ċĉĉ Ġ* Ġexpressions Ġare Ġrequired Ġto Ġbe Ġspecified Ġin Ġlower Ġcase Ġto Ġbreak Ġa Ċĉĉ Ġ* Ġpoint less Ġsym metry Ġabout Ġhow Ġto Ġname Ġthe Ġmethod . Ċĉĉ Ġ*/ Ċĉ ĉ T IL DE (" ~ "), ĊĊĉ ĉ /** Ċĉĉ Ġ* ĠAn Ġunderscore Ġindicates Ġwhere Ġa Ġsub expression Ġshould Ġbe Ġparsed . Ċĉĉ Ġ* Ċĉĉ Ġ* Ġ Ġ* ĠIf Ġun ad orn ed , Ġan Ġ[ Argument ] Ġis Ġcreated , Ġwhich Ġexpects Ġan Ċĉĉ Ġ* ĠĠĠ Ġexpression Ġthat Ġyields Ġsomething Ġother Ġthan ĠâĬ ¤ Ġor ĠâĬ ¥ . Ċĉĉ Ġ* Ġ Ġ* ĠIf Ġfollowed Ġby Ġan Ġ[ EXCL AM ATION _ MARK ] Ġ(! ), Ġan Ċĉĉ Ġ* ĠĠĠ Ġ[ Argument For Macro Only ] Ġis Ġconstructed . Ġ ĠThis Ġallows Ġexpressions Ċĉĉ Ġ* ĠĠĠ Ġthat Ġyield ĠâĬ ¤ Ġor ĠâĬ ¥ , Ġwhich Ġare Ġonly Ġpermitted Ġin Ġmacros . Ċĉĉ Ġ* Ġ Ġ* ĠIf Ġfollowed Ġby Ġa Ġ[ SINGLE _ DAG GER ] Ġ( âĢ ł ), Ġthe Ġexpression Ġmust Ġnot Ċĉĉ Ġ* ĠĠĠ Ġattempt Ġto Ġuse Ġany Ġvariables Ġin Ġthe Ġcurrent Ġscope . ĠThe Ġexpression Ċĉĉ Ġ* ĠĠĠ Ġwill Ġbe Ġevaluated Ġat Ġcompile Ġtime , Ġand Ġwrapped Ġin Ġa Ġliteral Ċĉĉ Ġ* ĠĠĠ Ġphrase . Ċĉĉ Ġ* Ġ Ġ* ĠIf Ġfollowed Ġby Ġa Ġ[ UP _ ARROW ] Ġ( âĨ ĳ ), Ġa Ċĉĉ Ġ* ĠĠĠ Ġ[ variable &# 3 2 ; use &# 3 2 ; phrase ][ Variable Use Phrase Descriptor ] Ġmust Ġbe Ċĉĉ Ġ* ĠĠĠ Ġsupplied , Ġwhich Ġis Ġconverted Ġinto Ġa Ċĉĉ Ġ* ĠĠĠ Ġ[ reference &# 3 2 ; phrase ][ Reference Phrase Descriptor ]. Ċĉĉ Ġ*/ Ċĉ ĉ UNDER SCORE ("_ "), ĊĊĉ ĉ /** Ċĉĉ Ġ* ĠIf Ġan Ġup - arrow Ġ( âĨ ĳ ) Ġfollows Ġan Ġ[ UNDER SCORE ], Ġa Ġ[ Variable Quote ] Ġis Ċĉĉ Ġ* Ġcreated , Ġwhich Ġexpects Ġa Ġ[ Variable Use Phrase Descriptor ], Ġwhich Ġwill Ġbe Ċĉĉ Ġ* Ġautomatically Ġconverted Ġinto Ġa Ċĉĉ Ġ* Ġ[ reference &# 3 2 ; phrase ][ Reference Phrase Descriptor ]. Ċĉĉ Ġ*/ Ċĉ ĉ UP _ ARROW (" âĨ ĳ "), ĊĊĉ ĉ /** Ċĉĉ Ġ* ĠThe Ġvertical Ġbar Ġ( |) Ġsepar ates Ġalternatives Ġwithin Ġan Ġ[ Altern ation ]. Ċĉĉ Ġ* ĠThe Ġalternatives Ġmay Ġbe Ġ[ Simple ] Ġexpressions , Ġor Ġsimple Ġ[ Group ] s Ċĉĉ Ġ* Ġ( having Ġno Ġdouble - d agger , Ġand Ġyield ing Ġno Ġargument Ġvalues ). Ċĉĉ Ġ*/ Ċĉ ĉ VERTICAL _ BAR ("| "); ĊĊĉ ĉ /** ĠThe ĠAv ail Ġ[ A _ String ] Ġden oting Ġthis Ġmet ach ar acter . Ġ*/ Ċĉ ĉ val Ġstring : ĠA _ String Ġ= Ġstring From ( java String ). make Shared (). also Ġ{ Ċĉĉ ĉ assert ( it . tuple Size Ġ== Ġ 1 ) Ċĉ ĉ } ĊĊĉ ĉ /** ĠThe Ġsole Ġcode point Ġ([ Int ]) Ġof Ġthis Ġ[ Met ach ar acter ] Ġinstance . Ġ*/ Ċĉ ĉ val Ġcode point : ĠInt Ġ= Ġstring . tuple Code Point At ( 1 ) ĊĊĉ ĉ comp anion Ġobject Ġ{ Ċĉĉ ĉ /** Ċĉĉĉ Ġ* ĠThis Ġcollect s Ġall Ġmet ach ar acters , Ġincluding Ġspace Ġand Ġcirc led Ċĉĉĉ Ġ* Ġnumbers . Ġ ĠThese Ġare Ġthe Ġcharacters Ġthat Ġcan Ġbe Ġ[ BACK _ QUOTE ] d . Ċĉĉĉ Ġ*/ Ċĉĉ ĉ private Ġval Ġback quot able Code points Ġ= Ġmutable Set Of < Int >() ĊĊĉĉ ĉ // ĠLoad Ġthe Ġset Ġwith Ġmet ach ar acters Ġand Ġcirc led Ġnumbers . Ċĉĉ ĉ init Ġ{ Ċĉĉĉ ĉ back quot able Code points . addAll ( circ led Numbers Map . keys ) Ċĉĉĉ ĉ values (). forEach Ġ{ Ċĉĉĉĉ ĉ back quot able Code points . add ( it . code point ) Ċĉĉĉ ĉ } Ċĉĉ ĉ } ĊĊĉĉ ĉ /** Ċĉĉĉ Ġ* ĠAnswer Ġwhether Ġthe Ġgiven ĠUnicode Ġcode point Ġmay Ġbe Ċĉĉĉ Ġ* Ġ[ back quoted ][ BACK _ QUOTE ] Ċĉĉĉ Ġ* Ċĉĉĉ Ġ* Ġ@ param Ġcode Point Ċĉĉĉ Ġ* ĠĠ ĠThe ĠUnicode Ġcode point Ġto Ġcheck . Ċĉĉĉ Ġ* Ġ@ return Ċĉĉĉ Ġ* ĠĠ ĠWhether Ġthe Ġcharacter Ġcan Ġbe Ġback quoted Ġin Ġa Ġmethod Ġname . Ċĉĉĉ Ġ*/ Ċĉĉ ĉ fun Ġcan Be Back Quoted ( code Point : ĠInt ) Ġ= Ċĉĉĉ ĉ back quot able Code points . contains ( code Point ) Ċĉ ĉ } Ċ ĉ } ĊĊ ĉ init Ġ{ Ċĉ ĉ this . message Name Ġ= Ġmessage Name . make Shared () Ċĉ ĉ val Ġtokenizer Ġ= ĠMessage Splitter Tokenizer ( this . message Name ) Ċĉ ĉ this . message Parts Ġ= Ġtokenizer . canonical Message Parts () Ċĉ ĉ this . message Part Positions Ġ= Ġtokenizer . message Part Positions () Ċĉ ĉ try Ċĉ ĉ { Ċĉĉ ĉ message Part Position Ġ= Ġ 1 Ċĉĉ ĉ root Sequence Ġ= Ġparse Sequence () ĊĊĉĉ ĉ if Ġ(! at End ) Ġ{ Ċĉĉĉ ĉ peek For ( Ċĉĉĉĉ ĉ CLOSE _ GU IL LE MET , Ċĉĉĉĉ ĉ true , Ċĉĉĉĉ ĉ E _ UN BAL ANCED _ GU IL LE ME TS , Ċĉĉĉĉ ĉ " close Ġgu ille met Ġ( Â» ) Ġwith Ġno Ġcorresponding Ġ" Ġ+ Ċĉĉĉĉĉ ĉ " open Ġgu ille met Ġ( Â « )") Ċĉĉĉ ĉ peek For ( Ċĉĉĉĉ ĉ DOUBLE _ DAG GER , Ċĉĉĉĉ ĉ true , Ċĉĉĉĉ ĉ E _ UN BAL ANCED _ GU IL LE ME TS , Ċĉĉĉĉ ĉ " double - d agger Ġ( âĢ ¡ ) Ġoutside Ġof Ġa Ġgroup ") Ċĉĉĉ ĉ throw Malformed Message Exception ( Ċĉĉĉĉ ĉ E _ UN BAL ANCED _ GU IL LE ME TS , Ċĉĉĉĉ ĉ " Encounter ed Ġunexpected Ġcharacter : Ġ$ current Message Part ") Ċĉĉ ĉ } Ċĉ ĉ } Ċĉ ĉ catch Ġ( e : ĠMal formed Message Exception ) Ċĉ ĉ { Ċĉĉ ĉ // ĠAdd Ġcontext ual Ġtext Ġand Ġre throw Ġit . Ċĉĉ ĉ throw ĠMal formed Message Exception ( e . errorCode ) Ċĉĉ ĉ { Ċĉĉĉ ĉ build String Ġ{ Ċĉĉĉĉ ĉ append ( e . describe Problem ()) Ċĉĉĉĉ ĉ append (". ĠSee Ġarrow Ġ( ") Ċĉĉĉĉ ĉ append ( Compiler Diagnostics . error Indicator Symbol ) Ċĉĉĉĉ ĉ append (" ) Ġin : Ġ\" ") Ċĉĉĉĉ ĉ val Ġcharacter Index Ġ= Ċĉĉĉĉĉ ĉ if Ġ( message Part Position Ġ> Ġ 0 ) Ċĉĉĉĉĉĉ ĉ if Ġ(! at End ) Ċĉĉĉĉĉĉĉ ĉ message Part Positions [ message Part Position Ġ- Ġ 1 ] Ċĉĉĉĉĉĉ ĉ else Ġmessage Name . tuple Size Ġ+ Ġ 1 Ċĉĉĉĉĉ ĉ else Ġ 0 Ċĉĉĉĉ ĉ val Ġbefore Ġ= Ġmessage Name . copy String From To Can Destroy ( Ċĉĉĉĉĉĉ 1 , Ġcharacter Index Ġ- Ġ 1 , Ġfalse ) Ċĉĉĉĉ ĉ val Ġafter Ġ= Ġmessage Name . copy String From To Can Destroy ( Ċĉĉĉĉĉ ĉ character Index , Ġmessage Name . tuple Size , Ġfalse ) Ċĉĉĉĉ ĉ append ( before . as Native String ()) Ċĉĉĉĉ ĉ append ( Compiler Diagnostics . error Indicator Symbol ) Ċĉĉĉĉ ĉ append ( after . as Native String ()) Ċĉĉĉĉ ĉ append ('" ') Ċĉĉĉ ĉ } Ċĉĉ ĉ } Ċĉ ĉ } Ċ ĉ } ĊĊ ĉ /** Ċĉ Ġ* ĠDump Ġdebugging Ġinformation Ġabout Ġthis Ġ` Message Splitter ` Ġto Ġthe Ċĉ Ġ* Ġspecified Ġ[ builder ][ StringBuilder ]. Ċĉ Ġ* Ċĉ Ġ* Ġ@ param Ġbuilder Ċĉ Ġ* ĠĠ ĠThe Ġaccumulator . Ċĉ Ġ*/ Ċ ĉ private Ġfun Ġdump For Debug ( builder : ĠStringBuilder ) Ġ= Ġwith ( builder ) Ġ{ Ċĉ ĉ append ( message Name . as Native String ()) Ċĉ ĉ append ("\ n ------ \ n ") Ċĉ ĉ message Parts . forEach Ġ{ Ċĉĉ ĉ append ("\ t ${ it . as Native String () }\ n ") Ċĉ ĉ } Ċ ĉ } ĊĊ ĉ /** Ċĉ Ġ* ĠAnswer Ġthe Ġ 1 - based Ġposition Ġof Ġthe Ġcurrent Ġmessage Ġpart Ġin Ġthe Ġmessage Ċĉ Ġ* Ġname . Ċĉ Ġ* Ċĉ Ġ* Ġ@ return Ċĉ Ġ* ĠĠ ĠThe Ġcurrent Ġ 1 - based Ġposition Ġin Ġthe Ġmessage Ġname . Ċĉ Ġ*/ Ċ ĉ private Ġval Ġposition In Name Ċĉ ĉ get () Ġ= Ċĉĉ ĉ if Ġ( at End ) Ġmessage Name . tuple Size Ċĉĉ ĉ else Ġmessage Part Positions [ message Part Position Ġ- Ġ 1 ] ĊĊ ĉ /** Ċĉ Ġ* ĠAnswer Ġwhether Ġparsing Ġhas Ġreached Ġthe Ġend Ġof Ġthe Ġmessage Ġparts . Ċĉ Ġ* Ċĉ Ġ* Ġ@ return Ċĉ Ġ* ĠĠ Ġ` true ` Ġif Ġthe Ġcurrent Ġposition Ġhas Ġconsumed Ġthe Ġlast Ġmessage Ġpart . Ċĉ Ġ*/ Ċ ĉ private Ġval Ġat End Ġget () Ġ= Ġmessage Part Position Ġ> Ġmessage Parts . size ĊĊ ĉ /** Ċĉ Ġ* ĠAnswer Ġthe Ġcurrent Ġmessage Ġpart , Ġor Ġ` null ` Ġif Ġwe Ġare Ġ[ at End ]. Ġ ĠDo Ġnot Ċĉ Ġ* Ġconsume Ġthe Ġmessage Ġpart . Ċĉ Ġ* Ċĉ Ġ* Ġ@ return Ċĉ Ġ* ĠĠ ĠThe Ġcurrent Ġmessage Ġpart Ġor Ġ` null `. Ċĉ Ġ*/ Ċ ĉ private Ġval Ġcurrent Message Part OrNull Ċĉ ĉ get () Ġ= Ġif Ġ( at End ) Ġnull Ġelse Ġmessage Parts [ message Part Position Ġ- Ġ 1 ] ĊĊ ĉ /** Ċĉ Ġ* ĠAnswer Ġthe Ġcurrent Ġmessage Ġpart . Ġ ĠWe Ġmust Ġnot Ġbe Ġ[ at End ]. Ġ ĠDo Ċĉ Ġ* Ġnot Ġconsume Ġthe Ġmessage Ġpart . Ċĉ Ġ* Ċĉ Ġ* Ġ@ return Ċĉ Ġ* ĠĠ ĠThe Ġcurrent Ġmessage Ġpart . Ċĉ Ġ*/ Ċ ĉ private Ġval Ġcurrent Message Part Ċĉ ĉ get (): ĠA _ String Ġ{ Ċĉĉ ĉ assert (! at End ) Ċĉĉ ĉ return Ġmessage Parts [ message Part Position Ġ- Ġ 1 ] Ċĉ ĉ } ĊĊ ĉ /** Ċĉ Ġ* ĠPretty - print Ġa Ġsend Ġof Ġthis Ġmessage Ġwith Ġgiven Ġargument Ġphrases . Ċĉ Ġ* Ċĉ Ġ* Ġ@ param Ġsend Phrase Ċĉ Ġ* ĠĠ ĠThe Ġ[ send &# 3 2 ; phrase ][ Send Phrase Descriptor ] Ġthat Ġis Ġbeing Ġprinted . Ċĉ Ġ* Ġ@ param Ġbuilder Ċĉ Ġ* ĠĠ ĠA Ġ[ StringBuilder ] Ġon Ġwhich Ġto Ġpretty - print Ġthe Ġsend Ġof Ġmy Ġmessage Ġwith Ċĉ Ġ* ĠĠ Ġthe Ġgiven Ġarguments . Ċĉ Ġ* Ġ@ param Ġindent Ċĉ Ġ* ĠĠ ĠThe Ġcurrent Ġindentation Ġlevel . Ċĉ Ġ*/ Ċ ĉ fun Ġprint Send Node On Indent ( Ċĉ ĉ send Phrase : ĠA _ Phrase , Ċĉ ĉ builder : ĠStringBuilder , Ċĉ ĉ indent : ĠInt Ċ ĉ ) Ġ{ Ċĉ ĉ builder . append (' Â « ') Ċĉ ĉ root Sequence . print With Arguments ( Ċĉĉ ĉ send Phrase . arguments ListNode . expressions Tuple . iterator (), Ċĉĉ ĉ builder , Ċĉĉ ĉ indent ) Ċĉ ĉ builder . append (' Â» ') Ċ ĉ } ĊĊ ĉ /** Ċĉ Ġ* ĠAnswer Ġa Ġ[ tuple ][ Tuple Descriptor ] Ġof ĠAv ail Ġ[ inte gers ][ Integer Descriptor ] Ċĉ Ġ* Ġdescribing Ġhow Ġto Ġparse Ġthis Ġmessage . ĠSee Ġ` Message Splitter ` Ġand Ċĉ Ġ* Ġ[ Parsing Operation ] Ġfor Ġan Ġunderstanding Ġof Ġthe Ġparse Ġinstructions . Ċĉ Ġ* Ċĉ Ġ* Ġ@ param Ġphrase Type Ċĉ Ġ* ĠĠ ĠThe Ġphrase Ġtype Ġ( yield ing Ġa Ġtuple Ġtype ) Ġfor Ġthis Ġsignature . Ċĉ Ġ* Ġ@ return Ċĉ Ġ* ĠĠ ĠThe Ġtuple Ġof Ġintegers Ġencoding Ġparse Ġinstructions Ġfor Ġthis Ġmessage Ġand Ċĉ Ġ* ĠĠ Ġargument Ġtypes . Ċĉ Ġ*/ Ċ ĉ fun Ġinstructions Tuple For ( phrase Type : ĠA _ Type ): ĠA _ Tuple Ġ{ Ċĉ ĉ val Ġgenerator Ġ= ĠInstruction Generator () Ċĉ ĉ root Sequence . emit On ( phrase Type , Ġgenerator , ĠWrap State . PUSH ED _ LIST ) Ċĉ ĉ generator . optimize Instructions () Ċĉ ĉ return Ġgenerator . instructions Tuple () Ċ ĉ } ĊĊ ĉ /** Ċĉ Ġ* ĠAnswer Ġa Ġ[ List ] Ġof Ġ[ Expression ] Ġobjects Ġthat Ġcorre lates Ġwith Ġthe Ċĉ Ġ* Ġ[ parsing &# 3 2 ; instructions ][ instructions Tuple For ] Ġgenerated Ġfor Ġthe Ċĉ Ġ* Ġmessage Ġname Ġand Ġthe Ġprovided Ġsignature Ġtuple Ġtype . ĠNote Ġthat Ġthe Ġlist Ġis Ċĉ Ġ* Ġ 0 - based Ġand Ġthe Ġtuple Ġis Ġ 1 - based . Ċĉ Ġ* Ċĉ Ġ* Ġ@ param Ġphrase Type Ċĉ Ġ* ĠĠ ĠThe Ġphrase Ġtype Ġ( yield ing Ġa Ġtuple Ġtype ) Ġfor Ġthis Ġsignature . Ċĉ Ġ* Ġ@ return Ċĉ Ġ* ĠĠ ĠA Ġlist Ġthat Ġindicates Ġthe Ġorigin Ġ[ Expression ] Ġof Ġeach Ċĉ Ġ* ĠĠ Ġ[ Parsing Operation ]. Ċĉ Ġ*/ Ċ ĉ private Ġfun Ġorigin Expressions For ( phrase Type : ĠA _ Type ): ĠList < Expression > Ġ{ Ċĉ ĉ val Ġgenerator Ġ= ĠInstruction Generator () Ċĉ ĉ root Sequence . emit On ( phrase Type , Ġgenerator , ĠWrap State . PUSH ED _ LIST ) Ċĉ ĉ generator . optimize Instructions () Ċĉ ĉ val Ġexpressions Ġ= Ġgenerator . expression List () Ċĉ ĉ assert ( expressions . size Ġ== Ġgenerator . instructions Tuple (). tuple Size ) Ċĉ ĉ return Ġexpressions Ċ ĉ } ĊĊ ĉ /** Ċĉ Ġ* ĠAnswer Ġa Ġ[ String ] Ġcontaining Ġthe Ġmessage Ġname Ġwith Ġan Ġindicator Ġinserted Ċĉ Ġ* Ġto Ġshow Ġwhich Ġarea Ġof Ġthe Ġmessage Ġis Ġbeing Ġparsed Ġby Ġthe Ġgiven Ġprogram Ċĉ Ġ* Ġcounter . Ċĉ Ġ* Ċĉ Ġ* Ġ@ param Ġphrase Type Ċĉ Ġ* ĠĠ ĠThe Ġphrase Ġtype Ġ( yield ing Ġa Ġtuple Ġtype ) Ġfor Ġthis Ġsignature . Ċĉ Ġ* Ġ@ param Ġpc Ċĉ Ġ* ĠĠ ĠThe Ġprogram Ġcounter Ġfor Ġwhich Ġan Ġappropriate Ġannotation Ġshould Ġbe Ċĉ Ġ* ĠĠ Ġinserted Ġinto Ġthe Ġname . Ġ ĠIt 's Ġbetween Ġ 1 Ġand Ġthe Ġnumber Ġof Ġinstructions Ċĉ Ġ* ĠĠ Ġgenerated Ġplus Ġone . Ċĉ Ġ* Ġ@ return ĠThe Ġannotated Ġmessage Ġstring . Ċĉ Ġ*/ Ċ ĉ fun Ġhighlighted Name For ( phrase Type : ĠA _ Type , Ġpc : ĠInt ): ĠString Ġ{ Ċĉ ĉ val Ġstring Ġ= Ġmessage Name . as Native String () Ċĉ ĉ val Ġexpressions Ġ= Ġorigin Expressions For ( phrase Type ) Ċĉ ĉ val Ġzero Based Position Ġ= Ġif Ġ( pc Ġ== Ġexpressions . size Ġ+ Ġ 1 ) Ġstring . length Ċĉ ĉ else Ġexpressions [ pc Ġ- Ġ 1 ]. position In Name Ġ- Ġ 1 Ċĉ ĉ val Ġannotated String Ġ= Ġstring . replace Range ( Ċĉĉ ĉ zero Based Position Ġuntil Ġzero Based Position , Ċĉĉ ĉ Compiler Diagnostics . error Indicator Symbol ) Ċĉ ĉ return Ġstring From ( annotated String ). toString () Ċ ĉ } ĊĊ ĉ /** Ċĉ Ġ* ĠCheck Ġif Ġthere Ġare Ġmore Ġparts Ġand Ġthe Ġnext Ġpart Ġis Ġan Ġoccurrence Ġof Ġthe Ċĉ Ġ* Ġgiven Ġ[ Met ach ar acter ]. Ġ ĠIf Ġso , Ġincrement Ġthe Ġ[ message Part Position ] Ġand Ċĉ Ġ* Ġanswer Ġ` true ` }`, Ġotherwise Ġanswer Ġ` false `. Ċĉ Ġ* Ċĉ Ġ* Ġ@ param Ġmet ach ar acter Ċĉ Ġ* ĠĠ ĠThe Ġ[ Met ach ar acter ] Ġto Ġlook Ġfor . Ċĉ Ġ* Ġ@ return Ċĉ Ġ* ĠĠ ĠWhether Ġthe Ġgiven Ġmet ach ar acter Ġwas Ġfound Ġand Ġconsumed . Ċĉ Ġ*/ Ċ ĉ private Ġfun Ġpeek For ( met ach ar acter : ĠMet ach ar acter ): ĠBoolean Ġ{ Ċĉ ĉ val Ġtoken Ġ= Ġcurrent Message Part OrNull Ċĉ ĉ if Ġ( token Ġ!== Ġnull Ġ&& Ġtoken . equals ( met ach ar acter . string )) Ġ{ Ċĉĉ ĉ message Part Position ++ Ċĉĉ ĉ return Ġtrue Ċĉ ĉ } Ċĉ ĉ return Ġfalse Ċ ĉ } ĊĊ ĉ /** Ċĉ Ġ* ĠCheck Ġif Ġthe Ġnext Ġpart , Ġif Ġany , Ġis Ġthe Ġindicated Ġ[ Met ach ar acter ]. Ċĉ Ġ* ĠDo Ġnot Ġadvance Ġthe Ġ[ message Part Position ] Ġin Ġeither Ġcase . Ċĉ Ġ* Ċĉ Ġ* Ġ@ param Ġmet ach ar acter Ċĉ Ġ* ĠĠ ĠThe Ġ[ Met ach ar acter ] Ġto Ġlook Ġahead Ġfor . Ċĉ Ġ* Ġ@ return Ċĉ Ġ* ĠĠ ĠWhether Ġthe Ġgiven Ġmet ach ar acter Ġis Ġthe Ġnext Ġtoken . Ċĉ Ġ*/ Ċ ĉ private Ġfun Ġpeek A head For ( met ach ar acter : ĠMet ach ar acter ): ĠBoolean Ġ{ Ċĉ ĉ val Ġtoken Ġ= Ġcurrent Message Part OrNull Ċĉ ĉ return Ġtoken Ġ!== Ġnull Ġ&& Ġtoken . equals ( met ach ar acter . string ) Ċ ĉ } ĊĊ ĉ /** Ċĉ Ġ* ĠCheck Ġfor Ġan Ġoccurrence Ġof Ġa Ġcirc led Ġnumber , Ġsign ifying Ġan Ġexplicit Ċĉ Ġ* Ġre number ing Ġof Ġarguments Ġwithin Ġa Ġ[ Sequence ]. Ġ ĠAnswer Ġthe Ġcontained Ċĉ Ġ* Ġnumber , Ġor Ġ- 1 Ġif Ġnot Ġpresent . Ġ ĠIf Ġit Ġwas Ġpresent , Ġalso Ġadvance Ġpast Ġit . Ċĉ Ġ* Ċĉ Ġ* Ġ@ return Ċĉ Ġ* ĠĠ ĠThe Ġvalue Ġof Ġthe Ġparsed Ġexplicit Ġordinal , Ġor Ġ- 1 Ġif Ġthere Ġwas Ġnone . Ċĉ Ġ*/ Ċ ĉ private Ġfun Ġpeek For Explicit Ordinal (): ĠInt Ġ{ Ċĉ ĉ if Ġ(! at End ) Ġ{ Ċĉĉ ĉ val Ġcode Point Ġ= Ġcurrent Message Part . tuple Code Point At ( 1 ) Ċĉĉ ĉ if Ġ( circ led Numbers Map . containsKey ( code Point )) Ġ{ Ċĉĉĉ ĉ // ĠIn Ġtheory Ġwe Ġcould Ġallow Ġmessages Ġto Ġgo Ġpast Ġ ã Ĭ ¿ Ġby Ċĉĉĉ ĉ // Ġallowing Ġa Ġsequence Ġof Ġcirc led Ġsingle Ġdigits Ġ( â ĵ ª - â ĳ ¨ ) Ċĉĉĉ ĉ // Ġthat Ġdoesn 't Ġstart Ġwith Ġ â ĵ ª . Ġ ĠDEF INIT ELY Ġnot Ġworth Ġthe Ċĉĉĉ ĉ // Ġbother Ġfor Ġnow Ġ( 2 0 1 4 . 1 2 . 2 4 ). Ċĉĉĉ ĉ message Part Position ++ Ċĉĉĉ ĉ return Ġcirc led Numbers Map [ code Point ] !! Ċĉĉ ĉ } Ċĉ ĉ } Ċĉ ĉ return Ġ- 1 Ċ ĉ } ĊĊ ĉ /** Ċĉ Ġ* ĠCheck Ġif Ġthe Ġnext Ġtoken Ġis Ġthe Ġgiven Ġmet ach ar acter . Ġ ĠIf Ġit Ġis Ġnot , Ġreturn Ċĉ Ġ* Ġ` false `. Ġ ĠIf Ġit Ġis , Ġconsume Ġit Ġand Ġcheck Ġthe Ġfailure Condition . Ġ ĠIf Ġit 's Ċĉ Ġ* Ġtrue , Ġthrow Ġa Ġ[ Malformed Message Exception ] Ġwith Ġthe Ġgiven ĠerrorCode Ġand Ċĉ Ġ* Ġerror String . Ġ ĠOtherwise Ġreturn Ġ` true `. Ċĉ Ġ* Ċĉ Ġ* Ġ@ param Ġmet ach ar acter Ċĉ Ġ* ĠĠ ĠThe Ġ[ Met ach ar acter ] Ġto Ġlook Ġfor . Ċĉ Ġ* Ġ@ param Ġfailure Condition Ċĉ Ġ* ĠĠ ĠThe Ġ[ Boolean ] Ġto Ġtest Ġif Ġthe Ġmet ach ar acter Ġwas Ġconsumed . Ċĉ Ġ* Ġ@ param ĠerrorCode Ċĉ Ġ* ĠĠ ĠThe Ġerror Ġcode Ġto Ġuse Ġin Ġthe Ġ[ Malformed Message Exception ] Ġif Ġthe Ċĉ Ġ* ĠĠ Ġmet ach ar acter Ġis Ġfound Ġand Ġthe Ġcondition Ġis Ġtrue . Ċĉ Ġ* Ġ@ param Ġerror String Ċĉ Ġ* ĠĠ ĠThe Ġerror String Ġto Ġuse Ġin Ġthe Ġ[ Malformed Message Exception ] Ġif Ġthe Ċĉ Ġ* ĠĠ Ġmet ach ar acter Ġis Ġfound Ġand Ġthe Ġcondition Ġis Ġtrue . Ċĉ Ġ* Ġ@ return Ċĉ Ġ* ĠĠ ĠWhether Ġthe Ġmet ach ar acter Ġwas Ġfound Ġand Ġconsumed . Ċĉ Ġ* Ġ@ throws ĠMal formed Message Exception Ċĉ Ġ* ĠĠ ĠIf Ġthe Ġ[ Met ach ar acter ] Ġwas Ġfound Ġand Ġthe Ġ` failure Condition ` Ġwas Ġtrue . Ċĉ Ġ*/ Ċ ĉ @ Throws ( Malformed Message Exception :: class ) Ċ ĉ private Ġfun Ġpeek For ( Ċĉ ĉ met ach ar acter : ĠMet ach ar acter , Ċĉ ĉ failure Condition : ĠBoolean , Ċĉ ĉ errorCode : ĠAv ail ErrorCode , Ċĉ ĉ error String : ĠString Ċ ĉ ): ĠBoolean Ġ{ Ċĉ ĉ val Ġtoken Ġ= Ġcurrent Message Part OrNull Ċĉ ĉ if Ġ( token Ġ=== Ġnull Ġ|| Ġ! token . equals ( met ach ar acter . string )) Ġ{ Ċĉĉ ĉ return Ġfalse Ċĉ ĉ } Ċĉ ĉ throw Malformed If ( failure Condition , ĠerrorCode , Ġerror String ) Ċĉ ĉ message Part Position ++ Ċĉ ĉ return Ġtrue Ċ ĉ } ĊĊ ĉ /** Ċĉ Ġ* ĠCreate Ġa Ġ[ Sequence ] Ġfrom Ġthe Ġtoken ized Ġmessage Ġname . Ġ ĠStop Ġparsing Ġthe Ċĉ Ġ* Ġsequence Ġwhen Ġwe Ġreach Ġthe Ġend Ġof Ġthe Ġtokens , Ġa Ġclose Ġgu ille met Ġ( Â» ), Ġor Ġa Ċĉ Ġ* Ġdouble - d agger Ġ( âĢ ¡ ). Ċĉ Ġ* Ċĉ Ġ* Ġ@ return Ċĉ Ġ* ĠĠ ĠA Ġ[ Sequence ] Ġexpression Ġparsed Ġfrom Ġthe Ġ[ message Parts ] Ġarray . Ċĉ Ġ* Ġ@ throws ĠMal formed Message Exception Ċĉ Ġ* ĠĠ ĠIf Ġthe Ġmethod Ġname Ġis Ġmalformed . Ċĉ Ġ*/ Ċ ĉ @ Throws ( Malformed Message Exception :: class ) Ċ ĉ private Ġfun Ġparse Sequence (): ĠSequence Ġ{ Ċĉ ĉ val Ġsequence Ġ= ĠSequence ( message Part Position ) Ċĉ ĉ var Ġexpression Ġ= Ġparse Element Or Altern ation () Ċĉ ĉ while Ġ( expression Ġ!== Ġnull ) Ġ{ Ċĉĉ ĉ sequence . add Expression ( expression ) Ċĉĉ ĉ expression Ġ= Ġparse Element Or Altern ation () Ċĉ ĉ } Ċĉ ĉ sequence . check For Cons istent Ordinal s () Ċĉ ĉ return Ġsequence Ċ ĉ } ĊĊ ĉ /** Ċĉ Ġ* ĠParse Ġan Ġelement Ġof Ġa Ġ[ Sequence ]. Ġ ĠThe Ġelement Ġmay Ġbe Ġan Ġ[ Altern ation ]. Ċĉ Ġ* Ċĉ Ġ* Ġ@ return Ċĉ Ġ* ĠĠ ĠThe Ġparsed Ġ[ Expression ], Ġor Ġ` null ` Ġif Ġno Ġexpression Ġcan Ġbe Ġfound . Ċĉ Ġ* Ġ@ throws ĠMal formed Message Exception Ċĉ Ġ* ĠĠ ĠIf Ġthe Ġstart Ġof Ġan Ġ[ Expression ] Ġis Ġfound , Ġbut Ġit 's Ġmalformed . Ċĉ Ġ*/ Ċ ĉ @ Throws ( Malformed Message Exception :: class ) Ċ ĉ private Ġfun Ġparse Element Or Altern ation (): ĠExpression ? Ġ{ Ċĉ ĉ val Ġfirst Expression Ġ= Ġparse Element () Ġ?: Ġreturn Ġnull Ċĉ ĉ ! peek A head For ( VERTICAL _ BAR ) Ġ&& Ġreturn Ġfirst Expression Ċĉ ĉ // ĠIt Ġmust Ġbe Ġan Ġaltern ation . Ċĉ ĉ check Alternative ( first Expression ) Ċĉ ĉ val Ġalternatives Ġ= Ġmutable ListOf < Expression >() Ċĉ ĉ altern atives . add ( first Expression ) Ċĉ ĉ while Ġ( peek For ( VERTICAL _ BAR )) Ġ{ Ċĉĉ ĉ val Ġnext Expression Ġ= Ġparse Element () Ċĉĉĉ ĉ ?: Ġthrow Malformed Message Exception ( Ċĉĉĉĉ ĉ E _ VERTICAL _ BAR _ MUST _ SEPAR ATE _ TOKEN S _ OR _ SIMPLE _ GROUP S , Ċĉĉĉĉ ĉ " Expecting Ġanother Ġtoken Ġor Ġsimple Ġgroup Ġafter Ġthe Ġ" Ġ+ Ċĉĉĉĉĉ ĉ " vertical Ġbar Ġ( |) ") Ċĉĉ ĉ check Alternative ( next Expression ) Ċĉĉ ĉ altern atives . add ( next Expression ) Ċĉ ĉ } Ċĉ ĉ return ĠAltern ation ( first Expression . position In Name , Ġalternatives ) Ċ ĉ } ĊĊ ĉ /** Ċĉ Ġ* ĠParse Ġa Ġsingle Ġelement Ġor Ġreturn Ġ` null `. Ċĉ Ġ* Ċĉ Ġ* Ġ@ return Ċĉ Ġ* ĠĠ ĠA Ġparsed Ġ[ Expression ], Ġwhich Ġis Ġsuitable Ġfor Ġuse Ġwithin Ġan Ċĉ Ġ* ĠĠ Ġ[ Altern ation ] Ġor Ġ[ Sequence ], Ġor Ġ` null ` Ġif Ġnone Ġis Ġavailable Ġat Ġthis Ċĉ Ġ* ĠĠ Ġposition . Ċĉ Ġ* Ġ@ throws ĠMal formed Message Exception Ċĉ Ġ* ĠĠ ĠIf Ġthere Ġappeared Ġto Ġbe Ġan Ġelement Ġ[ Expression ] Ġat Ġthis Ġposition , Ġbut Ċĉ Ġ* ĠĠ Ġit Ġwas Ġmalformed . Ċĉ Ġ*/ Ċ ĉ @ Throws ( Malformed Message Exception :: class ) Ċ ĉ private Ġfun Ġparse Element (): ĠExpression ? Ġ= Ġwhen Ċ ĉ { Ċĉ ĉ at End Ġ-> Ġnull Ċĉ ĉ // ĠTry Ġto Ġparse Ġthe Ġkinds Ġof Ġthings Ġthat Ġdeal Ġwith Ġtheir Ġown Ġsuffix es . Ċĉ ĉ peek A head For ( DOUBLE _ DAG GER ) Ġ|| Ġpeek A head For ( CLOSE _ GU IL LE MET ) Ġ-> Ġnull Ċĉ ĉ peek For ( UNDER SCORE ) Ġ-> Ċĉĉ ĉ parse Optional Explicit Ordinal ( parse Un ders core Element ()) Ċĉ ĉ peek For ( EL LI PS IS ) Ġ-> Ċĉĉ ĉ parse Optional Explicit Ordinal ( parse El lipsis Element ()) Ċĉ ĉ peek For ( OPEN _ GU IL LE MET ) Ġ-> Ċĉĉ ĉ parse Optional Explicit Ordinal ( parse Gu ille met Element ()) Ċĉ ĉ peek For ( SECTION _ SIGN ) Ġ-> Ċĉĉ ĉ Section Checkpoint ( position In Name , Ġ++ numberOf Section Check points ) Ċĉ ĉ else Ġ-> Ġparse Simple () Ċ ĉ } ĊĊ ĉ /** Ċĉ Ġ* ĠParse Ġa Ġ[ Simple ] Ġat Ġthe Ġcurrent Ġposition . Ġ ĠDon 't Ġlook Ġfor Ġany Ġsuffix es . Ċĉ Ġ* Ċĉ Ġ* Ġ@ return Ċĉ Ġ* ĠĠ ĠThe Ġ[ Simple ]. Ċĉ Ġ* Ġ@ throws ĠMal formed Message Exception Ċĉ Ġ* ĠĠ ĠIf Ġthe Ġ[ Simple ] Ġexpression Ġis Ġmalformed . Ċĉ Ġ*/ Ċ ĉ @ Throws ( Malformed Message Exception :: class ) Ċ ĉ private Ġfun Ġparse Simple (): ĠExpression Ġ{ Ċĉ ĉ // ĠFirst , Ġparse Ġthe Ġnext Ġtoken , Ġthen Ġapply Ġa Ġdouble - question - mark , Ċĉ ĉ // Ġtil de , Ġand / or Ġcirc led Ġnumber . Ċĉ ĉ if Ġ( peek For ( Ċĉĉĉ ĉ BACK _ QUOTE , Ċĉĉĉ ĉ at End , Ċĉĉĉ ĉ E _ EXPECTED _ OPERATOR _ AFTER _ BACK QUOTE , Ċĉĉĉ ĉ " Back quote Ġ( `) Ġmust Ġbe Ġfollowed Ġby Ġa Ġspecial Ġ" Ġ+ Ċĉĉĉĉ ĉ " met ach ar acter , Ġspace , Ġor Ġcirc led Ġnumber ")) Ġ{ Ċĉĉ ĉ val Ġtoken Ġ= Ġcurrent Message Part Ċĉĉ ĉ // ĠExpect s Ġmet ach ar acter Ġor Ġspace Ġor Ġcirc led Ġnumber Ġafter Ġback quote . Ċĉĉ ĉ throw Malformed If ( Ċĉĉĉ ĉ token . tuple Size Ġ!= Ġ 1 Ġ|| Ġ! can Be Back Quoted ( Ċĉĉĉĉ ĉ token . tuple Code Point At ( 1 )), Ċĉĉĉ ĉ E _ EXPECTED _ OPERATOR _ AFTER _ BACK QUOTE , Ċĉĉĉ ĉ " Back quote Ġ( `) Ġmust Ġbe Ġfollowed Ġby Ġa Ġspecial Ġ" Ġ+ Ċĉĉĉĉ ĉ " met ach ar acter , Ġspace , Ġor Ġcirc led Ġnumber , Ġnot Ġ($ token )") Ċĉ ĉ } Ċĉ ĉ else Ċĉ ĉ { Ċĉĉ ĉ // ĠParse Ġa Ġregular Ġkeyword Ġor Ġoperator . Ċĉĉ ĉ check Suffix Characters NotIn Suffix () Ċĉ ĉ } Ċĉ ĉ var Ġexpression : ĠExpression Ġ= ĠSimple ( Ċĉĉ ĉ current Message Part , Ċĉĉ ĉ message Part Position , Ċĉĉ ĉ message Part Positions [ message Part Position Ġ- Ġ 1 ]) Ċĉ ĉ message Part Position ++ Ċĉ ĉ if Ġ( peek For ( Ċĉĉĉ ĉ T IL DE , Ċĉĉĉ ĉ ! expression . is LowerCase , Ċĉĉĉ ĉ E _ CASE _ INS ENS ITIVE _ EXPRESSION _ CAN ON IZATION , Ċĉĉĉ ĉ " T ilde Ġ(~ ) Ġmay Ġonly Ġoccur Ġafter Ġa Ġlowercase Ġtoken Ġ" Ġ+ Ċĉĉĉĉ ĉ " or Ġa Ġgroup Ġof Ġlowercase Ġtokens ")) Ġ{ Ċĉĉ ĉ expression Ġ= Ġexpression . apply Case Ins ensitive () Ċĉ ĉ } Ċĉ ĉ if Ġ( peek For ( QUEST ION _ MARK )) Ġ{ Ċĉĉ ĉ val Ġsequence Ġ= ĠSequence ( expression . position In Name ) Ċĉĉ ĉ sequence . add Expression ( expression ) Ċĉĉ ĉ expression Ġ= ĠOptional ( Ċĉĉĉ ĉ expression . position In Name , Ċĉĉĉ ĉ sequence ) Ċĉ ĉ } Ċĉ ĉ else Ġif Ġ( peek For ( DOUBLE _ QUEST ION _ MARK )) Ċĉ ĉ { Ċĉĉ ĉ val Ġsequence Ġ= ĠSequence ( expression . position In Name ) Ċĉĉ ĉ sequence . add Expression ( expression ) Ċĉĉ ĉ expression Ġ= ĠComp let ely Optional ( Ċĉĉĉ ĉ expression . position In Name , Ġsequence ) Ċĉ ĉ } Ċĉ ĉ return Ġexpression Ċ ĉ } ĊĊ ĉ /** Ċĉ Ġ* ĠThe Ġprovided Ġsequence Ġelement Ġor Ġ[ Altern ation ] Ġhas Ġjust Ġbeen Ġparsed . Ċĉ Ġ* ĠLook Ġfor Ġa Ġsuff ixed Ġordinal Ġindicator , Ġmarking Ġthe Ġ[ Expression ] Ġwith Ġthe Ċĉ Ġ* Ġexplicit Ġordinal Ġif Ġindicated . Ċĉ Ġ* Ċĉ Ġ* Ġ@ param Ġexpression Ċĉ Ġ* ĠĠ ĠThe Ġ[ Expression ] Ġthat Ġwas Ġjust Ġparsed . Ċĉ Ġ* Ġ@ return Ċĉ Ġ* ĠĠ ĠA Ġreplacement Ġ[ Expression ] Ġwith Ġits Ġexplicit Ġordinal Ġset Ġif Ġnecessary . Ċĉ Ġ* ĠĠ ĠThis Ġmay Ġbe Ġthe Ġoriginal Ġexpression Ġafter Ġmutation . Ċĉ Ġ*/ Ċ ĉ private Ġfun Ġparse Optional Explicit Ordinal ( expression : ĠExpression ): ĠExpression Ġ{ Ċĉ ĉ val Ġordinal Ġ= Ġpeek For Explicit Ordinal () Ċĉ ĉ if Ġ( ordinal Ġ!= Ġ- 1 ) Ġ{ Ċĉĉ ĉ expression . explicit Ordinal Ġ= Ġordinal Ċĉ ĉ } Ċĉ ĉ return Ġexpression Ċ ĉ } ĊĊ ĉ /** Ċĉ Ġ* ĠCheck Ġthat Ġthe Ġgiven Ġtoken Ġis Ġnot Ġa Ġspecial Ġcharacter Ġthat Ġshould Ġonly Ċĉ Ġ* Ġoccur Ġafter Ġan Ġelement Ġor Ġsub group . Ġ ĠIf Ġit Ġis Ġsuch Ġa Ġspecial Ġcharacter , Ċĉ Ġ* Ġthrow Ġa Ġ[ Malformed Message Exception ] Ġwith Ġa Ġsuitable Ġerror Ġcode Ġand Ċĉ Ġ* Ġmessage . Ċĉ Ġ* Ċĉ Ġ* Ġ@ throws ĠMal formed Message Exception Ċĉ Ġ* ĠĠ ĠIf Ġthe Ġtoken Ġis Ġspecial . Ċĉ Ġ*/ Ċ ĉ @ Throws ( Malformed Message Exception :: class ) Ċ ĉ private Ġfun Ġcheck Suffix Characters NotIn Suffix () Ġ{ Ċĉ ĉ val Ġtoken Ġ= Ġcurrent Message Part OrNull Ġ?: Ġreturn Ċĉ ĉ if Ġ( circ led Numbers Map . containsKey ( token . tuple Code Point At ( 1 ))) Ġ{ Ċĉĉ ĉ throw Malformed Message Exception ( Ċĉĉĉ ĉ E _ IN CON SIST ENT _ ARGUMENT _ RE ORDER ING , Ċĉĉĉ ĉ " Un quoted Ġcirc led Ġnumbers Ġ( â ĵ ª - ã Ĭ ¿ ) Ġmay Ġonly Ġfollow Ġan Ġ" Ġ+ Ċĉĉĉĉ ĉ " argument , Ġan Ġellipsis , Ġor Ġan Ġargument Ġgroup ") Ċĉ ĉ } Ċĉ ĉ peek For ( Ċĉĉ ĉ OCT OTH OR P , Ċĉĉ ĉ true , Ċĉĉ ĉ E _ OCT OTH OR P _ MUST _ FOLLOW _ A _ SIMPLE _ GROUP _ OR _ EL LI PS IS , Ċĉĉ ĉ " An Ġoct oth orp Ġ(# ) Ġmay Ġonly Ġfollow Ġa Ġsimple Ġgroup Ġ( Â « Â» ) Ġ" Ġ+ Ċĉĉĉ ĉ " or Ġan Ġellipsis Ġ( âĢ¦ )") Ċĉ ĉ peek For ( Ċĉĉ ĉ QUEST ION _ MARK , Ċĉĉ ĉ true , Ċĉĉ ĉ E _ QUEST ION _ MARK _ MUST _ FOLLOW _ A _ SIMPLE _ GROUP , Ċĉĉ ĉ " A Ġquestion Ġmark Ġ( ?) Ġmay Ġonly Ġfollow Ġa Ġsimple Ġgroup Ġ" Ġ+ Ċĉĉĉ ĉ "( optional ) Ġor Ġa Ġgroup Ġwith Ġno Ġdouble - d agger Ġ( âĢ ¡ )") Ċĉ ĉ peek For ( Ċĉĉ ĉ T IL DE , Ċĉĉ ĉ true , Ċĉĉ ĉ E _ CASE _ INS ENS ITIVE _ EXPRESSION _ CAN ON IZATION , Ċĉĉ ĉ " T ilde Ġ(~ ) Ġmay Ġonly Ġoccur Ġafter Ġa Ġlowercase Ġ" Ġ+ Ċĉĉĉ ĉ " token Ġor Ġa Ġgroup Ġof Ġlowercase Ġtokens ") Ċĉ ĉ peek For ( Ċĉĉ ĉ VERTICAL _ BAR , Ċĉĉ ĉ true , Ċĉĉ ĉ E _ VERTICAL _ BAR _ MUST _ SEPAR ATE _ TOKEN S _ OR _ SIMPLE _ GROUP S , Ċĉĉ ĉ " A Ġvertical Ġbar Ġ( |) Ġmay Ġonly Ġseparate Ġtokens Ġor Ġsimple Ġ" Ġ+ Ċĉĉĉ ĉ " groups ") Ċĉ ĉ peek For ( Ċĉĉ ĉ EXCL AM ATION _ MARK , Ċĉĉ ĉ true , Ċĉĉ ĉ E _ EXCL AM ATION _ MARK _ MUST _ FOLLOW _ AN _ ALTER N ATION _ GROUP , Ċĉĉ ĉ " An Ġex clamation Ġmark Ġ(! ) Ġmay Ġonly Ġfollow Ġan Ġaltern ation Ġ" Ġ+ Ċĉĉĉ ĉ " group Ġ( or Ġfollow Ġan Ġunderscore Ġfor Ġmacros )") Ċĉ ĉ peek For ( Ċĉĉ ĉ UP _ ARROW , Ċĉĉ ĉ true , Ċĉĉ ĉ E _ UP _ ARROW _ MUST _ FOLLOW _ ARGUMENT , Ċĉĉ ĉ " An Ġup - arrow Ġ( âĨ ĳ ) Ġmay Ġonly Ġfollow Ġan Ġargument ") Ċ ĉ } ĊĊ ĉ /** Ċĉ Ġ* ĠAn Ġopen Ġgu ille met Ġ( Â « ) Ġwas Ġdetected Ġin Ġthe Ġinput Ġstream . Ġ ĠParse Ġa Ġsuitable Ċĉ Ġ* Ġgroup Ġor Ġaltern ation Ġor Ġany Ġother Ġkind Ġof Ġ[ Expression ] Ġthat Ġstarts Ġwith Ċĉ Ġ* Ġan Ġopen Ġgu ille met . Ġ ĠDo Ġnot Ġparse Ġany Ġtrailing Ġcirc led Ġnumbers , Ġwhich Ġare Ċĉ Ġ* Ġused Ġto Ġperm ute Ġargument Ġexpressions Ġwithin Ġa Ġgroup Ġor Ġthe Ġtop Ġlevel . Ċĉ Ġ* Ċĉ Ġ* Ġ@ return Ċĉ Ġ* ĠĠ ĠThe Ġ[ Expression ] Ġthat Ġstarted Ġat Ġthe Ġ[ Met ach ar acter . OPEN _ GU IL LE MET ]. Ċĉ Ġ* Ġ@ throws ĠMal formed Message Exception Ċĉ Ġ* ĠĠ ĠIf Ġthe Ġsub group Ġis Ġmalformed . Ċĉ Ġ*/ Ċ ĉ @ Throws ( Malformed Message Exception :: class ) Ċ ĉ private Ġfun Ġparse Gu ille met Element (): ĠExpression Ġ{ Ċĉ ĉ // ĠWe Ġjust Ġparsed Ġan Ġopen Ġgu ille met . Ġ ĠParse Ġa Ġsub group , Ġeat Ġthe Ċĉ ĉ // Ġmandatory Ġclose Ġgu ille met , Ġand Ġapply Ġany Ġmodifiers Ġto Ġthe Ġgroup . Ċĉ ĉ val Ġstart Of Group Ġ= Ġposition In Name Ċĉ ĉ val Ġbefore D agger Ġ= Ġparse Sequence () Ċĉ ĉ var Ġgroup : ĠGroup Ġ= Ġwhen Ġ{ Ċĉĉ ĉ peek For ( DOUBLE _ DAG GER ) Ġ-> Ġ{ Ċĉĉĉ ĉ val Ġafter D agger Ġ= Ġparse Sequence () Ċĉĉĉ ĉ // ĠCheck Ġfor Ġa Ġsecond Ġdouble - d agger . Ċĉĉĉ ĉ peek For ( Ċĉĉĉĉ ĉ DOUBLE _ DAG GER , Ċĉĉĉĉ ĉ true , Ċĉĉĉĉ ĉ E _ IN CORRECT _ USE _ OF _ DOUBLE _ DAG GER , Ċĉĉĉĉ ĉ " A Ġgroup Ġmust Ġhave Ġat Ġmost Ġone Ġdouble - d agger Ġ( âĢ ¡ )") Ċĉĉĉ ĉ Group ( start Of Group , Ġbefore D agger , Ġafter D agger ) Ċĉĉ ĉ } Ċĉĉ ĉ else Ġ-> ĠGroup ( start Of Group , Ġbefore D agger ) Ċĉ ĉ } ĊĊĉ ĉ if Ġ(! peek For ( CLOSE _ GU IL LE MET )) Ċĉ ĉ { Ċĉĉ ĉ // ĠExpected Ġmatching Ġclose Ġgu ille met . Ċĉĉ ĉ throw Malformed Message Exception ( Ċĉĉĉ ĉ E _ UN BAL ANCED _ GU IL LE ME TS , Ċĉĉĉ ĉ " Expected Ġclose Ġgu ille met Ġ( Â» ) Ġto Ġend Ġgroup ") Ċĉ ĉ } ĊĊĉ ĉ // ĠLook Ġfor Ġa Ġcase - sensitive , Ġthen Ġlook Ġfor Ġa Ġcounter , Ġoptional , Ġor Ċĉ ĉ // Ġcompletely - optional . Ċĉ ĉ if Ġ( peek For ( Ċĉĉ ĉ T IL DE , Ċĉĉ ĉ ! group . is LowerCase , Ċĉĉ ĉ E _ CASE _ INS ENS ITIVE _ EXPRESSION _ CAN ON IZATION , Ċĉĉ ĉ " T ilde Ġ(~ ) Ġmay Ġonly Ġoccur Ġafter Ġa Ġlowercase Ġ" Ġ+ Ċĉĉĉ ĉ " token Ġor Ġa Ġgroup Ġof Ġlowercase Ġtokens ")) Ċĉ ĉ { Ċĉĉ ĉ group Ġ= Ġgroup . apply Case Ins ensitive () Ċĉ ĉ } ĊĊĉ ĉ return Ġwhen Ġ{ Ċĉĉ ĉ peek For ( Ċĉĉĉ ĉ OCT OTH OR P , Ċĉĉĉ ĉ group . underscore Count Ġ> Ġ 0 , Ċĉĉĉ ĉ E _ OCT OTH OR P _ MUST _ FOLLOW _ A _ SIMPLE _ GROUP _ OR _ EL LI PS IS , Ċĉĉĉ ĉ " An Ġoct oth orp Ġ(# ) Ġmay Ġonly Ġfollow Ġa Ġnon - yield ing Ġ" Ġ+ Ċĉĉĉĉ ĉ " group Ġor Ġan Ġellipsis Ġ( âĢ¦ )" Ċĉĉ ĉ ) Ġ-> ĠCounter ( start Of Group , Ġgroup ) Ċĉĉ ĉ peek For ( Ċĉĉĉ ĉ QUEST ION _ MARK , Ċĉĉĉ ĉ group . has D agger , Ċĉĉĉ ĉ E _ QUEST ION _ MARK _ MUST _ FOLLOW _ A _ SIMPLE _ GROUP , Ċĉĉĉ ĉ " A Ġquestion Ġmark Ġ( ?) Ġmay Ġonly Ġfollow Ġa Ġsimple Ġ" Ċĉĉĉĉ ĉ + Ġ" group Ġ( optional ) Ġor Ġa Ġgroup Ġwith Ġarguments Ġ" Ċĉĉĉĉ ĉ + Ġ"( 0 Ġor Ġ 1 Ġoccurrences ), Ġbut Ġnot Ġone Ġwith Ġa Ġ" Ċĉĉĉĉ ĉ + Ġ" double - d agger Ġ( âĢ ¡ ), Ġsince Ġthat Ġsuggests Ġ" Ċĉĉĉĉ ĉ + Ġ" multiple Ġoccurrences Ġto Ġbe Ġseparated " Ċĉĉ ĉ ) Ġ-> Ġwhen Ġ{ Ċĉĉĉ ĉ group . underscore Count Ġ> Ġ 0 Ġ-> Ġ{ Ċĉĉĉĉ ĉ // ĠA Ġcomplex Ġgroup Ġjust Ġgets Ġbounded Ġto Ġ[ 0 .. 1 ] Ġoccurrences . Ċĉĉĉĉ ĉ group . be Optional () Ċĉĉĉĉ ĉ group Ċĉĉĉ ĉ } Ċĉĉĉ ĉ else Ġ-> Ċĉĉĉĉ ĉ // ĠA Ġsimple Ġgroup Ġturns Ġinto Ġan ĠOptional , Ġwhich Ġproduces Ġa Ċĉĉĉĉ ĉ // Ġliteral Ġboolean Ġindicating Ġthe Ġpresence Ġof Ġsuch Ġa Ċĉĉĉĉ ĉ // Ġsub expression . Ċĉĉĉĉ ĉ Optional ( start Of Group , Ġgroup . before D agger ) Ċĉĉ ĉ } Ċĉĉ ĉ peek For ( Ċĉĉĉ ĉ DOUBLE _ QUEST ION _ MARK , Ċĉĉĉ ĉ group . underscore Count Ġ> Ġ 0 Ġ|| Ġgroup . has D agger , Ċĉĉĉ ĉ E _ DOUBLE _ QUEST ION _ MARK _ MUST _ FOLLOW _ A _ TOKEN _ OR _ SIMPLE _ GROUP , Ċĉĉĉ ĉ " A Ġdouble Ġquestion Ġmark Ġ( âģ ĩ ) Ġmay Ġonly Ġfollow Ġ" Ċĉĉĉĉ ĉ + Ġ" a Ġtoken Ġor Ġsimple Ġgroup , Ġnot Ġone Ġwith Ġa Ġ" Ċĉĉĉĉ ĉ + Ġ" double - d agger Ġ( âĢ ¡ ) Ġor Ġarguments " Ċĉĉ ĉ ) Ġ-> ĠComp let ely Optional ( start Of Group , Ġgroup . before D agger ) Ċĉĉ ĉ peek For ( Ċĉĉĉ ĉ EXCL AM ATION _ MARK , Ċĉĉĉ ĉ group . underscore Count Ġ> Ġ 0 Ċĉĉĉĉ ĉ || Ġgroup . has D agger Ċĉĉĉĉ ĉ || Ġgroup . before D agger . expressions . size Ġ!= Ġ 1 Ċĉĉĉĉ ĉ || Ġgroup . before D agger . expressions [ 0 ] Ġ! is ĠAltern ation , Ċĉĉĉ ĉ E _ EXCL AM ATION _ MARK _ MUST _ FOLLOW _ AN _ ALTER N ATION _ GROUP , Ċĉĉĉ ĉ " An Ġex clamation Ġmark Ġ(! ) Ġmay Ġonly Ġfollow Ġan Ġ" Ċĉĉĉĉ ĉ + Ġ" altern ation Ġgroup Ġor Ġ( for Ġmacros ) Ġan Ġ" Ċĉĉĉĉ ĉ + Ġ" underscore " Ċĉĉ ĉ ) Ġ-> Ġ{ Ċĉĉĉ ĉ // ĠThe Ġgu ille met Ġgroup Ġshould Ġhave Ġhad Ġa Ġsingle Ġelement , Ġan Ċĉĉĉ ĉ // Ġaltern ation . Ċĉĉĉ ĉ val Ġaltern ation : ĠAltern ation Ġ= Ċĉĉĉĉ ĉ group . before D agger . expressions [ 0 ]. cast () Ċĉĉĉ ĉ Number ed Choice ( altern ation ) Ċĉĉ ĉ } Ċĉĉ ĉ else Ġ-> Ġgroup Ċĉ ĉ } Ċ ĉ } ĊĊ ĉ /** Ċĉ Ġ* ĠParse Ġan Ġellipsis Ġelement , Ġapplying Ġsuff ixed Ġmodifiers Ġif Ġpresent . Ġ ĠThe Ċĉ Ġ* Ġellipsis Ġhas Ġalready Ġbeen Ġconsumed . Ċĉ Ġ* Ċĉ Ġ* Ġ@ return Ċĉ Ġ* ĠĠ ĠA Ġnewly Ġparsed Ġ[ Raw Token Argument ] Ġor Ġsubclass . Ċĉ Ġ*/ Ċ ĉ private Ġfun Ġparse El lipsis Element (): ĠExpression Ġ{ Ċĉ ĉ val Ġtoken Start Ġ= Ġmessage Part Positions [ message Part Position Ġ- Ġ 2 ] Ċĉ ĉ increment Leaf Argument Count () Ċĉ ĉ return Ġwhen Ġ{ Ċĉĉ ĉ peek For ( EXCL AM ATION _ MARK ) Ġ-> ĠRaw Token Argument ( Ċĉĉĉ ĉ token Start , Ġleaf Argument Count ) Ċĉĉ ĉ peek For ( OCT OTH OR P ) Ġ-> ĠRaw Literal Token Argument ( Ċĉĉĉ ĉ token Start , Ġleaf Argument Count ) Ċĉĉ ĉ else Ġ-> ĠRaw Keyword Token Argument ( Ċĉĉĉ ĉ token Start , Ġleaf Argument Count ) Ċĉ ĉ } Ċ ĉ } ĊĊ ĉ /** Ċĉ Ġ* ĠParse Ġan Ġunderscore Ġelement , Ġapplying Ġsuff ixed Ġmodifiers Ġif Ġpresent . Ġ ĠThe Ċĉ Ġ* Ġunderscore Ġhas Ġalready Ġbeen Ġconsumed . Ċĉ Ġ* Ċĉ Ġ* Ġ@ return Ċĉ Ġ* ĠĠ ĠA Ġnewly Ġparsed Ġ[ Argument ] Ġor Ġsubclass . Ċĉ Ġ*/ Ċ ĉ private Ġfun Ġparse Un ders core Element (): ĠExpression Ġ{ Ċĉ ĉ // ĠCapture Ġthe Ġone - based Ġindex . Ċĉ ĉ val Ġposition In Name Ġ= Ġmessage Part Positions [ message Part Position Ġ- Ġ 2 ] Ċĉ ĉ increment Leaf Argument Count () Ċĉ ĉ return Ġwhen Ġ{ Ċĉĉ ĉ peek For ( SINGLE _ DAG GER ) Ġ-> ĠArgument In Module Scope ( Ċĉĉĉ ĉ position In Name , Ġleaf Argument Count ) Ċĉĉ ĉ peek For ( UP _ ARROW ) Ġ-> ĠVariable Quote ( Ċĉĉĉ ĉ position In Name , Ġleaf Argument Count ) Ċĉĉ ĉ peek For ( EXCL AM ATION _ MARK ) Ġ-> ĠArgument For Macro Only ( Ċĉĉĉ ĉ position In Name , Ġleaf Argument Count ) Ċĉĉ ĉ else Ġ-> ĠArgument ( position In Name , Ġleaf Argument Count ) Ċĉ ĉ } Ċ ĉ } ĊĊ ĉ /** Ċĉ Ġ* ĠIncrement Ġthe Ġnumber Ġof Ġleaf Ġarguments , Ġwhich Ġagre es Ġwith Ġthe Ġnumber Ġof Ċĉ Ġ* Ġnon - back quoted Ġunders cores Ġand Ġel lip ses . Ċĉ Ġ*/ Ċ ĉ private Ġfun Ġincrement Leaf Argument Count () Ġ{ Ċĉ ĉ leaf Argument Count ++ Ċ ĉ } ĊĊ ĉ /** Ċĉ Ġ* ĠReturn Ġthe Ġnumber Ġof Ġarguments Ġa Ġ[ Method Definition Descriptor ] Ċĉ Ġ* Ġimplementing Ġthis Ġname Ġwould Ġaccept . Ġ ĠNote Ġthat Ġthis Ġis Ġnot Ġnecessarily Ċĉ Ġ* Ġthe Ġnumber Ġof Ġunders cores Ġand Ġel lip ses , Ġas Ġa Ġgu ille met Ġgroup Ġmay Ġcontain Ċĉ Ġ* Ġzero Ġor Ġmore Ġunders cores / el lip ses Ġ( and Ġother Ġgu ille met Ġgroups ) Ġbut Ġcount Ċĉ Ġ* Ġas Ġone Ġtop - level Ġargument . Ċĉ Ġ* Ċĉ Ġ* Ġ@ return Ċĉ Ġ* ĠĠ ĠThe Ġnumber Ġof Ġarguments Ġthis Ġmessage Ġtakes . Ċĉ Ġ*/ Ċ ĉ val ĠnumberOf Arguments Ġget () Ġ= Ġroot Sequence . yield ers . size ĊĊ ĉ /** Ċĉ Ġ* ĠCheck Ġthat Ġan Ġ[ implementation ][ Definition Descriptor ] Ġwith Ġthe Ġgiven Ċĉ Ġ* Ġ[ signature ][ FunctionType Descriptor ] Ġis Ġappropriate Ġfor Ġa Ġmessage Ġlike Ċĉ Ġ* Ġthis . Ċĉ Ġ* Ċĉ Ġ* Ġ@ param Ġfunction Type Ċĉ Ġ* ĠĠ ĠA Ġfunction Ġtype . Ċĉ Ġ* Ġ@ param Ġsection Number Ċĉ Ġ* ĠĠ ĠThe Ġ[ Section Checkpoint ]' s Ġsub script Ġif Ġthis Ġis Ġa Ġcheck Ġof Ġa Ċĉ Ġ* ĠĠ Ġ[ macro ][ Macro Descriptor ]' s , Ċĉ Ġ* ĠĠ Ġ[ prefix &# 3 2 ; function ][ A _ Macro . prefix Functions ], Ġotherwise Ġany Ċĉ Ġ* ĠĠ Ġvalue Ġpast Ġthe Ġtotal Ġ[ numberOf Section Check points ] Ġfor Ġa Ġmethod Ġor Ġmacro Ċĉ Ġ* ĠĠ Ġbody . Ċĉ Ġ* Ġ@ throws ĠSignature Exception Ċĉ Ġ* ĠĠĠĠĠĠĠĠ ĠIf Ġthe Ġfunction Ġtype Ġis Ġin appro priate Ġfor Ġthe Ġmethod Ġname . Ċĉ Ġ*/ Ċ ĉ @ Jvm Over loads Ċ ĉ @ Throws ( Signature Exception :: class ) Ċ ĉ fun Ġcheck Implementation Signature ( Ċĉ ĉ function Type : ĠA _ Type , Ċĉ ĉ section Number : ĠInt Ġ= ĠInteger . MAX _ VALUE Ċ ĉ ) Ġ{ Ċĉ ĉ val Ġargs Tuple Type Ġ= Ġfunction Type . args Tuple Type Ċĉ ĉ val Ġsizes Ġ= Ġargs Tuple Type . size Range Ċĉ ĉ val Ġlower Bound Ġ= Ġsizes . lower Bound Ċĉ ĉ val Ġupper Bound Ġ= Ġsizes . upper Bound Ċĉ ĉ if Ġ(! lower Bound . equals ( upper Bound ) Ġ|| Ġ! lower Bound . is Int ) Ġ{ Ċĉĉ ĉ // ĠMethod Ġdefinitions Ġ( and Ġother Ġdefinitions ) Ġshould Ġtake Ġa Ċĉĉ ĉ // Ġdefin ite Ġnumber Ġof Ġarguments . Ċĉĉ ĉ throw Signature Exception ( E _ IN CORRECT _ NUMBER _ OF _ ARGUMENT S ) Ċĉ ĉ } Ċĉ ĉ val Ġlower Bound Int Ġ= Ġlower Bound . extract Int Ċĉ ĉ if Ġ( lower Bound Int Ġ!= ĠnumberOf Arguments ) Ġ{ Ċĉĉ ĉ throw Signature Exception ( E _ IN CORRECT _ NUMBER _ OF _ ARGUMENT S ) Ċĉ ĉ } Ċĉ ĉ root Sequence . check Root Type ( function Type . args Tuple Type , Ġsection Number ) Ċ ĉ } ĊĊ ĉ /** Ċĉ Ġ* ĠAnswer Ġwhether Ġthe Ġgiven Ġlist Ġis Ġcorrectly Ġinternally Ġstructured Ġfor Ġa Ċĉ Ġ* Ġsend Ġof Ġthis Ġmessage . Ġ ĠIt Ġmust Ġrecursively Ġmatch Ġthe Ġexpected Ġnumber Ġof Ċĉ Ġ* Ġarguments , Ġas Ġwell Ġas Ġhave Ġthe Ġexpected Ġper mutations Ġin Ġthe Ġcorresponding Ċĉ Ġ* Ġrecursive Ġ[ Expression ] s . Ċĉ Ġ* Ċĉ Ġ* Ġ@ param Ġlist Ċĉ Ġ* ĠĠ ĠThe Ġ[ list &# 3 2 ; phrase ][ List Phrase Descriptor ] Ġor Ċĉ Ġ* ĠĠ Ġ[ per muted &# 3 2 ; list &# 3 2 ; phrase ][ Per mut edList Phrase Descriptor ] Ġbeing Ċĉ Ġ* ĠĠ Ġchecked Ġfor Ġcon formance Ġwith Ġthe Ġexpected Ġargument Ġstructure . Ċĉ Ġ* Ġ@ return Ċĉ Ġ* ĠĠ ĠWhether Ġthe Ġsupplied Ġlist Ġis Ġrecursively Ġof Ġthe Ġright Ġshape Ġto Ġbe Ġused Ċĉ Ġ* ĠĠ Ġas Ġthe Ġargument Ġlist Ġfor Ġa Ġcall Ġof Ġthis Ġsplit ter 's Ġ[ A _ Bundle ]. Ċĉ Ġ*/ Ċ ĉ fun Ġcheck List Structure ( list : ĠA _ Phrase ): ĠBoolean Ġ= Ċĉ ĉ root Sequence . check List Structure ( list ) ĊĊ ĉ /** Ċĉ Ġ* ĠDoes Ġthe Ġmessage Ġcontain Ġany Ġgroups ? Ċĉ Ġ* Ċĉ Ġ* Ġ@ return Ċĉ Ġ* ĠĠ Ġ` true ` Ġif Ġthe Ġmessage Ġcontains Ġany Ġgroups , Ġ` false ` Ġotherwise . Ċĉ Ġ*/ Ċ ĉ val Ġcontains Groups Ġget () Ġ= Ġroot Sequence . expressions . any ( Expression :: is Group ) ĊĊ ĉ /** Ċĉ Ġ* ĠAnswer Ġwhether Ġthere Ġare Ġany Ġreordered Ġexpressions Ġanywhere Ġinside Ġthis Ċĉ Ġ* Ġmethod Ġname . Ġ ĠRe ordering Ġis Ġspecified Ġby Ġpl acing Ġcirc led Ġnumbers Ċĉ Ġ* Ġ( e . g ., Ġ â ĳ ł , Ġ â ĳ ¡ ) Ġafter Ġall Ġargument - yield ing Ġ[ Expression ] s Ġoccur ring Ġin Ġsome Ċĉ Ġ* Ġ[ Sequence ]. Ġ ĠEither Ġnone Ġor Ġall Ġmust Ġbe Ġnumber ed Ġwithin Ġany Ġsequence , Ġand Ċĉ Ġ* Ġthe Ġnumbers Ġmust Ġbe Ġa Ġnon - identity Ġpermutation Ġ( not Ġsimply Ġ â ĳ ł , Ġ â ĳ ¡ , Ġ â ĳ ¢ , Ċĉ Ġ* Ġetc .). Ċĉ Ġ*/ Ċ ĉ val Ġrecursively Contains Re orders Ċĉ ĉ get () Ġ= Ġroot Sequence . re cursively Contains Re orders ĊĊ ĉ override Ġfun ĠtoString () Ġ= Ġbuild String Ġ{ Ġdump For Debug ( this ) Ġ} ĊĊ ĉ comp anion Ġobject Ġ{ Ċĉ ĉ /** Ċĉĉ Ġ* ĠThe Ġ[ set ][ A _ Set ] Ġof Ġall Ġ[ errors ][ Avail ErrorCode ] Ġthat Ġcan Ġhappen Ċĉĉ Ġ* Ġduring Ġ[ message &# 3 2 ; split ting ][ Message Splitter ]. Ċĉĉ Ġ*/ Ċĉ ĉ val Ġpossible Errors : ĠA _ Set Ġ= Ġset ( Ċĉĉ ĉ E _ IN CORRECT _ ARGUMENT _ TYPE , Ċĉĉ ĉ E _ IN CORRECT _ TYPE _ FOR _ GROUP , Ċĉĉ ĉ E _ IN CORRECT _ TYPE _ FOR _ COMPLEX _ GROUP , Ċĉĉ ĉ E _ IN CORRECT _ TYPE _ FOR _ COUNT ING _ GROUP , Ċĉĉ ĉ E _ IN CORRECT _ TYPE _ FOR _ BOOLEAN _ GROUP , Ċĉĉ ĉ E _ IN CORRECT _ TYPE _ FOR _ NUMBER ED _ CHO ICE , Ċĉĉ ĉ E _ IN CORRECT _ USE _ OF _ DOUBLE _ DAG GER , Ċĉĉ ĉ E _ UN BAL ANCED _ GU IL LE ME TS , Ċĉĉ ĉ E _ METHOD _ NAME _ IS _ NOT _ CAN ON ICAL , Ċĉĉ ĉ E _ ALTER NATIVE _ MUST _ NOT _ CONTAIN _ ARGUMENT S , Ċĉĉ ĉ E _ OCT OTH OR P _ MUST _ FOLLOW _ A _ SIMPLE _ GROUP _ OR _ EL LI PS IS , Ċĉĉ ĉ E _ QUEST ION _ MARK _ MUST _ FOLLOW _ A _ SIMPLE _ GROUP , Ċĉĉ ĉ E _ VERTICAL _ BAR _ MUST _ SEPAR ATE _ TOKEN S _ OR _ SIMPLE _ GROUP S , Ċĉĉ ĉ E _ EXCL AM ATION _ MARK _ MUST _ FOLLOW _ AN _ ALTER N ATION _ GROUP , Ċĉĉ ĉ E _ DOUBLE _ QUEST ION _ MARK _ MUST _ FOLLOW _ A _ TOKEN _ OR _ SIMPLE _ GROUP , Ċĉĉ ĉ E _ CASE _ INS ENS ITIVE _ EXPRESSION _ CAN ON IZATION , Ċĉĉ ĉ E _ EXPECTED _ OPERATOR _ AFTER _ BACK QUOTE , Ċĉĉ ĉ E _ UP _ ARROW _ MUST _ FOLLOW _ ARGUMENT , Ċĉĉ ĉ E _ IN CON SIST ENT _ ARGUMENT _ RE ORDER ING ). make Shared () ĊĊĉ ĉ /** ĠA ĠString Ġcontaining Ġall Ġ 5 1 Ġcirc led Ġnumbers . Ġ*/ Ċĉ ĉ private Ġconst Ġval Ġcirc led Numbers String Ġ= Ċĉĉ ĉ " â ĵ ª â ĳ ł â ĳ ¡ â ĳ ¢ â ĳ £ â ĳ ¤ â ĳ ¥ â ĳ ¦ â ĳ § â ĳ ¨ â ĳ © â ĳ ª â ĳ « â ĳ ¬ â ĳ Ń â ĳ ® â ĳ ¯ " Ġ+ Ċĉĉĉ ĉ " â ĳ ° â ĳ ± â ĳ ² â ĳ ³ ã ī ĳ ã ī Ĵ ã ī ĵ ã ī Ķ ã ī ķ ã ī ĸ ã ī Ĺ ã ī ĺ ã ī Ļ ã ī ļ ã ī Ľ ã ī ľ ã ī Ŀ " Ġ+ Ċĉĉĉ ĉ " ã ī ŀ ã ī Ł ã Ĭ ± ã Ĭ ² ã Ĭ ³ ã Ĭ ´ ã Ĭ µ ã Ĭ ¶ ã Ĭ · ã Ĭ ¸ ã Ĭ ¹ ã Ĭ º ã Ĭ » ã Ĭ ¼ ã Ĭ ½ ã Ĭ ¾ ã Ĭ ¿ " ĊĊĉ ĉ /** ĠHow Ġmany Ġcirc led Ġnumbers Ġare Ġin ĠUnicode . Ġ*/ Ċĉ ĉ private Ġval Ġcirc led Numbers Count Ġ= Ċĉĉ ĉ circ led Numbers String . code Point Count ( 0 , Ġcirc led Numbers String . length ) ĊĊĉ ĉ /** ĠAn Ġarray Ġof Ġthe Ġcirc led Ġnumber Ġcode Ġpoints . Ġ*/ Ċĉ ĉ private Ġval Ġcirc led Number Code Points : ĠInt Array Ġ= Ċĉĉ ĉ circ led Numbers String . code Points (). toList (). to IntArray () ĊĊĉ ĉ /** Ċĉĉ Ġ* ĠAnswer Ġthe ĠUnicode Ġcode point Ġfor Ġa Ġcirc led Ġnumber Ġwith Ġthe Ġgiven Ċĉĉ Ġ* Ġnumeric Ġvalue . Ġ ĠThe Ġvalues Ġfor Ġwhich Ġvalues Ġare Ġavailable Ġin ĠUnicode Ċĉĉ Ġ* Ġare Ġ 0 .. 5 0 . Ċĉĉ Ġ* Ċĉĉ Ġ* Ġ@ param Ġnumber Ċĉĉ Ġ* ĠĠ ĠThe Ġnumber . Ċĉĉ Ġ* Ġ@ return Ċĉĉ Ġ* ĠĠ ĠThe Ġcode point Ġwhich Ġde pict s Ġthat Ġnumber Ġinside Ġa Ġcircle . Ċĉĉ Ġ*/ Ċĉ ĉ fun Ġcirc led Number Code Point ( number : ĠInt ): ĠInt Ġ{ Ċĉĉ ĉ assert ( number Ġin Ġ 0 Ġuntil Ġcirc led Numbers Count ) Ċĉĉ ĉ return Ġcirc led Number Code Points [ number ] Ċĉ ĉ } ĊĊĉ ĉ /** Ċĉĉ Ġ* ĠA Ġmap Ġfrom Ġthe ĠUnicode Ġcode Ġpoints Ġfor Ġthe Ġcirc led Ġnumber Ġcharacters Ċĉĉ Ġ* Ġfound Ġin Ġvarious Ġregions Ġof Ġthe ĠUnicode Ġcode Ġspace . Ċĉĉ Ġ* Ċĉĉ Ġ* Ġ@ see Ġ[ circ led Numbers String ] Ċĉĉ Ġ*/ Ċĉ ĉ private Ġval Ġcirc led Numbers Map Ġ= Ċĉĉ ĉ circ led Number Code Points . with Index (). associate Ġ{ Ġ( i , Ġcp ) Ġ-> Ġcp Ġto Ġi Ġ} ĊĊĉ ĉ /** Ċĉĉ Ġ* ĠThe Ġtuple Ġof Ġall Ġencountered Ġper mutations Ġ( tuples Ġof Ġintegers ) Ġfound Ċĉĉ Ġ* Ġin Ġall Ġmessage Ġnames . Ġ ĠKeep ing Ġa Ġstatic ally Ġaccessible Ġtuple Ġshared Ċĉĉ Ġ* Ġbetween Ġmessage Ġnames Ġallows Ġ[ bundle &# 3 2 ; trees ][ A _ Bundle Tree ] Ġto Ċĉĉ Ġ* Ġeasily Ġget Ġto Ġthe Ġper mutations Ġthey Ġneed Ġwithout Ġhaving Ġa Ġseparate Ċĉĉ Ġ* Ġper - tree Ġstructure . Ċĉĉ Ġ* Ċĉĉ Ġ* ĠThe Ġfield Ġis Ġan Ġ[ Atomic Reference ], Ġand Ġis Ġaccessed Ġin Ġa Ġwait - free Ġway Ċĉĉ Ġ* Ġwith Ġcompare - and - set Ġand Ġretry . Ġ ĠThe Ġtuple Ġitself Ġshould Ġalways Ġbe Ċĉĉ Ġ* Ġmarked Ġas Ġshared . Ġ ĠThis Ġmechanism Ġis Ġthread - safe . Ċĉĉ Ġ*/ Ċĉ ĉ private Ġval Ġper mutations Ġ= ĠAtomic Reference < A _ Tuple >( empty Tuple ) ĊĊĉ ĉ /** Ċĉĉ Ġ* ĠA Ġstatic ally - scoped Ġ[ List ] Ġof Ġunique Ġconstants Ġneeded Ġas Ġoperands Ġof Ċĉĉ Ġ* Ġsome Ġ[ Parsing Operation ] s . Ġ ĠThe Ġinverse Ġ[ Map ] Ġ( but Ġcontaining Ċĉĉ Ġ* Ġone - based Ġindices ) Ġis Ġkept Ġin Ġ# constants Map }. Ċĉĉ Ġ*/ Ċĉ ĉ private Ġval Ġconstants List Ġ= Ġmutable ListOf < Avail Object >() ĊĊĉ ĉ /** Ċĉĉ Ġ* ĠA Ġstatic ally - scoped Ġmap Ġfrom ĠAv ail Ġobject Ġto Ġone - based Ġindex Ġ( into Ċĉĉ Ġ* Ġ[ constants List ], Ġafter Ġadjust ing Ġto Ġa Ġzero - based Ġ[ List ]), Ġfor Ġwhich Ċĉĉ Ġ* Ġsome Ġ[ Parsing Operation ] Ġneeded Ġto Ġhold Ġthat Ġconstant Ġas Ġan Ġoperand . Ċĉĉ Ġ*/ Ċĉ ĉ private Ġval Ġconstants Map Ġ= Ġmutable Map Of < Avail Object , ĠInt >() ĊĊĉ ĉ /** Ċĉĉ Ġ* ĠA Ġlock Ġto Ġprotect Ġ[ constants List ] Ġand Ġ[ constants Map ]. Ċĉĉ Ġ*/ Ċĉ ĉ private Ġval Ġconstants Lock Ġ= ĠRe entrant ReadWrite Lock () ĊĊĉ ĉ /** Ċĉĉ Ġ* ĠAnswer Ġthe Ġpermutation Ġhaving Ġthe Ġgiven Ġone - based Ġindex . Ġ ĠWe Ġneed Ġa Ċĉĉ Ġ* Ġread Ġbarrier Ġhere , Ġbut Ġno Ġlock , Ġsince Ġthe Ġtuple Ġof Ġtuples Ġis Ġonly Ċĉĉ Ġ* Ġappended Ġto , Ġensuring Ġall Ġext ant Ġindices Ġwill Ġalways Ġbe Ġvalid . Ċĉĉ Ġ* Ċĉĉ Ġ* Ġ@ param Ġindex Ċĉĉ Ġ* ĠĠ ĠThe Ġindex Ġof Ġthe Ġpermutation Ġto Ġretrieve . Ċĉĉ Ġ* Ġ@ return Ċĉĉ Ġ* ĠĠ ĠThe Ġpermutation Ġ( a Ġ[ tuple ][ A _ Tuple ] Ġof ĠAv ail Ġintegers ). Ċĉĉ Ġ*/ Ċĉ ĉ fun Ġpermutation AtIndex ( index : ĠInt ): ĠAv ail Object Ġ= Ċĉĉ ĉ per mutations . get (). tuple At ( index ) ĊĊĉ ĉ /** Ċĉĉ Ġ* ĠAnswer Ġthe Ġindex Ġof Ġthe Ġgiven Ġpermutation Ġ( tuple Ġof Ġintegers ), Ġadding Ċĉĉ Ġ* Ġit Ġto Ġthe Ġglobal Ġ[ Message Splitter . constants List ] Ġif Ġnecessary . Ċĉĉ Ġ* Ċĉĉ Ġ* Ġ@ param Ġpermutation Ċĉĉ Ġ* ĠĠ ĠThe Ġpermutation Ġwhose Ġglobally Ġunique Ġone - based Ġindex Ġshould Ġbe Ċĉĉ Ġ* ĠĠ Ġdetermined . Ċĉĉ Ġ* Ġ@ return ĠThe Ġpermutation 's Ġone - based Ġindex . Ċĉĉ Ġ*/ Ċĉ ĉ fun Ġindex For Per mutation ( permutation : ĠA _ Tuple ): ĠInt Ġ{ Ċĉĉ ĉ var Ġchecked Limit Ġ= Ġ 0 Ċĉĉ ĉ while Ġ( true ) Ġ{ Ċĉĉĉ ĉ val Ġbefore Ġ= Ġper mutations . get () Ċĉĉĉ ĉ val Ġnew Limit Ġ= Ġbefore . tuple Size Ċĉĉĉ ĉ for Ġ( i Ġin Ġchecked Limit Ġ+ Ġ 1 .. new Limit ) Ġ{ Ċĉĉĉĉ ĉ if Ġ( before . tuple At ( i ). equals ( permutation )) Ġ{ Ċĉĉĉĉĉ ĉ // ĠAlready Ġexists . Ċĉĉĉĉĉ ĉ return Ġi Ċĉĉĉĉ ĉ } Ċĉĉĉ ĉ } Ċĉĉĉ ĉ val Ġafter Ġ= Ċĉĉĉĉ ĉ before . append Can Destroy ( permutation , Ġfalse ). make Shared () Ċĉĉĉ ĉ if Ġ( per mutations . compare AndSet ( before , Ġafter )) Ġ{ Ċĉĉĉĉ ĉ // ĠAdded Ġit Ġsuccessfully . Ċĉĉĉĉ ĉ return Ġafter . tuple Size Ċĉĉĉ ĉ } Ċĉĉĉ ĉ checked Limit Ġ= Ġnew Limit Ċĉĉ ĉ } Ċĉ ĉ } ĊĊĉ ĉ /** Ċĉĉ Ġ* ĠAnswer Ġthe Ġindex Ġof Ġthe Ġgiven Ġconstant , Ġadding Ġit Ġto Ġthe Ġglobal Ċĉĉ Ġ* Ġ[ constants List ] Ġand Ġ[ constants Map ]} Ġif Ġnecessary . Ċĉĉ Ġ* Ċĉĉ Ġ* Ġ@ param Ġconstant Ċĉĉ Ġ* ĠĠ ĠThe Ġtype Ġto Ġlook Ġup Ġor Ġadd Ġto Ġthe Ġglobal Ġindex . Ċĉĉ Ġ* Ġ@ return Ċĉĉ Ġ* ĠĠ ĠThe Ġone - based Ġindex Ġof Ġthe Ġtype , Ġwhich Ġcan Ġbe Ġretrieved Ġlater Ġvia Ċĉĉ Ġ* ĠĠ Ġ[ constant For Index ]. Ċĉĉ Ġ*/ Ċĉ ĉ fun Ġindex For Constant ( constant : ĠA _ Basic Object ): ĠInt Ġ{ Ċĉĉ ĉ val Ġstrong Constant Ġ= Ġconstant . make Shared () Ċĉĉ ĉ constants Lock . read Ġ{ Ċĉĉĉ ĉ val Ġindex Ġ= Ġconstants Map [ strong Constant ] Ċĉĉĉ ĉ if Ġ( index Ġ!== Ġnull ) Ġ{ Ċĉĉĉĉ ĉ return Ġindex Ċĉĉĉ ĉ } Ċĉĉ ĉ } ĊĊĉĉ ĉ constants Lock . safe Write Ġ{ Ċĉĉĉ ĉ val Ġindex Ġ= Ġconstants Map [ strong Constant ] Ċĉĉĉ ĉ if Ġ( index Ġ!== Ġnull ) Ġ{ Ċĉĉĉĉ ĉ return Ġindex Ċĉĉĉ ĉ } Ċĉĉĉ ĉ assert ( constants Map . size Ġ== Ġconstants List . size ) Ċĉĉĉ ĉ val Ġnew Index Ġ= Ġconstants List . size Ġ+ Ġ 1 Ċĉĉĉ ĉ constants List . add ( strong Constant ) Ċĉĉĉ ĉ constants Map [ strong Constant ] Ġ= Ġnew Index Ċĉĉĉ ĉ return Ġnew Index Ċĉĉ ĉ } Ċĉ ĉ } ĊĊĉ ĉ /** ĠThe Ġposition Ġat Ġwhich Ġtrue Ġis Ġstored Ġin Ġthe Ġ[ constants List ]. Ġ*/ Ċĉ ĉ val Ġindex For True Ġ= Ġindex For Constant ( true Object ) ĊĊĉ ĉ /** ĠThe Ġposition Ġat Ġwhich Ġfalse Ġis Ġstored Ġin Ġthe Ġ[ constants List ]. Ġ*/ Ċĉ ĉ val Ġindex For False Ġ= Ġindex For Constant ( false Object ) ĊĊĉ ĉ /** Ċĉĉ Ġ* ĠAnswer Ġthe Ġ[ Avail Object ] Ġhaving Ġthe Ġgiven Ġone - based Ġindex Ġin Ġthe Ċĉĉ Ġ* Ġstatic Ġ[ constants List ] Ġ[ List ]. Ċĉĉ Ġ* Ċĉĉ Ġ* Ġ@ param Ġindex Ċĉĉ Ġ* ĠĠ ĠThe Ġone - based Ġindex Ġof Ġthe Ġconstant Ġto Ġretrieve . Ċĉĉ Ġ* Ġ@ return Ċĉĉ Ġ* ĠĠ ĠThe Ġ[ Avail Object ] Ġat Ġthe Ġgiven Ġindex . Ċĉĉ Ġ*/ Ċĉ ĉ fun Ġconstant For Index ( index : ĠInt ): ĠAv ail Object Ġ= Ċĉĉ ĉ constants Lock . read Ġ{ Ġconstants List [ index Ġ- Ġ 1 ] Ġ} ĊĊĉ ĉ /** Ċĉĉ Ġ* ĠIf Ġthe Ġcondition Ġis Ġtrue , Ġthrow Ġa Ġ[ Malformed Message Exception ] Ġwith Ċĉĉ Ġ* Ġthe Ġgiven ĠerrorCode Ġand Ġerror String . Ġ ĠOtherwise Ġdo Ġnothing . Ċĉĉ Ġ* Ċĉĉ Ġ* Ġ@ param Ġcondition Ċĉĉ Ġ* ĠĠ ĠThe Ġ[ Boolean ] Ġto Ġtest . Ċĉĉ Ġ* Ġ@ param ĠerrorCode Ċĉĉ Ġ* ĠĠ ĠThe ĠerrorCode Ġto Ġuse Ġin Ġthe Ġ[ Malformed Message Exception ] Ġif Ġthe Ċĉĉ Ġ* ĠĠ Ġcondition Ġwas Ġtrue . Ċĉĉ Ġ* Ġ@ param Ġerror String Ċĉĉ Ġ* ĠĠ ĠThe Ġerror String Ġto Ġuse Ġin Ġthe Ġ[ Malformed Message Exception ] Ġif Ġthe Ċĉĉ Ġ* ĠĠ Ġcondition Ġwas Ġtrue . Ċĉĉ Ġ* Ġ@ throws ĠMal formed Message Exception Ċĉĉ Ġ* ĠĠ ĠIf Ġthe Ġcondition Ġwas Ġtrue . Ċĉĉ Ġ*/ Ċĉ ĉ @ Throws ( Malformed Message Exception :: class ) Ċĉ ĉ private Ġfun Ġthrow Malformed If ( Ċĉĉ ĉ condition : ĠBoolean , Ċĉĉ ĉ errorCode : ĠAv ail ErrorCode , Ċĉĉ ĉ error String : ĠString Ċĉ ĉ ) Ġ{ Ċĉĉ ĉ if Ġ( condition ) Ġ{ Ċĉĉĉ ĉ throw Malformed Message Exception ( errorCode , Ġerror String ) Ċĉĉ ĉ } Ċĉ ĉ } ĊĊĉ ĉ /** Ċĉĉ Ġ* ĠCheck Ġthat Ġan Ġ[ Expression ] Ġto Ġbe Ġused Ġas Ġan Ġalternative Ġin Ġan Ċĉĉ Ġ* Ġ[ Altern ation ] Ġis Ġwell - formed . Ġ ĠNote Ġthat Ġaltern ations Ġmay Ġnot Ġcontain Ċĉĉ Ġ* Ġarguments . Ċĉĉ Ġ* Ċĉĉ Ġ* Ġ@ param Ġexpression Ċĉĉ Ġ* ĠĠ ĠThe Ġalternative Ġto Ġcheck . Ċĉĉ Ġ* Ġ@ throws ĠMal formed Message Exception Ċĉĉ Ġ* ĠĠ ĠIf Ġthe Ġalternative Ġcontains Ġan Ġargument . Ċĉĉ Ġ*/ Ċĉ ĉ @ Throws ( Malformed Message Exception :: class ) Ċĉ ĉ private Ġfun Ġcheck Alternative ( expression : ĠExpression ) Ġ{ Ċĉĉ ĉ throw Malformed If ( Ċĉĉĉ ĉ expression . yield s Value Ġ|| Ġexpression . underscore Count Ġ> Ġ 0 , Ċĉĉĉ ĉ E _ ALTER NATIVE _ MUST _ NOT _ CONTAIN _ ARGUMENT S , Ċĉĉĉ ĉ " Altern atives Ġmust Ġnot Ġcontain Ġarguments ") Ċĉ ĉ } ĊĊĉ ĉ /** Ċĉĉ Ġ* ĠThrow Ġa Ġ[ Signature Exception ] Ġwith Ġthe Ġgiven Ġerror Ġcode . Ċĉĉ Ġ* Ċĉĉ Ġ* Ġ@ param ĠerrorCode Ċĉĉ Ġ* ĠĠĠĠĠĠĠ ĠThe Ġ[ Avail ErrorCode ] Ġthat Ġindicates Ġthe Ġproblem . Ċĉĉ Ġ* Ġ@ throws ĠSignature Exception Ċĉĉ Ġ* ĠĠĠĠĠĠĠĠ ĠAlways , Ġwith Ġthe Ġgiven Ġerror Ġcode . Ċĉĉ Ġ*/ Ċĉ ĉ @ Throws ( Signature Exception :: class ) Ċĉ ĉ fun Ġthrow Signature Exception ( errorCode : ĠAv ail ErrorCode ): ĠNothing Ġ{ Ċĉĉ ĉ throw ĠSignature Exception ( errorCode ) Ċĉ ĉ } ĊĊĉ ĉ /** Ċĉĉ Ġ* ĠThrow Ġa Ġ[ Malformed Message Exception ] Ġwith Ġthe Ġgiven Ġerror Ġcode . Ċĉĉ Ġ* Ċĉĉ Ġ* Ġ@ param ĠerrorCode Ċĉĉ Ġ* ĠĠ ĠThe Ġ[ Avail ErrorCode ] Ġthat Ġindicates Ġthe Ġproblem . Ċĉĉ Ġ* Ġ@ param ĠerrorMessage Ċĉĉ Ġ* ĠĠ ĠA Ġdescription Ġof Ġthe Ġproblem . Ċĉĉ Ġ* Ġ@ throws ĠMal formed Message Exception Ċĉĉ Ġ* ĠĠ ĠAlways , Ġwith Ġthe Ġgiven Ġerror Ġcode Ġand Ġdiagnostic Ġmessage . Ċĉĉ Ġ* Ġ@ return Ċĉĉ Ġ* ĠĠ ĠNothing , Ġbut Ġpret end Ġit 's Ġthe Ġ[ Malformed Message Exception ] Ġthat Ġwas Ċĉĉ Ġ* ĠĠ Ġthrown Ġso Ġthat Ġthe Ġcaller Ġcan Ġpret end Ġto Ġthrow Ġit Ġagain Ġto Ġindicate Ċĉĉ Ġ* ĠĠ Ġto ĠJava Ġthat Ġthis Ġcall Ġtermin ates Ġthe Ġcontrol Ġflow Ġun condition ally . Ċĉĉ Ġ*/ Ċĉ ĉ @ Throws ( Malformed Message Exception :: class ) Ċĉ ĉ fun Ġthrow Malformed Message Exception ( Ċĉĉ ĉ errorCode : ĠAv ail ErrorCode , ĠerrorMessage : ĠString Ċĉ ĉ ): ĠNothing Ġ{ Ċĉĉ ĉ throw ĠMal formed Message Exception ( errorCode ) Ġ{ ĠerrorMessage Ġ} Ċĉ ĉ } ĊĊĉ ĉ /** Ċĉĉ Ġ* ĠAnswer Ġwhether Ġthe Ġspecified Ġcharacter Ġis Ġan Ġoperator Ġcharacter , Ċĉĉ Ġ* Ġspace , Ġunderscore , Ġor Ġellipsis . Ċĉĉ Ġ* Ċĉĉ Ġ* Ġ@ param Ġcp Ċĉĉ Ġ* ĠĠ ĠA ĠUnicode Ġcode point Ġ( an Ġ[ Int ]). Ċĉĉ Ġ* Ġ@ return Ċĉĉ Ġ* ĠĠ Ġ` true ` Ġif Ġthe Ġspecified Ġcharacter Ġis Ġan Ġoperator Ġcharacter , Ġspace , Ċĉĉ Ġ* ĠĠ Ġunderscore , Ġor Ġellipsis ; Ġor Ġ` false ` Ġotherwise . Ċĉĉ Ġ*/ Ċĉ ĉ fun Ġis Un ders core Or Space Or Operator ( cp : ĠInt ) Ġ= Ċĉĉ ĉ cp Ġ== Ġ'_ '. code Ċĉĉĉ ĉ || Ġcp Ġ== Ġ' âĢ¦ '. code Ċĉĉĉ ĉ || Ġcp Ġ== Ġ' Ġ'. code Ċĉĉĉ ĉ || Ġcp Ġ== Ġ'/ '. code Ċĉĉĉ ĉ || Ġis Operator ( cp ) ĊĊĉ ĉ /** Ċĉĉ Ġ* ĠAnswer Ġwhether Ġthe Ġgiven ĠUnicode Ġcode Point Ġis Ġan Ġacceptable Ġoperator . Ċĉĉ Ġ* Ċĉĉ Ġ* Ġ@ param Ġcp Ċĉĉ Ġ* ĠĠ ĠThe Ġcode Point Ġto Ġcheck . Ċĉĉ Ġ* Ġ@ return Ċĉĉ Ġ* ĠĠ ĠWhether Ġthe Ġcode Point Ġcan Ġbe Ġused Ġas Ġan Ġoperator Ġcharacter Ġin Ġa Ċĉĉ Ġ* ĠĠ Ġmethod Ġname . Ċĉĉ Ġ*/ Ċĉ ĉ fun Ġis Operator ( cp : ĠInt ) Ġ= Ċĉĉ ĉ !( Character . is Digit ( cp ) Ċĉĉĉ ĉ || ĠCharacter . is Unicode Identifier Start ( cp ) Ċĉĉĉ ĉ || ĠCharacter . is Space Char ( cp ) Ċĉĉĉ ĉ || ĠCharacter . is Whitespace ( cp ) Ċĉĉĉ ĉ || Ġcp Ġ< Ġ 3 2 Ċĉĉĉ ĉ || Ġcp Ġin Ġ 1 2 7 Ġ.. Ġ 1 5 9 Ċĉĉĉ ĉ || Ġ! Character . isDefined ( cp ) Ċĉĉĉ ĉ || Ġcp Ġ== Ġ'_ '. code Ċĉĉĉ ĉ || Ġcp Ġ== Ġ'" '. code Ċĉĉĉ ĉ || Ġcp Ġ== Ġ'\ u FE FF '. code ) Ċ ĉ } Ċ } Ċ