package Ġair acle . air . core . interpreter Ċ Ċ import Ġair acle . air . core . lexer . Air Lexer Ċ import Ġair acle . air . core . lexer . Alpha String Lexer Ċ import Ġair acle . air . core . lexer . Symbol String Lexer Ċ import Ġair acle . air . core . parser . Air Parser Ċ Ċ class ĠPar sers ( ĊĠĠĠ Ġprivate Ġval Ġlexer : ĠAir Lexer , ĊĠĠĠ Ġprivate Ġval Ġparser : ĠAir Parser Ċ ) Ġ: ĠI Parsers Ġ{ ĊĠĠĠ Ġoverride Ġfun Ġdecode FromString ( v : ĠAir Value ): ĠAir Value Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( v Ġis ĠString Value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtokens Ġ= Ġlexer . lex ( v . value ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġparser . parse ( tokens ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠThrowable ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠUnit Value ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠUnit Value ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġencode ToString ( v : ĠAir Value ): ĠAir Value Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠString Value . valueOf ( v . toString ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġpretty Print String ( builder : ĠStringBuilder , Ġstr : ĠString Value ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( Alpha String Lexer . pattern (). matcher ( str . value ). matches ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbuilder . append ( str . value ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġbuilder . append ('" ') ĊĠĠĠĠĠĠĠ Ġfor Ġ( c Ġin Ġstr . value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( c ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ'\\ ' Ġ-> Ġbuilder . append (" \\\\ ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ'\ n ' Ġ-> Ġbuilder . append ("\\ n ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ'\ r ' Ġ-> Ġbuilder . append ("\\ r ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ'\ t ' Ġ-> Ġbuilder . append ("\\ t ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ'"' Ġ-> Ġbuilder . append ("\\ \" ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġbuilder . append ( c ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġbuilder . append ('" ') ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġpretty Print Tuple ( builder : ĠStringBuilder , Ġtuple : ĠTuple Value , Ġindent : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġarray Ġ= Ġtuple . value ĊĠĠĠĠĠĠĠ Ġif Ġ( array . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbuilder . append ("< >") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġkeyword Ġ= Ġarray [ 0 ] ĊĠĠĠĠĠĠĠ Ġif Ġ( parser . config . param Length ( keyword ) Ġ+ Ġ 1 Ġ== Ġarray . size ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( keyword Ġis ĠString Value Ġ&& ĠSymbol String Lexer . pattern (). matcher ( keyword . value ). matches ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbuilder . append ( keyword . value ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( array . size Ġ> Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( array . size Ġ> Ġ 2 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbuilder . append (' Ġ') ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpretty Print Value ( builder , Ġarray [ 1 ], Ġindent ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 2 Ġuntil Ġarray . size ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbuilder . append (' Ġ') ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpretty Print Value ( builder , Ġarray [ i ], Ġindent ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbuilder . append (' ; ') ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpretty Print Value ( builder , Ġkeyword , Ġindent ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 1 Ġuntil Ġarray . size ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbuilder . append (' Ġ') ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpretty Print Value ( builder , Ġarray [ i ], Ġindent ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbuilder . append ("< ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpretty Print Value ( builder , Ġkeyword , Ġindent ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 1 Ġuntil Ġarray . size ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbuilder . append (' Ġ') ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpretty Print Value ( builder , Ġarray [ i ], Ġindent ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbuilder . append (' >') ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġpretty Print List ( builder : ĠStringBuilder , Ġlist : ĠList Value , Ġindent : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġv Ġ= Ġlist . value ĊĠĠĠĠĠĠĠ Ġif Ġ( v . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbuilder . append (" [] ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġbuilder . append ("[ \ n ") ĊĠĠĠĠĠĠĠ Ġval Ġdeeper Ġ= Ġindent Ġ+ Ġ 1 ĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 Ġuntil Ġv . size ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrepeat ( de eper ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbuilder . append (" Ġ Ġ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpretty Print Value ( builder , Ġv [ i ], Ġdeeper ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbuilder . append ('\ n ') ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġrepeat ( indent ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbuilder . append (" Ġ Ġ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġbuilder . append (' ]') ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġpretty Print Map ( builder : ĠStringBuilder , Ġmap : ĠMap Value , Ġindent : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( map . value . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbuilder . append ("{} ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġbuilder . append (" {\ n ") ĊĠĠĠĠĠĠĠ Ġval Ġdeeper Ġ= Ġindent Ġ+ Ġ 1 ĊĠĠĠĠĠĠĠ Ġfor Ġ( entry Ġin Ġmap . value . entries ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrepeat ( de eper ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbuilder . append (" Ġ Ġ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpretty Print Value ( builder , Ġentry . key , Ġdeeper ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbuilder . append (": Ġ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpretty Print Value ( builder , Ġentry . value , Ġdeeper ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbuilder . append (", \ n ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġrepeat ( indent ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbuilder . append (" Ġ Ġ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġbuilder . append (' }') ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġpretty Print Value ( builder : ĠStringBuilder , Ġv : ĠAir Value , Ġindent : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġwhen Ġ( v ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠUnit Value , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠBool Value , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠInt Value , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠDecimal Value Ġ-> Ġbuilder . append ( v ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠString Value Ġ-> Ġpretty Print String ( builder , Ġv ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠTuple Value Ġ-> Ġpretty Print Tuple ( builder , Ġv , Ġindent ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠList Value Ġ-> Ġpretty Print List ( builder , Ġv , Ġindent ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠMap Value Ġ-> Ġpretty Print Map ( builder , Ġv , Ġindent ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġpretty Print ( v : ĠAir Value ): ĠAir Value Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġbuilder Ġ= ĠStringBuilder () ĊĠĠĠĠĠĠĠ Ġpretty Print Value ( builder , Ġv , Ġ 0 ) ĊĠĠĠĠĠĠĠ Ġreturn ĠString Value . valueOf ( builder . toString ()) ĊĠĠĠ Ġ} Ċ }