package Ġcom . red mad robot . input mask . model . state Ċ Ċ import Ġcom . red mad robot . input mask . model . Next Ċ import Ġcom . red mad robot . input mask . model . State Ċ Ċ /** Ċ Ġ* Ġ### ĠValue State Ċ Ġ* Ċ Ġ* ĠRepresents Ġmandatory Ġcharacters Ġin Ġsquare Ġbrackets Ġ[]. Ċ Ġ* Ċ Ġ* ĠAccept s Ġonly Ġcharacters Ġof Ġown Ġtype Ġ( see Ġ``` State Type ``` ). ĠPut s Ġaccepted Ġcharacters Ġinto Ġthe Ċ Ġ* Ġresult Ġstring . Ċ Ġ* Ċ Ġ* ĠReturns Ġaccepted Ġcharacters Ġas Ġan Ġextracted Ġvalue . Ċ Ġ* Ċ Ġ* Ġ@ see Ġ``` Value State . State Type ``` Ċ Ġ* Ċ Ġ* Ġ@ author Ġta fl an idi Ċ Ġ*/ Ċ class ĠValue State Ġ: ĠState Ġ{ ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ### ĠState Type ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ``` Numeric ``` Ġstands Ġfor Ġ[ 9 ] Ġcharacters ĊĠĠĠĠ Ġ* Ġ``` Literal ``` Ġstands Ġfor Ġ[ a ] Ġcharacters ĊĠĠĠĠ Ġ* Ġ``` Alpha Numeric ``` Ġstands Ġfor Ġ[- ] Ġcharacters ĊĠĠĠĠ Ġ* Ġ``` El lipsis ``` Ġstands Ġfor Ġ[ âĢ¦ ] Ġcharacters ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġsealed Ġclass ĠState Type Ġ{ ĊĠĠĠĠĠĠĠ Ġclass ĠNumeric Ġ: ĠState Type () ĊĠĠĠĠĠĠĠ Ġclass ĠLiteral Ġ: ĠState Type () ĊĠĠĠĠĠĠĠ Ġclass ĠAlpha Numeric Ġ: ĠState Type () ĊĠĠĠĠĠĠĠ Ġclass ĠEl lipsis ( val Ġinherited Type : ĠState Type ) Ġ: ĠState Type () ĊĠĠĠĠĠĠĠ Ġclass ĠCustom ( val Ġcharacter : ĠChar , Ġval Ġcharacter Set : ĠString ) Ġ: ĠState Type () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġval Ġtype : ĠState Type ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠConstructor Ġfor Ġel li pt ical Ġ``` Value State ``` ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġconstructor ( inherited Type : ĠState Type ) Ġ: Ġsuper ( null ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . type Ġ= ĠState Type . El lipsis ( inherited Type ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġconstructor ( child : ĠState ?, Ġtype : ĠState Type ) Ġ: Ġsuper ( child ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . type Ġ= Ġtype ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġaccepts ( character : ĠChar ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ( this . type ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠState Type . Numeric Ġ-> Ġcharacter . is Digit () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠState Type . Literal Ġ-> Ġcharacter . is Letter () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠState Type . Alpha Numeric Ġ-> Ġcharacter . is Letter Or Digit () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠState Type . El lipsis Ġ-> Ġwhen Ġ( this . type . inherited Type ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠState Type . Numeric Ġ-> Ġcharacter . is Digit () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠState Type . Literal Ġ-> Ġcharacter . is Letter () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠState Type . Alpha Numeric Ġ-> Ġcharacter . is Letter Or Digit () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠState Type . Custom Ġ-> Ġthis . type . inherited Type . character Set . contains ( character ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠState Type . Custom Ġ-> Ġthis . type . character Set . contains ( character ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġaccept ( character : ĠChar ): ĠNext ? Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(! this . accept s ( character )) Ġreturn Ġnull ĊĊĠĠĠĠĠĠĠ Ġreturn ĠNext ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . next State (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcharacter , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtrue , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcharacter ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġval Ġis El li pt ical : ĠBoolean ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġwhen Ġ( this . type ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠState Type . El lipsis Ġ-> Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġnext State (): ĠState Ġ= Ġwhen Ġ( this . type ) Ġ{ ĊĠĠĠĠĠĠĠ Ġis ĠState Type . El lipsis Ġ-> Ġthis ĊĠĠĠĠĠĠĠ Ġelse Ġ-> Ġsuper . next State () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠtoString (): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ( this . type ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠState Type . Literal Ġ-> Ġ"[ A ] Ġ-> Ġ" Ġ+ Ġif Ġ( null Ġ== Ġthis . child ) Ġ" null " Ġelse Ġchild . toString () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠState Type . Numeric Ġ-> Ġ"[ 0 ] Ġ-> Ġ" Ġ+ Ġif Ġ( null Ġ== Ġthis . child ) Ġ" null " Ġelse Ġchild . toString () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠState Type . Alpha Numeric Ġ-> Ġ"[ _] Ġ-> Ġ" Ġ+ Ġif Ġ( null Ġ== Ġthis . child ) Ġ" null " Ġelse Ġchild . toString () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠState Type . El lipsis Ġ-> Ġ"[ âĢ¦ ] Ġ-> Ġ" Ġ+ Ġif Ġ( null Ġ== Ġthis . child ) Ġ" null " Ġelse Ġchild . toString () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠState Type . Custom Ġ-> Ġ"[" Ġ+ Ġthis . type . character Ġ+ Ġ"] Ġ-> Ġ" Ġ+ Ġif Ġ( null Ġ== Ġthis . child ) Ġ" null " Ġelse Ġchild . toString () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ Ċ } Ċ