package Ġsh mp . lang . language . syntax . num eral Ċ Ċ import Ġsh mp . lang . language . Num eral System Base Ċ import Ġsh mp . lang . language . lex is . Lex is Ċ import Ġsh mp . lang . language . line Up All Ċ import Ġsh mp . lang . language . syntax . Syntax Exception Ċ import Ġsh mp . lang . language . syntax . Syntax Relation Ċ import Ġsh mp . lang . language . syntax . num eral . Num eral Construction Type .* Ċ import Ġsh mp . lang . language . syntax . clause . real ization . word To Node Ċ import Ġsh mp . lang . language . syntax . clause . translation . Sentence Node Ċ import Ġsh mp . random . singleton . test Probability ĊĊ Ċ data Ġclass ĠNum eral Par adig m ( val Ġbase : ĠNum eral System Base , Ġval Ġranges : ĠNum eral Ranges ) Ġ{ ĊĠĠĠ Ġfun Ġconstruct Num eral ( n : ĠInt , Ġlex is : ĠLex is ): ĠSentence Node Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( n Ġ< Ġ 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠSyntax Exception (" No Ġnum eral Ġfor Ġ$ n ") ĊĊĠĠĠĠĠĠĠ Ġreturn Ġextract ( n , Ġlex is ). apply Ġ{ Ġparent Propagation Ġ= Ġtrue Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġextract ( n : ĠInt , Ġlex is : ĠLex is ): ĠSentence Node Ġ= ĊĠĠĠĠĠĠĠ Ġwhen Ġ( val Ġtype Ġ= ĠgetType ( n )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSingle Word Ġ-> Ġlex is . get Word ( n . toString ()). word To Node ( Syntax Relation . Ad Num eral ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠSpecial Word Ġ-> Ġlex is . get Word ( type . mean ing ). word To Node ( Syntax Relation . Ad Num eral ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠAdd Word Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbase Number Ġ= Ġn Ġ/ Ġtype . base Number ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsum Number Ġ= Ġn Ġ% Ġtype . base Number ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbase Node Ġ= Ġconstruct Base Node ( base Number , Ġtype . base Number , Ġtype . one Prob , Ġlex is ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( sum Number Ġ!= Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsum Node Ġ= Ġextract ( sum Number , Ġlex is ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbase Node . add Str ay Child ( Syntax Relation . Sum Num eral , Ġsum Node ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbase Node . arr anger Ġ= Ġtype . arr anger ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbase Node ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġconstruct Base Node ( mul Number : ĠInt , Ġbase Number : ĠInt , Ġone Prob : ĠDouble , Ġlex is : ĠLex is ): ĠSentence Node Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġtype Ġ= ĠgetType ( mul Number Ġ* Ġbase Number ) ĊĠĠĠĠĠĠĠ Ġif Ġ( type Ġ== ĠSingle Word Ġ|| Ġtype Ġis ĠSpecial Word ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġextract ( mul Number Ġ* Ġbase Number , Ġlex is ) ĊĊĠĠĠĠĠĠĠ Ġval Ġbase Node Ġ= Ġextract ( base Number , Ġlex is ) ĊĠĠĠĠĠĠĠ Ġval Ġmul Node Ġ= Ġextract ( mul Number , Ġlex is ) ĊĠĠĠĠĠĠĠ Ġif Ġ( mul Number Ġ!= Ġ 1 Ġ|| Ġone Prob . test Probability ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbase Node . add Str ay Child ( Syntax Relation . Mul Num eral , Ġmul Node ) ĊĊĠĠĠĠĠĠĠ Ġreturn Ġbase Node ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠgetType ( n : ĠInt ) Ġ= Ġranges . first Ġ{ Ġ( r ) Ġ-> Ġr . contains ( n ) Ġ}. second ĊĊĠĠĠ Ġoverride Ġfun ĠtoString () Ġ= Ġ""" ĊĠĠĠĠĠĠĠĠ Ġ| Num eral Ġsystem Ġbase : Ġ$ base ĊĠĠĠĠĠĠĠĠ Ġ| ${ ĊĠĠĠĠĠĠĠ Ġranges . map Ġ{ Ġ( r , Ġt ) Ġ-> ĠlistOf (" From Ġ${ r . first } Ġto Ġ${ r . last } Ġ- Ġ", Ġt . toString ()) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. line Up All () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. join ToString ("\ n ") ĊĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠ Ġ| ĊĠĠĠĠĠĠĠĠ Ġ| """. trim Margin () Ċ } Ċ Ċ type alias ĠNum eral Ranges Ġ= ĠList < Pair < Int Range , ĠNum eral Construction Type >> Ċ