package Ġorg . pure script . parser Ċ Ċ import Ġcom . intellij . lang . AST Node Ċ import Ġcom . intellij . lang . Psi Builder Ċ import Ġcom . intellij . lang . Psi Parser Ċ import Ġcom . intellij . psi . tree . I ElementType Ċ Ċ class ĠPure Parser Ġ: ĠPsi Parser , ĠP ST o ken s , ĠP SE lement s Ġ{ ĊĠĠĠ Ġoverride Ġfun Ġparse ( root : ĠI ElementType , Ġbuilder : ĠPsi Builder ): ĠAST Node Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġbuilder . set Debug Mode ( true ); ĊĠĠĠĠĠĠĠ Ġval Ġcontext Ġ= ĠParser Context ( builder ) ĊĠĠĠĠĠĠĠ Ġval Ġmark Ġ= Ġcontext . start () ĊĠĠĠĠĠĠĠ Ġ// ĠCreating Ġa Ġnew Ġinstance Ġhere Ġallows Ġhot Ġsw apping Ġwhile Ġdebugging . ĊĠĠĠĠĠĠĠ Ġval Ġinfo Ġ= ĠPure Par sec Parser (). parse Module . parse ( context ) ĊĠĠĠĠĠĠĠ Ġvar Ġnext Type : ĠI ElementType ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġif Ġ(! context . eof ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġerror Marker : ĠPsi Builder . Marker ? Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhile Ġ(! context . eof ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( context . position Ġ>= Ġinfo . position Ġ&& Ġerror Marker Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġerror Marker Ġ= Ġcontext . start () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnext Type Ġ= Ġbuilder . token Type ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontext . advance () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( error Marker Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( next Type Ġ!= Ġnull ) Ġerror Marker . error (" Unexpected Ġ$ next Type . Ġ$ info ") Ġelse Ġerror Marker . error ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinfo . toString () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġmark . done ( root ) ĊĠĠĠĠĠĠĠ Ġreturn Ġbuilder . tree Built ĊĠĠĠ Ġ} Ċ }