tests/PPScriptingTest.st
changeset 377 6112a403a52d
parent 376 a2656b27cace
child 379 451b5ae38b72
equal deleted inserted replaced
376:a2656b27cace 377:6112a403a52d
    13 
    13 
    14 
    14 
    15 !PPScriptingTest methodsFor:'examples'!
    15 !PPScriptingTest methodsFor:'examples'!
    16 
    16 
    17 expressionInterpreter
    17 expressionInterpreter
    18         "Same as #expressionInterpreter but with semantic actions."
    18 	"Same as #expressionInterpreter but with semantic actions."
    19         
    19 	
    20         | mul prim add dec |
    20 	| mul prim add dec |
    21         add := PPUnresolvedParser new.
    21 	add := PPUnresolvedParser new.
    22         mul := PPUnresolvedParser new.
    22 	mul := PPUnresolvedParser new.
    23         prim := PPUnresolvedParser new.
    23 	prim := PPUnresolvedParser new.
    24         dec := ($0 to: $9) asParser ==> [ :token | token codePoint - $0 codePoint ].
    24 	dec := ($0 - $9) ==> [ :token | token codePoint - $0 codePoint ].
    25         add def: ((mul , $+ asParser , add) ==> [ :nodes | (nodes at: 1) + (nodes at: 3) ])
    25 	add def: ((mul , $+ asParser , add) ==> [ :nodes | (nodes at: 1) + (nodes at: 3) ])
    26                 / mul.
    26 		/ mul.
    27         mul def: ((prim , $* asParser , mul) ==> [ :nodes | (nodes at: 1) * (nodes at: 3) ])
    27 	mul def: ((prim , $* asParser , mul) ==> [ :nodes | (nodes at: 1) * (nodes at: 3) ])
    28                 / prim.
    28 		/ prim.
    29         prim def: (($( asParser , add , $) asParser) ==> [ :nodes | nodes at: 2 ])
    29 	prim def: (($( asParser , add , $) asParser) ==> [ :nodes | nodes at: 2 ])
    30                 / dec.
    30 		/ dec.
    31         ^ add end
    31 	^ add end
    32 !
    32 !
    33 
    33 
    34 expressionParser
    34 expressionParser
    35         "Simple demo of scripting an expression parser."
    35 	"Simple demo of scripting an expression parser."
    36         
    36 	
    37         | mul prim add dec |
    37 	| mul prim add dec |
    38         add := PPUnresolvedParser new.
    38 	add := PPUnresolvedParser new.
    39         mul := PPUnresolvedParser new.
    39 	mul := PPUnresolvedParser new.
    40         prim := PPUnresolvedParser new.
    40 	prim := PPUnresolvedParser new.
    41         dec := ($0 to: $9) asParser.
    41 	dec := ($0 - $9).
    42         add def: (mul , $+ asParser , add)
    42 	add def: (mul , $+ asParser , add)
    43                 / mul.
    43 		/ mul.
    44         mul def: (prim , $* asParser , mul)
    44 	mul def: (prim , $* asParser , mul)
    45                 / prim.
    45 		/ prim.
    46         prim def: ($( asParser , add , $) asParser)
    46 	prim def: ($( asParser , add , $) asParser)
    47                 / dec.
    47 		/ dec.
    48         ^ add end
    48 	^ add end
    49 !
    49 !
    50 
    50 
    51 straightLineParser
    51 straightLineParser
    52         | goal stm stmList id char dec exp expList mulExp primExp nonzero num lower upper |
    52 	| goal stm stmList id char dec exp expList mulExp primExp nonzero num lower upper |
    53         goal := PPUnresolvedParser new.
    53 	goal := PPUnresolvedParser new.
    54         stmList := PPUnresolvedParser new.
    54 	stmList := PPUnresolvedParser new.
    55         stm := PPUnresolvedParser new.
    55 	stm := PPUnresolvedParser new.
    56         exp := PPUnresolvedParser new.
    56 	exp := PPUnresolvedParser new.
    57         expList := PPUnresolvedParser new.
    57 	expList := PPUnresolvedParser new.
    58         mulExp := PPUnresolvedParser new.
    58 	mulExp := PPUnresolvedParser new.
    59         primExp := PPUnresolvedParser new.
    59 	primExp := PPUnresolvedParser new.
    60         
    60 	
    61         lower := ($a to: $z) asParser.
    61 	lower := $a - $z.
    62         upper := ($A to: $Z) asParser.
    62 	upper := $A - $Z.
    63         char := lower / upper.
    63 	char := lower / upper.
    64         nonzero := ($1 to: $9) asParser.
    64 	nonzero := $1 - $9.
    65         dec := ($0 to: $9) asParser.
    65 	dec := $0 - $9.
    66         id := char, ( char / dec ) star.
    66 	id := char, ( char / dec ) star.
    67         num := $0 asParser / ( nonzero, dec star).
    67 	num := $0 asParser / ( nonzero, dec star).
    68 
    68 
    69         goal def: stmList end.
    69 	goal def: stmList end.
    70         stmList def: stm , ( $; asParser, stm ) star.
    70 	stmList def: stm , ( $; asParser, stm ) star.
    71         stm def: ( id, ':=' asParser, exp )
    71 	stm def: ( id, ':=' asParser, exp )
    72                 / ( 'print' asParser, $( asParser, expList, $) asParser ). 
    72 		/ ( 'print' asParser, $( asParser, expList, $) asParser ). 
    73         exp def: mulExp, ( ( $+ asParser / $- asParser ), mulExp ) star.
    73 	exp def: mulExp, ( ( $+ asParser / $- asParser ), mulExp ) star.
    74         expList def: exp, ( $, asParser, exp ) star.
    74 	expList def: exp, ( $, asParser, exp ) star.
    75         mulExp def: primExp, ( ( $* asParser / $/ asParser ), primExp ) star.
    75 	mulExp def: primExp, ( ( $* asParser / $/ asParser ), primExp ) star.
    76         primExp def: id
    76 	primExp def: id
    77                 / num
    77 		/ num
    78                 / ( $( asParser, stmList, $, asParser, exp, $) asParser ).
    78 		/ ( $( asParser, stmList, $, asParser, exp, $) asParser ).
    79         ^ goal
    79 	^ goal
    80 ! !
    80 ! !
    81 
    81 
    82 !PPScriptingTest methodsFor:'tests'!
    82 !PPScriptingTest methodsFor:'tests'!
    83 
    83 
    84 testExpressionInterpreter
    84 testExpressionInterpreter