package Ġorg . lex em . ang mar . parser . de scriptive Ċ Ċ import Ġcom . google . gson .* Ċ import Ġorg . lex em . ang mar .* Ċ import Ġorg . lex em . ang mar . analyzer . nodes . de scriptive .* Ċ import Ġorg . lex em . ang mar . io . printer .* Ċ import Ġorg . lex em . ang mar . parser .* Ċ import Ġorg . lex em . ang mar . parser . commons .* ĊĊ Ċ /** Ċ Ġ* ĠParser Ġfor Ġle xe me Ġpattern Ġcontents . Ċ Ġ*/ Ċ internal Ġclass ĠL exe me Pattern Content Node Ġprivate Ġconstructor ( parser : ĠLex em Parser , Ġparent : ĠParser Node , ĊĠĠĠĠĠĠĠ Ġparent Signal : ĠInt ) Ġ: ĠParser Node ( parser , Ġparent , Ġparent Signal ) Ġ{ ĊĠĠĠ Ġvar Ġle xe mes Ġ= Ġmutable ListOf < Parser Node >() ĊĊĠĠĠ Ġoverride Ġfun ĠtoString () Ġ= ĠStringBuilder (). apply Ġ{ ĊĠĠĠĠĠĠĠ Ġappend ( lex e mes . join ToString (" Ġ")) ĊĠĠĠ Ġ}. toString () ĊĊĠĠĠ Ġoverride Ġfun Ġto Tree (): ĠJsonObject Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġsuper . to Tree () ĊĊĠĠĠĠĠĠĠ Ġresult . add (" lex e mes ", ĠSerialization Utils . list To Test ( lex e mes )) ĊĊĠĠĠĠĠĠĠ Ġreturn Ġresult ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġanalyze ( analyzer : ĠLex em Analyzer , Ġsignal : ĠInt ) Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ ĠL exe me Pattern Content Analyzer . state Machine ( analyzer , Ġsignal , Ġthis ) ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠParses Ġa ĠLex em Ġpattern Ġcontent . ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġfun Ġparse ( parser : ĠLex em Parser , Ġparent : ĠParser Node , Ġparent Signal : ĠInt ): ĠL exe me Pattern Content Node ? Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġparser . from Buffer ( parser . reader . current Position (), ĠL exe me Pattern Content Node :: class . java )?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . parent Ġ= Ġparent ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . parent Signal Ġ= Ġparent Signal ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ parse Ġit ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġinit Cursor Ġ= Ġparser . reader . save Cursor () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresult Ġ= ĠL exe me Pattern Content Node ( parser , Ġparent , Ġparent Signal ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġfirst Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhile Ġ( true ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġiteration Cursor Ġ= Ġparser . reader . save Cursor () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! first ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPattern Whitespace Node . parse ( parser ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġle xe me Ġ= ĠGlobal Common s . parse Lex em ( parser , Ġresult , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult . lex e mes . size Ġ+ ĠL exe me Pattern Content Analyzer . signal End First L exe me ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( lex eme Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġiteration Cursor . restore () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbreak ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult . lex e mes . add ( lex eme ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfirst Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( result . lex e mes . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinit Cursor . restore () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġparser . finalize Node ( result , Ġinit Cursor ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ