Ċ import Ġcom . github . h 0 tk 3 y . better Parse . combin ators .* Ċ import Ġcom . github . h 0 tk 3 y . better Parse . grammar . Grammar Ċ import Ġcom . github . h 0 tk 3 y . better Parse . lexer . regex Token Ċ import Ġcom . github . h 0 tk 3 y . better Parse . parser . Parser Ċ import Ġcom . github . h 0 tk 3 y . better Parse . parser . parse ToEnd Ċ import Ġcom . github . h 0 tk 3 y . better Parse . utils . components Ċ import Ġkotlin . test . Test Ċ import Ġkotlin . test . assertEquals Ċ Ċ class ĠAnd Test Ġ: ĠGram mar < Nothing >() Ġ{ ĊĠĠĠ Ġoverride Ġval Ġroot Parser : ĠParser < Nothing > Ġget () Ġ= Ġthrow ĠNoSuch ElementException () ĊĊĠĠĠ Ġval Ġa Ġby Ġregex Token (" a ") ĊĠĠĠ Ġval Ġb Ġby Ġregex Token (" b ") ĊĊĠĠĠ Ġ@ Test Ġfun Ġsimple And () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġtokens Ġ= Ġtokenizer . tokenize (" aba ") ĊĠĠĠĠĠĠĠ Ġval Ġparser Ġ= Ġa Ġand Ġb Ġand Ġa Ġuse Ġ{ Ġcomponents . map Ġ{ Ġit . type Ġ} Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġparser . parse ToEnd ( tokens ) ĊĊĠĠĠĠĠĠĠ ĠassertEquals ( listOf ( a , Ġb , Ġa ), Ġresult ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test Ġfun Ġskip () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġtokens Ġ= Ġtokenizer . tokenize (" abab ") ĊĠĠĠĠĠĠĠ Ġval Ġparser A Ġ= Ġa Ġand Ġskip ( b ) Ġand Ġa Ġand Ġskip ( b ) Ġuse Ġ{ Ġcomponents . map Ġ{ Ġit . type Ġ} Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġparser B Ġ= Ġskip ( a ) Ġand Ġb Ġand Ġskip ( a ) Ġand Ġb Ġuse Ġ{ Ġcomponents . map Ġ{ Ġit . type Ġ} Ġ} ĊĊĠĠĠĠĠĠĠ ĠassertEquals ( listOf ( a , Ġa ), Ġparser A . parse ToEnd ( tokens )) ĊĠĠĠĠĠĠĠ ĠassertEquals ( listOf ( b , Ġb ), Ġparser B . parse ToEnd ( tokens )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test Ġfun Ġleft most Se veral Sk ips () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġtokens Ġ= Ġtokenizer . tokenize (" abab ab ") ĊĠĠĠĠĠĠĠ Ġval Ġparser Ġ= Ġ- a Ġ* Ġ- b Ġ* Ġa Ġ* Ġ- b Ġ* Ġ- a Ġ* Ġb Ġuse Ġ{ Ġt 1 . type Ġto Ġt 2 . type Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġparser . parse ToEnd ( tokens ) ĊĊĠĠĠĠĠĠĠ ĠassertEquals ( a Ġto Ġb , Ġresult ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test Ġfun Ġsingle Parser In Skip Chain () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġtokens Ġ= Ġtokenizer . tokenize (" abab a ") ĊĠĠĠĠĠĠĠ Ġval Ġparser Ġ= Ġ- a Ġ* Ġ- b Ġ* Ġa Ġ* Ġ- b Ġ* Ġ- a Ġuse Ġ{ Ġoffset Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġparser . parse ToEnd ( tokens ) ĊĊĠĠĠĠĠĠĠ ĠassertEquals ( 2 , Ġresult ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test Ġfun Ġlong And Operator Chain () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġtokens Ġ= Ġtokenizer . tokenize (" aa ab bb ") ĊĠĠĠĠĠĠĠ Ġval Ġparser Ġ= Ġa Ġ* Ġa Ġ* Ġa Ġ* Ġb Ġ* Ġb Ġ* Ġb Ġuse Ġ{ ĠlistOf ( t 6 , Ġt 5 , Ġt 4 , Ġt 3 , Ġt 2 , Ġt 1 ). map Ġ{ Ġit . type Ġ} Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġparser . parse ToEnd ( tokens ) ĊĊĠĠĠĠĠĠĠ ĠassertEquals ( listOf ( b , Ġb , Ġb , Ġa , Ġa , Ġa ), Ġresult ) ĊĠĠĠ Ġ} Ċ }