import Ġcom . github . h 0 tk 3 y . better Parse . combin ators .* Ċ import Ġcom . github . h 0 tk 3 y . better Parse . grammar .* Ċ import Ġcom . github . h 0 tk 3 y . better Parse . lexer .* Ċ import Ġcom . github . h 0 tk 3 y . better Parse . parser .* Ċ import Ġkotlin . test .* Ċ Ċ class ĠOr Test Ġ{ ĊĊĠĠĠ Ġval Ġa Ġby Ġregex Token (" a ") ĊĠĠĠ Ġval Ġaa Ġby Ġregex Token (" aa ") ĊĠĠĠ Ġval Ġb Ġby Ġregex Token (" b ") ĊĊĠĠĠ Ġ@ Test Ġfun Ġa Or B () Ġ{ ĊĠĠĠĠĠĠĠ ĠassertEquals ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf ( b , Ġb , Ġb , Ġa ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġgrammar ( zero Or More (( a Ġand Ġb Ġuse Ġ{ Ġt 2 Ġ}) Ġor Ġa ) Ġuse Ġ{ Ġmap Ġ{ Ġit . type Ġ} Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. parse ToEnd (" abab aba ")) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test Ġfun Ġalternatives Error () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġgrammar (( a Ġand Ġa ) Ġor Ġ( a Ġand Ġb Ġand Ġa )). try Parse ToEnd (" ab ") Ġas ĠAltern atives Failure ĊĊĠĠĠĠĠĠĠ ĠassertTrue ( result . errors [ 0 ] Ġis ĠMis matched Token ) ĊĠĠĠĠĠĠĠ ĠassertTrue ( result . errors [ 1 ] Ġis ĠUnexpected E of ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test Ġfun Ġa Or Aa () Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġaa Ġdefined Ġfirst ĊĠĠĠĠĠĠĠ ĠassertEquals ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf (" aa "), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġgrammar ( one Or More ( aa Ġor Ġa ) Ġuse Ġ{ Ġmap Ġ{ Ġit . text } Ġ}). parse ToEnd (" aa ") ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġ// Ġa Ġdefined Ġfirst ĊĠĠĠĠĠĠĠ ĠassertEquals ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf (" a ", Ġ" a "), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġgrammar ( one Or More ( a Ġor Ġaa ) Ġuse Ġ{ Ġmap Ġ{ Ġit . text } Ġ}). parse ToEnd (" aa ") ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġ/* ĊĠĠĠĠĠĠĠĠ Ġ* Ġa Ġis Ġfirst Ġin Ġthe Ġdeclared Ġtokens , Ġbut Ġaa Ġfirst Ġin Ġthe Ġparser . ĠFor Ġbackwards ĊĠĠĠĠĠĠĠĠ Ġ* Ġcompatibility , Ġthe Ġorder Ġof Ġdeclared Ġtokens Ġis Ġhon ored . ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġval Ġgrammar Ġ= Ġobject Ġ: ĠGram mar < List < String >>() Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġa Ġby Ġregex Token (" a ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġaa Ġby Ġregex Token (" aa ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġval Ġroot Parser : ĠParser < List < String >> Ġby Ġone Or More ( aa Ġor Ġa ) Ġuse Ġ{ Ġmap Ġ{ Ġit . text Ġ} Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ ĠassertEquals ( listOf (" a ", Ġ" a "), Ġgrammar . parse ToEnd (" aa ")) ĊĠĠĠ Ġ} Ċ } Ċ