/** Ċ Ġ* ĠCopyright Ġ( C ) Ġ 2 0 2 1 ĠDr . ĠDavid ĠH . ĠA keh ur st Ġ( http :// dr . david . h . ake hur st . net ) Ċ Ġ* Ċ Ġ* ĠLicensed Ġunder Ġthe ĠApache ĠLicense , ĠVersion Ġ 2 . 0 Ġ( the Ġ" License "); Ċ Ġ* Ġyou Ġmay Ġnot Ġuse Ġthis Ġfile Ġexcept Ġin Ġcompliance Ġwith Ġthe ĠLicense . Ċ Ġ* ĠYou Ġmay Ġobtain Ġa Ġcopy Ġof Ġthe ĠLicense Ġat Ċ Ġ* Ċ Ġ* ĠĠĠĠĠĠĠĠ Ġhttp :// www . apache . org / licenses / LICENSE - 2 . 0 Ċ Ġ* Ċ Ġ* ĠUnless Ġrequired Ġby Ġapplicable Ġlaw Ġor Ġagreed Ġto Ġin Ġwriting , Ġsoftware Ċ Ġ* Ġdistributed Ġunder Ġthe ĠLicense Ġis Ġdistributed Ġon Ġan Ġ" AS ĠIS " ĠBASIS , Ċ Ġ* ĠWITHOUT ĠWARRANTIES ĠOR ĠCONDITIONS ĠOF ĠANY ĠKIND , Ġeither Ġexpress Ġor Ġimplied . Ċ Ġ* ĠSee Ġthe ĠLicense Ġfor Ġthe Ġspecific Ġlanguage Ġgoverning Ġpermissions Ġand Ċ Ġ* Ġlimitations Ġunder Ġthe ĠLicense . Ċ Ġ*/ Ċ Ċ package Ġnet . ake hur st . language . ag l . runtime . structure Ċ Ċ import Ġnet . ake hur st . language . ag l . autom aton . Parser State Set Ċ Ċ internal Ġclass ĠLook ahead Set ( ĊĠĠĠ Ġval Ġnumber : ĠInt , ĊĠĠĠ Ġval Ġcontent : ĠSet < Runtime Rule > Ċ ) Ġ{ ĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġval ĠEMPTY Ġ= ĠLook ahead Set (- 1 , Ġempty Set ()) ĊĠĠĠĠĠĠĠ Ġval ĠANY Ġ= ĠLook ahead Set (- 1 , Ġset Of ( Runtime Rule Set . ANY _ LOOK A HEAD )) ĊĠĠĠĠĠĠĠ Ġval ĠE OT Ġ= ĠLook ahead Set (- 2 , Ġset Of ( Runtime Rule Set . END _ OF _ TEXT )) ĊĠĠĠĠĠĠĠ Ġval ĠUP Ġ= ĠLook ahead Set (- 3 , Ġset Of ( Runtime Rule Set . USE _ PARENT _ LOOK A HEAD )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġresolve ( runtime Look ahead : ĠLook ahead Set ): ĠSet < Runtime Rule > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠUP Ġ== Ġruntime Look ahead Ġ-> Ġerror (" Runtime Ġlook ahead Ġmust Ġbe Ġreal Ġlook ahead Ġvalues ") Ġ// TODO : Ġcould Ġremove Ġthis Ġfor Ġspeed , Ġit Ġshould Ġnever Ġhappen ĊĠĠĠĠĠĠĠĠĠĠĠ ĠANY Ġ== Ġthis Ġ-> Ġthis . content ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// null Ġ== Ġruntime Look ahead Ġ-> Ġthis . content ĊĠĠĠĠĠĠĠĠĠĠĠ ĠUP Ġ== Ġthis Ġ-> Ġruntime Look ahead . content ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġresult Ġ= Ġmutable Set Of < Runtime Rule >() ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( rr Ġin Ġthis . content ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( Runtime Rule Set . USE _ PARENT _ LOOK A HEAD Ġ== Ġrr ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult . addAll ( runtime Look ahead . content ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult . add ( rr ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġunion ( autom aton : Parser State Set , Ġlook ahead : ĠLook ahead Set ): ĠLook ahead Set Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġautom aton . create Look ahead Set ( this . content . union ( look ahead . content )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠhashCode (): ĠInt Ġ= Ġnumber ĊĠĠĠ Ġoverride Ġfun Ġequals ( other : ĠAny ?): ĠBoolean Ġ= Ġwhen Ġ{ ĊĠĠĠĠĠĠĠ Ġother Ġis ĠLook ahead Set Ġ-> Ġthis . number Ġ== Ġother . number ĊĠĠĠĠĠĠĠ Ġelse Ġ-> Ġfalse ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠtoString (): ĠString Ġ= Ġ" Look ahead Set {$ number , ${ content }}" ĊĊ Ċ }