package Ġit . uni bo . tup ro log . core . parsing Ċ Ċ import Ġit . uni bo . tup ro log . core . operators . Operator Set Ċ import Ġit . uni bo . tup ro log . parser . Pro log Lexer Ċ import Ġit . uni bo . tup ro log . parser . Pro log Parser Ċ import Ġorg . antlr . v 4 . runtime . ANT L RE rror Listener Ċ import Ġorg . antlr . v 4 . runtime . B ail Error Strategy Ċ import Ġorg . antlr . v 4 . runtime . Base Error Listener Ċ import Ġorg . antlr . v 4 . runtime . Buffered Token Stream Ċ import Ġorg . antlr . v 4 . runtime . CharStream Ċ import Ġorg . antlr . v 4 . runtime . Char Streams Ċ import Ġorg . antlr . v 4 . runtime . Default Error Strategy Ċ import Ġorg . antlr . v 4 . runtime . ParserRuleContext Ċ import Ġorg . antlr . v 4 . runtime . Recognition Exception Ċ import Ġorg . antlr . v 4 . runtime . Recognizer Ċ import Ġorg . antlr . v 4 . runtime . Token Ċ import Ġorg . antlr . v 4 . runtime . Token Stream Ċ import Ġorg . antlr . v 4 . runtime . at n . Prediction Mode Ċ import Ġorg . antlr . v 4 . runtime . misc . Parse Cancellation Exception Ċ import Ġjava . io . InputStream Ċ import Ġjava . io . Reader Ċ Ċ object ĠPro log Parser Factory Ġ{ ĊĊĠĠĠ Ġprivate Ġfun Ġnew Error Listener ( while Parsing : ĠAny ): ĠAN TL RE rror Listener Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġobject Ġ: ĠBase Error Listener () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġfun Ġsymbol ToString ( obj : ĠAny ): ĠString Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( obj Ġis ĠToken ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġobj . text ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġobj . toString () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġsyntax Error ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġre cognizer : ĠRe cognizer < *, Ġ*> ?, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoff ending Symbol : ĠAny , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġline : ĠInt , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġchar Position In Line : ĠInt , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmsg : ĠString , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġe : ĠRecognition Exception ? ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( re cognizer Ġis ĠPro log Parser ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġre cognizer . remove Parse Listeners () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠParseException ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhile Parsing , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsymbol ToString ( off ending Symbol ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġline , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġchar Position In Line Ġ+ Ġ 1 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmsg , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġe ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġparse Singleton Expr ( string : ĠString , Ġwith Operators : ĠOperator Set ): ĠPro log Parser . Singleton Expression Context Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġparser Ġ= Ġcreate Parser ( string , Ġwith Operators ) ĊĠĠĠĠĠĠĠ Ġreturn Ġparse Singleton Expr ( parser , Ġstring ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġparse Singleton Expr ( string : ĠReader , Ġwith Operators : ĠOperator Set ): ĠPro log Parser . Singleton Expression Context Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġparser Ġ= Ġcreate Parser ( string , Ġwith Operators ) ĊĠĠĠĠĠĠĠ Ġreturn Ġparse Singleton Expr ( parser , Ġstring ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġparse Singleton Expr ( string : ĠInputStream , Ġwith Operators : ĠOperator Set ): ĠPro log Parser . Singleton Expression Context Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġparser Ġ= Ġcreate Parser ( string , Ġwith Operators ) ĊĠĠĠĠĠĠĠ Ġreturn Ġparse Singleton Expr ( parser , Ġstring ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġparse Singleton Term ( string : ĠString , Ġwith Operators : ĠOperator Set ): ĠPro log Parser . Singleton Term Context Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġparser Ġ= Ġcreate Parser ( string , Ġwith Operators ) ĊĠĠĠĠĠĠĠ Ġreturn Ġparse Singleton Term ( parser , Ġstring ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġparse Singleton Term ( string : ĠReader , Ġwith Operators : ĠOperator Set ): ĠPro log Parser . Singleton Term Context Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġparser Ġ= Ġcreate Parser ( string , Ġwith Operators ) ĊĠĠĠĠĠĠĠ Ġreturn Ġparse Singleton Term ( parser , Ġstring ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġparse Singleton Term ( string : ĠInputStream , Ġwith Operators : ĠOperator Set ): ĠPro log Parser . Singleton Term Context Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġparser Ġ= Ġcreate Parser ( string , Ġwith Operators ) ĊĠĠĠĠĠĠĠ Ġreturn Ġparse Singleton Term ( parser , Ġstring ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġparse Singleton Expr ( parser : ĠPro log Parser , Ġsource : ĠAny ): ĠPro log Parser . Singleton Expression Context Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġparse Single ( parser , Ġsource ) Ġ{ Ġsingleton Expression () Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġparse Clause s ( source : ĠString , Ġwith Operators : ĠOperator Set ): ĠSequence < Pro log Parser . Clause Context > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġparser Ġ= Ġcreate Parser ( source , Ġwith Operators ) ĊĠĠĠĠĠĠĠ Ġreturn Ġparse Clause s ( parser , Ġsource ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġparse Clause s ( source : ĠReader , Ġwith Operators : ĠOperator Set ): ĠSequence < Pro log Parser . Clause Context > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġparser Ġ= Ġcreate Parser ( source , Ġwith Operators ) ĊĠĠĠĠĠĠĠ Ġreturn Ġparse Clause s ( parser , Ġsource ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġparse Clause s ( source : ĠInputStream , Ġwith Operators : ĠOperator Set ): ĠSequence < Pro log Parser . Clause Context > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġparser Ġ= Ġcreate Parser ( source , Ġwith Operators ) ĊĠĠĠĠĠĠĠ Ġreturn Ġparse Clause s ( parser , Ġsource ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġparse Expressions ( source : ĠString , Ġwith Operators : ĠOperator Set ): ĠSequence < Pro log Parser . Expression Context > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġparser Ġ= Ġcreate Parser ( source , Ġwith Operators ) ĊĠĠĠĠĠĠĠ Ġreturn Ġparse Expressions ( parser , Ġsource ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġparse Expressions ( source : ĠReader , Ġwith Operators : ĠOperator Set ): ĠSequence < Pro log Parser . Expression Context > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġparser Ġ= Ġcreate Parser ( source , Ġwith Operators ) ĊĠĠĠĠĠĠĠ Ġreturn Ġparse Expressions ( parser , Ġsource ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġparse Expressions ( source : ĠInputStream , Ġwith Operators : ĠOperator Set ): ĠSequence < Pro log Parser . Expression Context > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġparser Ġ= Ġcreate Parser ( source , Ġwith Operators ) ĊĠĠĠĠĠĠĠ Ġreturn Ġparse Expressions ( parser , Ġsource ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcreate Parser ( string : ĠString ): ĠPro log Parser Ġ= ĊĠĠĠĠĠĠĠ Ġcreate Parser ( string , ĠChar Streams :: fromString ) ĊĊĠĠĠ Ġprivate Ġfun Ġcreate Parser ( source : ĠReader ): ĠPro log Parser Ġ= ĊĠĠĠĠĠĠĠ Ġcreate Parser ( source , ĠChar Streams :: from Reader ) ĊĊĠĠĠ Ġprivate Ġfun Ġcreate Parser ( source : ĠInputStream ): ĠPro log Parser Ġ= ĊĠĠĠĠĠĠĠ Ġcreate Parser ( source , ĠChar Streams :: from Stream ) ĊĊĠĠĠ Ġprivate Ġfun Ġcreate Parser ( source : ĠString , Ġoperators : ĠOperator Set ): ĠPro log Parser Ġ= ĊĠĠĠĠĠĠĠ Ġadd Operators ( create Parser ( source ), Ġoperators ) ĊĊĠĠĠ Ġprivate Ġfun Ġcreate Parser ( source : ĠReader , Ġoperators : ĠOperator Set ): ĠPro log Parser Ġ= ĊĠĠĠĠĠĠĠ Ġadd Operators ( create Parser ( source ), Ġoperators ) ĊĊĠĠĠ Ġprivate Ġfun Ġcreate Parser ( source : ĠInputStream , Ġoperators : ĠOperator Set ): ĠPro log Parser Ġ= ĊĠĠĠĠĠĠĠ Ġadd Operators ( create Parser ( source ), Ġoperators ) ĊĊĠĠĠ Ġprivate Ġfun Ġadd Operators ( pro log Parser : ĠPro log Parser , Ġoperators : ĠOperator Set ): ĠPro log Parser Ġ{ ĊĠĠĠĠĠĠĠ Ġoperators . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpro log Parser . add Operator ( it . functor , Ġit . specifier . to Associ ativity (), Ġit . priority ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġpro log Parser . add Parse Listener ( Dynamic Op Listener . of ( pro log Parser )) ĊĠĠĠĠĠĠĠ Ġreturn Ġpro log Parser ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġ< T > Ġcreate Parser ( source : ĠT , Ġchar List Generator : Ġ( T ) Ġ-> ĠChar Stream ): ĠPro log Parser Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġstream : ĠChar Stream Ġ= Ġchar List Generator ( source ) ĊĠĠĠĠĠĠĠ Ġval Ġlexer Ġ= ĠPro log Lexer ( stream ) ĊĠĠĠĠĠĠĠ Ġlexer . remove Error Listeners () ĊĠĠĠĠĠĠĠ Ġval Ġtoken List : ĠToken Stream Ġ= ĠBuffered Token Stream ( lexer ) ĊĠĠĠĠĠĠĠ Ġval Ġparser Ġ= ĠPro log Parser ( token List ) ĊĠĠĠĠĠĠĠ Ġparser . remove Error Listeners () ĊĠĠĠĠĠĠĠ Ġparser . error Handler Ġ= ĠB ail Error Strategy () ĊĠĠĠĠĠĠĠ Ġparser . interpreter . prediction Mode Ġ= ĠPrediction Mode . S LL ĊĠĠĠĠĠĠĠ Ġreturn Ġparser ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġ< T Ġ: ĠParser RuleContext > Ġparse Single ( parser : ĠPro log Parser , Ġsource : ĠAny , Ġrule : ĠPro log Parser . () Ġ-> ĠT ): ĠT Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġparser . rule () ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( ex : ĠParse Cancellation Exception ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparser . interpreter . prediction Mode Ġ=== ĠPrediction Mode . S LL Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparser . token Stream . seek ( 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparser . interpreter . prediction Mode Ġ= ĠPrediction Mode . LL ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparser . error Handler Ġ= ĠDefault Error Strategy () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparser . add Error Listener ( new Error Listener ( source )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparse Single ( parser , Ġsource , Ġrule ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġex . cause Ġis ĠRecognition Exception Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow Ġex . cause Ġas ĠRecognition Exception ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow Ġex ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġparse Singleton Term ( parser : ĠPro log Parser , Ġsource : ĠAny ): ĠPro log Parser . Singleton Term Context Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġparse Single ( parser , Ġsource ) Ġ{ Ġsingleton Term () Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġ< T Ġ: ĠParser RuleContext > Ġparse Next ( parser : ĠPro log Parser , Ġinput : ĠAny , Ġrule : ĠPro log Parser . () Ġ-> ĠT ): ĠT Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġmark Ġ= Ġ- 1 ĊĠĠĠĠĠĠĠ Ġvar Ġindex Ġ= Ġ- 1 ĊĠĠĠĠĠĠĠ Ġreturn Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmark Ġ= Ġparser . token Stream . mark () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġindex Ġ= Ġparser . token Stream . index (). coerce At Least ( 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġparser . rule () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresult ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( ex : ĠParse Cancellation Exception ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparser . interpreter . prediction Mode Ġ=== ĠPrediction Mode . S LL Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparser . token Stream . seek ( index ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparser . interpreter . prediction Mode Ġ= ĠPrediction Mode . LL ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparser . error Handler Ġ= ĠDefault Error Strategy () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparser . add Error Listener ( new Error Listener ( input )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparse Next ( parser , Ġinput , Ġrule ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġex . cause Ġis ĠRecognition Exception Ġ-> Ġthrow Ġex . cause Ġas ĠRecognition Exception ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġthrow Ġex ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠParseException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġparser . token Stream . let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it [ it . index ()]. type Ġ!= ĠToken . EOF ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . consume () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow Ġe ĊĠĠĠĠĠĠĠ Ġ} Ġfinally Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġparser . token Stream . release ( mark ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġparse Next Clause ( parser : ĠPro log Parser , Ġinput : ĠAny ): ĠPro log Parser . Opt Clause Context Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġparse Next ( parser , Ġinput ) Ġ{ Ġopt Clause () Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġparse Clause s ( parser : ĠPro log Parser , Ġsource : ĠAny ): ĠSequence < Pro log Parser . Clause Context > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġgenerate Sequence ( 0 ) Ġ{ Ġit Ġ+ Ġ 1 Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparse Next Clause ( parser , Ġsource ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠParseException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġe . clause Index Ġ= Ġit ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow Ġe ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}. take While Ġ{ Ġ! it . is Over Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġit . clause () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter NotNull () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġparse Next Expression ( parser : ĠPro log Parser , Ġinput : ĠAny ): ĠPro log Parser . Opt Expression Context Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġparse Next ( parser , Ġinput ) Ġ{ Ġopt Expression () Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġparse Expressions ( parser : ĠPro log Parser , Ġsource : ĠAny ): ĠSequence < Pro log Parser . Expression Context > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġgenerate Sequence ( 0 ) Ġ{ Ġit Ġ+ Ġ 1 Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparse Next Expression ( parser , Ġsource ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠParseException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġe . clause Index Ġ= Ġit ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow Ġe ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}. take While Ġ{ Ġ! it . is Over Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġit . expression () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter NotNull () ĊĠĠĠ Ġ} Ċ } Ċ