package Ġcom . virt link . pap lj Ċ Ċ import Ġcom . virt link . pap lj . parser . Ast Builder Ċ import Ġcom . virt link . pap lj . syntax . P ap lj Ant lr Lexer Ċ import Ġcom . virt link . pap lj . syntax . P ap lj Ant lr Parser Ċ import Ġcom . virt link . pap lj . terms .* Ċ import Ġcom . virt link . terms . Default Term Factory Ċ import Ġcom . virt link . terms . List Term Ċ import Ġcom . virt link . terms . String Term Ċ import Ġjunit . framework . Assert . assertEquals Ċ import Ġorg . antlr . v 4 . runtime . ANT LR InputStream Ċ import Ġorg . antlr . v 4 . runtime . Common Token Stream Ċ import Ġorg . junit . Test Ċ import Ġorg . junit . runner . RunWith Ċ import Ġorg . junit . runners . Parameterized Ċ import Ġjava . io . String Reader Ċ import Ġjava . util .* Ċ Ċ /** Ċ Ġ* ĠTests Ġthe Ġexpressions Ġin Ġthe Ġ[ Ast Builder ] Ġclass . Ċ Ġ*/ Ċ @ RunWith ( Parameterized :: class ) Ċ class ĠAst Builder _ Expr Tests ( ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġinput : ĠString , ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġexpected : ĠExpr Term Ċ ) Ġ{ ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġ@ Parameterized . Parameters ( name = Ġ"{ index }: ĠExpr Ġ\" { 0 }\" ={ 1 }") ĊĠĠĠĠĠĠĠ Ġ@ Jvm Static Ġfun Ġdata () Ġ= ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠP are ns ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠarrayOf ("( a Ġ+ Ġb ) Ġ+ Ġc ", ĠAdd Term ( Add Term ( Var Term ( String Term (" a ")), ĠVar Term ( String Term (" b ")) ), Ġ ĠVar Term ( String Term (" c ")) )), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠarrayOf (" a Ġ+ Ġ( b Ġ+ Ġc )", ĠAdd Term ( Var Term ( String Term (" a ")), ĠAdd Term ( Var Term ( String Term (" b ")), ĠVar Term ( String Term (" c ")) ))), ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠBlock ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠarrayOf ("{ Ġtrue Ġ} ", ĠBlock 2 Term ( List Term ( True Term ())) ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠarrayOf ("{ Ġtrue ; Ġfalse Ġ} ", ĠBlock 2 Term ( List Term ( True Term (), ĠFalse Term ())) ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠarrayOf ("{ Ġtrue ; Ġfalse ; Ġ} ", ĠBlock 2 Term ( List Term ( True Term (), ĠFalse Term ())) ), ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠVar ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠarrayOf (" i ", ĠVar Term ( String Term (" i ")) ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠarrayOf (" xyz ", ĠVar Term ( String Term (" xyz "))) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠCall ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠNew ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠNull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠThis ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠBool ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠNum ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠMember ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠMember Call ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠNeg ate ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠNot ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠCast ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠMultip lic ative ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠAdd itive ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠCompare ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠAnd ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠOr ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠAssignment ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠLet ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠIf ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest () Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠArrange ĊĠĠĠĠĠĠĠ Ġval Ġparser Ġ= Ġcreate Parser ( this . input ) ĊĠĠĠĠĠĠĠ Ġval Ġterm Factory Ġ= ĠDefault Term Factory () ĊĠĠĠĠĠĠĠ Ġval Ġbuilder Ġ= ĠAst Builder ( term Factory ) ĊĠĠĠĠĠĠĠ Ġval Ġparse Tree Ġ= Ġparser . expr () ĊĊĠĠĠĠĠĠĠ Ġ// ĠAct ĊĠĠĠĠĠĠĠ Ġval Ġast Ġ= Ġbuilder . visit ( parse Tree ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠAssert ĊĠĠĠĠĠĠĠ ĠassertEquals ( this . expected , Ġast ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcreate Parser ( str : ĠString ): ĠP ap lj Ant lr Parser Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġreader Ġ= ĠString Reader ( str ) ĊĠĠĠĠĠĠĠ Ġval Ġinput Ġ= ĠAN TLR InputStream ( reader ) ĊĠĠĠĠĠĠĠ Ġval Ġlexer Ġ= ĠP ap lj Ant lr Lexer ( input ) ĊĠĠĠĠĠĠĠ Ġval Ġtokens Ġ= ĠCommon Token Stream ( lexer ) ĊĠĠĠĠĠĠĠ Ġreturn ĠP ap lj Ant lr Parser ( tokens ) ĊĠĠĠ Ġ} Ċ }