package Ġpw . bin om . material . lex Ċ Ċ import Ġorg . junit . Assert Ċ import Ġorg . junit . Test Ċ import Ġjava . io . String Reader Ċ import Ġkotlin . reflect . K Class Ċ import Ġkotlin . test . assertEquals Ċ Ċ fun Ġmake Stream ( txt : ĠString ): ĠLex Stream < TokenType > Ġ{ ĊĠĠĠ Ġval Ġlexer Ġ= ĠGL S LL ex er ( String Reader ( txt )) ĊĠĠĠ Ġreturn ĠLex Stream Ġ{ ĊĠĠĠĠĠĠĠ Ġlexer . next ()?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it Ġ== ĠTokenType . STRING ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠParser . String Element ( lexer . string Literal (), Ġit , Ġlexer . text , Ġlexer . line , Ġlexer . column , Ġlexer . position ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLex Stream . Element ( it , Ġlexer . text , Ġlexer . line , Ġlexer . column , Ġlexer . position ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ class ĠLex Test Ġ{ ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġlexer Test () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġl Ġ= ĠGL S LL ex er ( String Reader (" vec 3 Ġvec 4 ee ")) ĊĠĠĠĠĠĠĠ Ġl . next () ĊĠĠĠĠĠĠĠ Ġl . position . eq ( 0 ) ĊĠĠĠĠĠĠĠ Ġl . text . length . eq ( 4 ) ĊĊĠĠĠĠĠĠĠ Ġl . next () ĊĠĠĠĠĠĠĠ Ġl . position . eq ( 4 ) ĊĠĠĠĠĠĠĠ Ġl . text . length . eq ( 1 ) ĊĊĠĠĠĠĠĠĠ Ġl . next () ĊĠĠĠĠĠĠĠ Ġl . position . eq ( 5 ) ĊĠĠĠĠĠĠĠ Ġl . text . length . eq ( 6 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest String () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġe Ġ= ĠExpression . read ( make Stream (" """ Hello Ġfrom ĠString \ n """" )). notNull () ĊĠĠĠĠĠĠĠ Ġe Ġas ĠString Expression ĊĠĠĠĠĠĠĠ ĠassertEquals (" """ Hello Ġfrom ĠString \ n """ ", Ġe . text ) ĊĠĠĠĠĠĠĠ ĠassertEquals (" Hello Ġfrom ĠString \ n ", Ġe . string ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest () Ġ{ ĊĠĠĠĠĠĠĠ ĠExpression . read ( make Stream (" vec 3 ( 0 , 0 , 0 ) ")) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. notNull () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. cast ( MethodCall Expression :: class ) ĊĊĠĠĠĠĠĠĠ ĠMethod Call Expression . read ( null , Ġmake Stream (" vec 3 ( 0 , 0 , 0 ) ")) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. notNull () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. also Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . method . eq (" vec 3 ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . args . size . eq ( 3 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . args . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( it Ġis ĠNumber Expression ). eq ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit Ġas ĠNumber Expression ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . value . eq (" 0 ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ ĠStatement Block . read ( make Stream (""" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġvec 3 ( 0 , 0 , 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ""" )). notNull (). cast ( Statement Block :: class ). also Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . statements . size . eq ( 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . statements [ 0 ]. also Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . cast ( Return Statement :: class ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġrun Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġstream Ġ= Ġmake Stream (""" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġv vv ( 0 , 0 , 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġv vv ( 0 , 0 , 0 ) ĊĠĠĠĠĠĠĠ Ġ"" ") ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠExpression . read ( stream ). notNull (). cast ( MethodCall Expression :: class ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠExpression . read ( stream ). notNull (). cast ( MethodCall Expression :: class ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġrun Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġstream Ġ= Ġmake Stream (""" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġa aa ( 0 , 1 , 2 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġb bb ( 3 , 4 , 5 ) ĊĠĠĠĠĠĠĠ Ġ"" ") ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠReturn Statement . read ( stream ). notNull (). cast ( Return Statement :: class ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠReturn Statement . read ( stream ). notNull (). cast ( Return Statement :: class ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġrun Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġstream Ġ= Ġmake Stream (" do it ( 0 , 0 , 0 )") ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġstream . safe Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstream . cursor . eq ( 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSimple Expression . read ( null , Ġstream ). notNull (). cast ( MethodCall Expression :: class ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstream . cursor . eq ( 8 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstream . cursor . eq ( 0 ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġstream . safe Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstream . cursor . eq ( 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSubject Expression . read ( stream ). notNull (). cast ( MethodCall Expression :: class ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstream . cursor . eq ( 0 ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġstream . cursor . eq ( 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠOperation Expression . read ( stream ). must Null () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstream . cursor . eq ( 0 ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġreturn Test () Ġ{ ĊĠĠĠĠĠĠĠ Ġrun Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġstream Ġ= Ġmake Stream (" return Ġ 2 ") ĊĠĠĠĠĠĠĠĠĠĠĠ ĠReturn Statement . read ( stream ). notNull () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstream . cursor . eq ( 3 ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġrun Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġstream Ġ= Ġmake Stream (" return Ġvec ( 1 , 2 , 3 )") ĊĠĠĠĠĠĠĠĠĠĠĠ ĠReturn Statement . read ( stream ). notNull () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstream . cursor . eq ( 1 0 ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġmethod Define Test () Ġ{ ĊĊĠĠĠĠĠĠĠ Ġrun Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġstream Ġ= Ġmake Stream (""" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġaa Ġvertex (){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcc Ġfragment (){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ"" ") ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠGlobal Method . read ( stream ). notNull (). cast ( Global Method :: class ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠGlobal Method . read ( stream ). notNull (). cast ( Global Method :: class ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġstatement Block Test () Ġ{ ĊĠĠĠĠĠĠĠ Ġrun Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġstream Ġ= Ġmake Stream (""" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ"" ") ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠStatement Block . read ( stream ). notNull () ĊĠĠĠĠĠĠĠĠĠĠĠ ĠStatement Block . read ( stream ). notNull () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġoperator () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġstream Ġ= Ġmake Stream (""" i < 1 0 """) ĊĠĠĠĠĠĠĠ ĠOperation Expression . read ( stream ). notNull () ĊĊĠĠĠĠĠĠĠ Ġval Ġstream 2 Ġ= Ġmake Stream (""" i Ġ&& Ġ 1 0 """) ĊĠĠĠĠĠĠĠ ĠOperation Expression . read ( stream 2 ). notNull () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġline Comment Test () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġstream Ġ= Ġmake Stream (""" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// line Ġcomment ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfloat Ġvalue ĊĠĠĠĠĠĠĠ Ġ"" ") ĊĊĠĠĠĠĠĠĠ Ġval Ġcc Ġ= ĠGlobal . read ( stream ) ĊĠĠĠĠĠĠĠ Ġ( cc Ġis ĠGlobal Var ). eq ( true ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġblock Comment Test () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġstream Ġ= Ġmake Stream (""" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ/** first Ġline ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsecond Ġline Ġ* //* Ġ Ġalso Ġcomment Ġ Ġ*/ float Ġvalue ĊĠĠĠĠĠĠĠ Ġ"" ") ĊĊĠĠĠĠĠĠĠ Ġval Ġcc Ġ= ĠGlobal . read ( stream ) ĊĠĠĠĠĠĠĠ Ġ( cc Ġis ĠGlobal Var ). eq ( true ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġun ar Expression () Ġ{ ĊĠĠĠĠĠĠĠ Ġrun Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġstream Ġ= Ġmake Stream (" ++ i ") ĊĠĠĠĠĠĠĠĠĠĠĠ ĠInc Dec Expression . read ( stream ). notNull (). also Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit Ġas ĠInc Dec Expression ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . prefix . eq ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . operator . eq ( Operation Expression . Operator . PLUS ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . exp Ġas ĠId Access Expression ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġrun Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġstream Ġ= Ġmake Stream ("-- i ") ĊĠĠĠĠĠĠĠĠĠĠĠ ĠInc Dec Expression . read ( stream ). notNull (). also Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit Ġas ĠInc Dec Expression ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . prefix . eq ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . operator . eq ( Operation Expression . Operator . MINUS ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . exp Ġas ĠId Access Expression ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġrun Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġstream Ġ= Ġmake Stream (" i -- ") ĊĠĠĠĠĠĠĠĠĠĠĠ ĠInc Dec Expression . read ( stream ). notNull (). also Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit Ġas ĠInc Dec Expression ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . prefix . eq ( false ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . operator . eq ( Operation Expression . Operator . MINUS ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . exp Ġas ĠId Access Expression ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġfor Test () Ġ{ ĊĠĠĠĠĠĠĠ ĠParser ( String Reader (""" ĊĠĠĠĠĠĠĠ Ġbool Ġtest ( vec 4 Ġcolor 2 ){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( ;; ){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ""" )) ĊĊĠĠĠĠĠĠĠ ĠParser ( String Reader (""" ĊĠĠĠĠĠĠĠ Ġbool Ġtest ( vec 4 Ġcolor 2 ){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( int Ġi = 0 ; i < 1 0 ; i ++){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ""" )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġclass ĠSS ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġinvert Test () Ġ{ ĊĠĠĠĠĠĠĠ ĠExpression . read ( lexer Ġ= Ġmake Stream ("- 1 0 ")). notNull (). also Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit Ġas ĠIn vert Expression ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . exp Ġas ĠNumber Expression ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġcompare Test () Ġ{ ĊĠĠĠĠĠĠĠ Ġrun Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠExpression . read ( lexer Ġ= Ġmake Stream (" i < 1 0 ")). notNull (). also Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit Ġas ĠOperation Expression ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . operator . eq ( Operation Expression . Operator . LT ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġrun Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠExpression . read ( lexer Ġ= Ġmake Stream (" i <= 1 0 ")). notNull (). also Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit Ġas ĠOperation Expression ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . operator . eq ( Operation Expression . Operator . LE ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġrun Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠExpression . read ( lexer Ġ= Ġmake Stream (" i > 1 0 ")). notNull (). also Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit Ġas ĠOperation Expression ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . operator . eq ( Operation Expression . Operator . GT ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġrun Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠExpression . read ( lexer Ġ= Ġmake Stream (" i >= 1 0 ")). notNull (). also Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit Ġas ĠOperation Expression ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . operator . eq ( Operation Expression . Operator . GE ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġrun Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠExpression . read ( lexer Ġ= Ġmake Stream (" i == 1 0 ")). notNull (). also Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit Ġas ĠOperation Expression ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . operator . eq ( Operation Expression . Operator . EQ ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġrun Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠExpression . read ( lexer Ġ= Ġmake Stream (" i != 1 0 ")). notNull (). also Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit Ġas ĠOperation Expression ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . operator . eq ( Operation Expression . Operator . NE ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġif Statement () Ġ{ ĊĠĠĠĠĠĠĠ ĠStatement . read ( make Stream (" if Ġ( a > b ) Ġ 1 0 Ġelse Ġ 1 1 ")). also Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit Ġas ĠIf Statement ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . condition Ġas ĠOperation Expression ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ( it . then Block Ġas ĠExp Statement ). exp Ġas ĠNumber Expression ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ( it . else Block Ġas ĠExp Statement ). exp Ġas ĠNumber Expression ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ fun Ġ< T Ġ: ĠAny ?> ĠT ?. notNull (): ĠT Ġ{ ĊĠĠĠ ĠAssert . assertNotNull ( this ) ĊĠĠĠ Ġreturn Ġthis !! Ċ } Ċ Ċ fun Ġ< T Ġ: ĠAny ?> ĠT ?. must Null (): ĠT ? Ġ{ ĊĠĠĠ ĠAssert . assertNull ( this ) ĊĠĠĠ Ġreturn Ġthis Ċ } Ċ Ċ fun ĠBoolean . eq ( other : ĠBoolean ): ĠBoolean Ġ{ ĊĠĠĠ ĠAssert . assertEquals ( other , Ġthis ) ĊĠĠĠ Ġreturn Ġthis Ċ } Ċ Ċ fun ĠInt . eq ( other : ĠInt ): ĠInt Ġ{ ĊĠĠĠ ĠAssert . assertEquals ( other , Ġthis ) ĊĠĠĠ Ġreturn Ġthis Ċ } Ċ Ċ fun ĠString . eq ( other : ĠString ): ĠString Ġ{ ĊĠĠĠ ĠAssert . assertEquals ( other , Ġthis ) ĊĠĠĠ Ġreturn Ġthis Ċ } Ċ Ċ fun Ġ< T Ġ: ĠAny > ĠT . eq ( other : ĠT ): ĠT Ġ{ ĊĠĠĠ ĠAssert . assertEquals ( other , Ġthis ) ĊĠĠĠ Ġreturn Ġthis Ċ } Ċ Ċ fun Ġ< T Ġ: ĠAny , ĠR Ġ: ĠAny > ĠT . cast ( clazz : ĠK Class < R >): ĠR Ġ{ ĊĠĠĠ ĠAssert . assertTrue (" Can 't Ġcast Ġ${ this :: class . java . name } Ġto Ġ${ clazz . java . name }", Ġclazz . java . is Instance ( this )) ĊĠĠĠ Ġreturn Ġthis Ġas ĠR Ċ }