package Ġio . mr lok op . kotlin . utils . con vent er . parsers Ċ Ċ import Ġio . mr lok op . kotlin . utils . con vent er . en ities .* Ċ import Ġio . mr lok op . kotlin . utils . con vent er . en ities . expression . Expression Entity Ċ import Ġio . mr lok op . kotlin . utils . con vent er . exceptions . Unknown Declaration Exception Ċ import Ġio . mr lok op . kotlin . utils . con vent er . utils . TreeNode ĊĊ Ċ fun Ġparse TopLevel ( tp Level : ĠTreeNode ): ĠTop Level Entity Ġ{ ĊĠĠĠ Ġval Ġtop Level Ġ= ĠTop Level Entity () ĊĠĠĠ Ġfor Ġ( child Ġin Ġtp Level . children ) Ġ{ ĊĠĠĠĠĠĠĠ Ġwhen Ġ( child . token ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" declaration " Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtop Level . declarations . add ( parse Declaration ( child )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠĠĠ Ġreturn Ġtop Level Ċ } ĊĊ Ċ fun Ġparse Declaration ( dec : ĠTreeNode ): ĠDeclaration Entity Ġ{ ĊĠĠĠ Ġval Ġdeclaration Ġ= ĠDeclaration Entity () ĊĠĠĠ Ġdec . children . forEach Ġ{ ĊĠĠĠĠĠĠĠ Ġwhen Ġ( it . token ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" function Declaration " Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdeclaration . functions . add ( parse Function Declaration ( it )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" property Declaration " Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdeclaration . fields . add ( parse Property Declaration ( it )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" class Declaration " Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdeclaration . classes . add ( parse Class Declaration ( it )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠUnknown Declaration Exception ( it . token ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠĠĠ Ġreturn Ġdeclaration Ċ } Ċ Ċ fun Ġparse Class Declaration ( tree : ĠTreeNode ): ĠClass Entity Ġ{ ĊĠĠĠ Ġvar Ġent Ġ= ĠClass Entity () ĊĠĠĠ Ġtree . forEach Ġ{ ĊĠĠĠĠĠĠĠ Ġwhen Ġ( it . token ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" simple Identifier " Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġent . name Ġ= Ġparse String ( it ). join ToString ("") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" class Body " Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . getOne (" class Member Declarations "). forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġent . declarations . add ( parse Declaration ( it )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠĠĠ Ġreturn Ġent Ċ } Ċ Ċ fun Ġparse Property Declaration ( func : ĠTreeNode ): ĠField Entity Ġ{ ĊĠĠĠ Ġval Ġfield Ġ= ĠField Entity () ĊĊĠĠĠ Ġfor Ġ( child Ġin Ġfunc . children ) Ġ{ ĊĠĠĠĠĠĠĠ Ġwhen Ġ( child . token ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" VAL " Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfield . dec Type Ġ= Ġ" val " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" ASSIGN MENT " Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" variable Declaration " Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfield . name Ġ= Ġparse String ( child . getOne (" simple Identifier ")). join ToString ("") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" expression " Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfield . expression Ġ= Ġparse Expression ( child ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġreturn Ġfield Ċ Ċ } Ċ Ċ fun Ġparse Function Declaration ( func : ĠTreeNode ): ĠFunction Entity Ġ{ ĊĠĠĠ Ġval Ġfunction Ġ= ĠFunction Entity () ĊĊĠĠĠ Ġfor Ġ( child Ġin Ġfunc . children ) Ġ{ ĊĠĠĠĠĠĠĠ Ġwhen Ġ( child . token ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" modifiers " Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġchild . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it . token Ġ== Ġ" modifier ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfunction . mods . add ( parse Modifier ( it )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" FUN " Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" simple Identifier " Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( function . name Ġ== Ġ"") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfunction . name Ġ= Ġparse String ( child ). join ToString ("") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" function Value Parameters " Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġchild . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( it . token ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" function Value Parameter " Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . peek (" parameter ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfunction . params . add ( parse Parameter ( it )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ( ĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" LP AREN ", Ġ" RP AREN " Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprintln (" unexpected : Ġ${ it . token }") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" function Body " Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfunction . body Ġ= Ġparse Body ( child ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġreturn Ġfunction Ċ } Ċ Ċ fun Ġparse Body ( body : ĠTreeNode ): ĠFunction Body Entity Ġ{ ĊĠĠĠ Ġval Ġent Ġ= ĠFunction Body Entity () ĊĠĠĠ Ġwhen Ġ( body . token ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ" function Body " Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġblock Ġ= Ġbody . peek (" block ") Ġ?: Ġthrow ĠIllegalStateException (" Non - block Ġfunction Ġnot Ġsupported ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġent . block Ġ= Ġparse Block ( block ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠĠĠ Ġreturn Ġent Ċ } Ċ Ċ fun Ġparse Block ( block : ĠTreeNode ): ĠBlock Entity Ġ{ ĊĠĠĠ Ġval Ġent Ġ= ĠBlock Entity () ĊĠĠĠ Ġblock . forEach Ġ{ ĊĠĠĠĠĠĠĠ Ġwhen Ġ( it . token ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" statements " Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . forEach Ġ{ Ġstatement Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġent . statements . add ( parse Statement ( statement )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠĠĠ Ġreturn Ġent Ċ } Ċ Ċ fun Ġparse Arguments ( arguments : ĠTreeNode ): ĠList < Expression Entity > Ġ{ ĊĠĠĠ Ġval Ġres Ġ= Ġmutable ListOf < Expression Entity >() ĊĠĠĠ Ġarguments . forEach Ġ{ ĊĠĠĠĠĠĠĠ Ġwhen Ġ( it . token ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" value Argument " Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġres . add ( parse Expression ( it . getOne (" expression "))) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠĠĠ Ġreturn Ġres Ċ }