/* Ċ Ġ* ĠCopyright Ġ( c ) Ġ 2 0 1 2 - 2 0 1 7 ĠThe ĠAN TLR ĠProject . ĠAll Ġrights Ġreserved . Ċ Ġ* ĠUse Ġof Ġthis Ġfile Ġis Ġgoverned Ġby Ġthe ĠBSD Ġ 3 - clause Ġlicense Ġthat Ċ Ġ* Ġcan Ġbe Ġfound Ġin Ġthe ĠLICENSE . txt Ġfile Ġin Ġthe Ġproject Ġroot . Ċ Ġ*/ Ċ Ċ package Ġorg . antlr . v 4 . kotlin runtime Ċ Ċ import Ġcom . strument a . kotlin multi platform . synchronized Ċ import Ġcom . strument a . kotlin multi platform . Weak HashMap Ċ import Ġorg . antlr . v 4 . kotlin runtime . at n . AT N Ċ import Ġorg . antlr . v 4 . kotlin runtime . at n . AT NS im ulator Ċ import Ġorg . antlr . v 4 . kotlin runtime . at n . Parse Info Ċ Ċ type alias ĠCopy On Write ArrayList < E > Ġ= ĠList < E > Ċ Ċ abstract Ġclass ĠRe cognizer < Symbol , ĠAT N Interpreter Ġ: ĠAT NS im ulator > Ġ{ ĊĊĠĠĠ Ġ// ĠTODO Ġshould Ġbe Ġthread Ġsafe Ġbut Ġis Ġnot ! ĊĠĠĠ Ġprivate Ġval Ġ_ listeners Ġ= Ġmutable ListOf < ANT L RE rror Listener >() ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠGet Ġthe ĠAT N Ġinterpreter Ġused Ġby Ġthe Ġre cognizer Ġfor Ġprediction . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ return ĠThe ĠAT N Ġinterpreter Ġused Ġby Ġthe Ġre cognizer Ġfor Ġprediction . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠSet Ġthe ĠAT N Ġinterpreter Ġused Ġby Ġthe Ġre cognizer Ġfor Ġprediction . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġinterpreter ĠThe ĠAT N Ġinterpreter Ġused Ġby Ġthe Ġre cognizer Ġfor ĊĠĠĠĠ Ġ* Ġprediction . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġvar Ġinterpreter : ĠAT N Interpreter ? Ġ= Ġnull ĊĊĠĠĠ Ġ/** ĠIndic ate Ġthat Ġthe Ġre cognizer Ġhas Ġchanged Ġinternal Ġstate Ġthat Ġis ĊĠĠĠĠ Ġ* Ġconsistent Ġwith Ġthe ĠAT N Ġstate Ġpassed Ġin . Ġ ĠThis Ġway Ġwe Ġalways Ġknow ĊĠĠĠĠ Ġ* Ġwhere Ġwe Ġare Ġin Ġthe ĠAT N Ġas Ġthe Ġparser Ġgoes Ġalong . ĠThe Ġrule ĊĠĠĠĠ Ġ* Ġcontext Ġobjects Ġform Ġa Ġstack Ġthat Ġlets Ġus Ġsee Ġthe Ġstack Ġof ĊĠĠĠĠ Ġ* Ġinvoking Ġrules . ĠCombine Ġthis Ġand Ġwe Ġhave Ġcomplete ĠAT N ĊĠĠĠĠ Ġ* Ġconfiguration Ġinformation . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ// ĉ ĉ System . err . println (" setState Ġ"+ at n State ); ĊĠĠĠ Ġ// ĉ ĉ if Ġ( Ġtrace AT N States Ġ) Ġ_ ctx . trace ( at n State ); ĊĠĠĠ Ġvar Ġstate Ġ= Ġ- 1 ĊĊĠĠĠ Ġ/** ĠUsed Ġto Ġprint Ġout Ġtoken Ġnames Ġlike ĠID Ġduring Ġdebugging Ġand ĊĠĠĠĠ Ġ* Ġerror Ġreporting . Ġ ĠThe Ġgenerated Ġparsers Ġimplement Ġa Ġmethod ĊĠĠĠĠ Ġ* Ġthat Ġoverrides Ġthis Ġto Ġpoint Ġto Ġtheir ĠString [] Ġtoken Names . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ get : Deprecated (" Use Ġ{@ link Ġ# get Vocab ulary ()} Ġinstead .") ĊĠĠĠ Ġabstract Ġval Ġtoken Names : ĠArray < String ?> ? ĊĊĠĠĠ Ġabstract Ġval Ġrule Names : ĠArray < String >? ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠGet Ġthe Ġvocabulary Ġused Ġby Ġthe Ġre cognizer . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ return ĠA Ġ[ Vocab ulary ] Ġinstance Ġproviding Ġinformation Ġabout Ġthe ĊĠĠĠĠ Ġ* Ġvocabulary Ġused Ġby Ġthe Ġgrammar . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġabstract Ġval Ġvocabulary : ĠV ocab ulary ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠGet Ġa Ġmap Ġfrom Ġtoken Ġnames Ġto Ġtoken Ġtypes . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠUsed Ġfor ĠXPath Ġand Ġtree Ġpattern Ġcompilation . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġval Ġtoken TypeMap : ĠMap < String , ĠInt > ĊĠĠĠĠĠĠĠ Ġget () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġvocabulary Ġ= Ġvocabulary ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsynchronized ( token TypeMap Cache ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġresult : ĠMap < String , ĠInt >? Ġ= Ġtoken TypeMap Cache [ vocabulary ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( result Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtmp Ġ= ĠHashMap < String , ĠInt >() ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 .. at n . max TokenType ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġliteral Name Ġ= Ġvocabulary . get Literal Name ( i ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( literal Name Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtmp [ literal Name ] Ġ= Ġi ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsymbolic Name Ġ= Ġvocabulary . getS ymbolic Name ( i ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( s ymbolic Name Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtmp [ s ymbolic Name ] Ġ= Ġi ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtmp [" EOF "] Ġ= ĠToken . EOF ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult Ġ= Ġtmp . toMap () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtoken TypeMap Cache [ vocabulary ] Ġ= Ġresult ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġresult ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠGet Ġa Ġmap Ġfrom Ġrule Ġnames Ġto Ġrule Ġindexes . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠUsed Ġfor ĠXPath Ġand Ġtree Ġpattern Ġcompilation . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġval Ġrule Index Map : ĠMap < String , ĠInt > ĊĠĠĠĠĠĠĠ Ġget () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġrule Names Ġ= Ġrule Names ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġthrow ĠUnsupportedOperationException (" The Ġcurrent Ġre cognizer Ġdoes Ġnot Ġprovide Ġa Ġlist Ġof Ġrule Ġnames .") ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġsynchronized ( rule Index Map Cache ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġresult : ĠMap < String , ĠInt >? Ġ= Ġrule Index Map Cache [ rule Names ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( result Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult Ġ= Ġrule Names . map Indexed Ġ{ Ġi , Ġit Ġ-> Ġit Ġto Ġi Ġ}. toMap () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrule Index Map Cache [ rule Names ] Ġ= Ġresult ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġresult !! ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠIf Ġthis Ġre cognizer Ġwas Ġgenerated , Ġit Ġwill Ġhave Ġa Ġserialized ĠAT N ĊĠĠĠĠ Ġ* Ġrepresentation Ġof Ġthe Ġgrammar . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠFor Ġinterpre ters , Ġwe Ġdon 't Ġknow Ġtheir Ġserialized ĠAT N Ġdespite Ġhaving ĊĠĠĠĠ Ġ* Ġcreated Ġthe Ġinterpreter Ġfrom Ġit . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġval Ġserialized AT N : ĠString ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġthrow ĠUnsupportedOperationException (" there Ġis Ġno Ġserialized ĠAT N ") ĊĊĠĠĠ Ġ/** ĠFor Ġdebugging Ġand Ġother Ġpurposes , Ġmight Ġwant Ġthe Ġgrammar Ġname . ĊĠĠĠĠ Ġ* ĠHave ĠAN TLR Ġgenerate Ġan Ġimplementation Ġfor Ġthis Ġmethod . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġabstract Ġval Ġgrammar FileName : ĠString ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠGet Ġthe Ġ[ AT N ] Ġused Ġby Ġthe Ġre cognizer Ġfor Ġprediction . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ return ĠThe Ġ[ AT N ] Ġused Ġby Ġthe Ġre cognizer Ġfor Ġprediction . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġabstract Ġval Ġat n : ĠAT N ĊĊĠĠĠ Ġ/** ĠIf Ġprofiling Ġduring Ġthe Ġparse / lex , Ġthis Ġwill Ġreturn ĠDecision Info Ġrecords ĊĠĠĠĠ Ġ* Ġfor Ġeach Ġdecision Ġin Ġre cognizer Ġin Ġa ĠParse Info Ġobject . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ since Ġ 4 . 3 ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġopen Ġval Ġparse Info : ĠParse Info ? ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġnull ĊĊĊĠĠĠ Ġval Ġerror Listeners : ĠList < out ĠAN TL RE rror Listener > ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġ_ listeners ĊĊĠĠĠ Ġval Ġerror Listener Dispatch : ĠAN TL RE rror Listener ĊĠĠĠĠĠĠĠ Ġget () Ġ= ĠProxy Error Listener ( error Listeners ) ĊĊĠĠĠ Ġ// abstract Ġvar ĠinputStream : ĠChar Stream ? ĊĊĠĠĠ Ġprotected Ġopen Ġvar ĠinputStream : ĠInt Stream ? Ġ= Ġnull ĊĊĠĠĠ Ġabstract Ġfun Ġassign InputStream ( newValue : ĠInt Stream ?) ĊĠĠĠ Ġabstract Ġfun Ġread InputStream (): ĠInt Stream ? ĊĊĊĠĠĠ Ġabstract Ġvar Ġtoken Factory : ĠToken Factory < *> ĊĊĠĠĠ Ġfun Ġget TokenType ( token Name : ĠString ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġt type Ġ= Ġtoken TypeMap . get ( token Name ) ĊĠĠĠĠĠĠĠ Ġreturn Ġt type Ġ?: ĠToken . INVALID _ TYPE ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĠWhat Ġis Ġthe Ġerror Ġheader , Ġnormally Ġline / character Ġposition Ġinformation ? Ġ Ġ*/ ĊĠĠĠ Ġfun Ġget Error Header ( e : ĠRecognition Exception ): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġline Ġ= Ġe . off ending Token !!. line ĊĠĠĠĠĠĠĠ Ġval Ġchar Position In Line Ġ= Ġe . off ending Token !!. char Position In Line ĊĠĠĠĠĠĠĠ Ġreturn Ġ" line Ġ$ line :$ char Position In Line " ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĠHow Ġshould Ġa Ġtoken Ġbe Ġdisplayed Ġin Ġan Ġerror Ġmessage ? ĠThe Ġdefault ĊĠĠĠĠ Ġ* Ġis Ġto Ġdisplay Ġjust Ġthe Ġtext , Ġbut Ġduring Ġdevelopment Ġyou Ġmight ĊĠĠĠĠ Ġ* Ġwant Ġto Ġhave Ġa Ġlot Ġof Ġinformation Ġsp it Ġout . Ġ ĠOverride Ġin Ġthat Ġcase ĊĠĠĠĠ Ġ* Ġto Ġuse Ġt . toString () Ġ( which , Ġfor ĠCommon Token , Ġdump s Ġeverything Ġabout ĊĠĠĠĠ Ġ* Ġthe Ġtoken ). ĠThis Ġis Ġbetter Ġthan Ġforcing Ġyou Ġto Ġoverride Ġa Ġmethod Ġin ĊĠĠĠĠ Ġ* Ġyour Ġtoken Ġobjects Ġbecause Ġyou Ġdon 't Ġhave Ġto Ġgo Ġmodify Ġyour Ġlexer ĊĠĠĠĠ Ġ* Ġso Ġthat Ġit Ġcreates Ġa Ġnew ĠJava Ġtype . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠThis Ġmethod Ġis Ġnot Ġcalled Ġby Ġthe ĠAN TLR Ġ 4 ĠRuntime . ĠSpecific ĊĠĠĠĠ Ġ* Ġimplementations Ġof Ġ[ ANT L RE rror Strategy ] Ġmay Ġprovide Ġa Ġsimilar ĊĠĠĠĠ Ġ* Ġfeature Ġwhen Ġnecessary . ĠFor Ġexample , Ġsee ĊĠĠĠĠ Ġ* Ġ[ Default Error Strategy . getToken Error Display ]. ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Deprecated (""" This Ġmethod Ġis Ġnot Ġcalled Ġby Ġthe ĠAN TLR Ġ 4 ĠRuntime . """) ĊĠĠĠ Ġfun ĠgetToken Error Display ( t : ĠToken ?): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( t Ġ== Ġnull ) Ġreturn Ġ"< no Ġtoken >" ĊĠĠĠĠĠĠĠ Ġvar Ġs : ĠString ? Ġ= Ġt . text ĊĠĠĠĠĠĠĠ Ġif Ġ( s Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġs Ġ= Ġif Ġ( t . type Ġ== ĠToken . EOF ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"< EOF >" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"< " Ġ+ Ġt . type Ġ+ Ġ" >" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġs Ġ= Ġs . replace ("\ n ", Ġ"\\ n ") ĊĠĠĠĠĠĠĠ Ġs Ġ= Ġs . replace ("\ r ", Ġ"\\ r ") ĊĠĠĠĠĠĠĠ Ġs Ġ= Ġs . replace ("\ t ", Ġ"\\ t ") ĊĠĠĠĠĠĠĠ Ġreturn Ġ"' $ s '" ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ@ exception ĠNullPointerException Ġif Ġ` listener ` Ġis Ġ` null `. ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġadd Error Listener ( listener : ĠAN TL RE rror Listener ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( listener Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠNullPointerException (" listener Ġcannot Ġbe Ġnull .") ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ_ listeners . add ( listener ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġremove Error Listener ( listener : ĠAN TL RE rror Listener ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ_ listeners . remove ( listener ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġremove Error Listeners () Ġ{ ĊĠĠĠĠĠĠĠ Ġ_ listeners . clear () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// Ġsubclass Ġneeds Ġto Ġoverride Ġthese Ġif Ġthere Ġare Ġsemp red s Ġor Ġactions ĊĠĠĠ Ġ// Ġthat Ġthe ĠAT N Ġinterp Ġneeds Ġto Ġexecute ĊĠĠĠ Ġopen Ġfun Ġsemp red (_ localctx : ĠRule Context ?, Ġrule Index : ĠInt , Ġaction Index : ĠInt ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġopen Ġfun Ġprec pred ( localctx : ĠRule Context , Ġprecedence : ĠInt ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġaction (_ localctx : ĠRule Context ?, Ġrule Index : ĠInt , Ġaction Index : ĠInt ) Ġ{} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġval ĠEOF Ġ= Ġ- 1 ĊĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġtoken TypeMap Cache Ġ= ĠWeak HashMap < Vocab ulary , ĠMap < String , ĠInt >>() ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġrule Index Map Cache Ġ= ĠWeak HashMap < Array < String >, ĠMap < String , ĠInt >>() ĊĠĠĠ Ġ} Ċ } Ċ