tests/PPScriptingTest.st
changeset 405 0470a5e6e712
parent 385 44a36ed4e484
child 454 a9cd5ea7cc36
equal deleted inserted replaced
404:8da796db7f95 405:0470a5e6e712
    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 := (Interval from: $0 to: $9) asParser ==> [ :token | token codePoint - $0 codePoint ].
    24 	dec := ($0 to: $9) asParser ==> [ :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 
       
    33     "Modified: / 05-10-2014 / 00:02:58 / Jan Vrany <jan.vrany@fit.cvut.cz>"
       
    34 !
    32 !
    35 
    33 
    36 expressionParser
    34 expressionParser
    37         "Simple demo of scripting an expression parser."
    35 	"Simple demo of scripting an expression parser."
    38         
    36 	
    39         | mul prim add dec |
    37 	| mul prim add dec |
    40         add := PPUnresolvedParser new.
    38 	add := PPUnresolvedParser new.
    41         mul := PPUnresolvedParser new.
    39 	mul := PPUnresolvedParser new.
    42         prim := PPUnresolvedParser new.
    40 	prim := PPUnresolvedParser new.
    43         dec := (Interval from: $0 to: $9) asParser.
    41 	dec := ($0 to: $9) asParser.
    44         add def: (mul , $+ asParser , add)
    42 	add def: (mul , $+ asParser , add)
    45                 / mul.
    43 		/ mul.
    46         mul def: (prim , $* asParser , mul)
    44 	mul def: (prim , $* asParser , mul)
    47                 / prim.
    45 		/ prim.
    48         prim def: ($( asParser , add , $) asParser)
    46 	prim def: ($( asParser , add , $) asParser)
    49                 / dec.
    47 		/ dec.
    50         ^ add end
    48 	^ add end
    51 
       
    52     "Modified: / 05-10-2014 / 00:03:01 / Jan Vrany <jan.vrany@fit.cvut.cz>"
       
    53 !
    49 !
    54 
    50 
    55 straightLineParser
    51 straightLineParser
    56         | 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 |
    57         goal := PPUnresolvedParser new.
    53 	goal := PPUnresolvedParser new.
    58         stmList := PPUnresolvedParser new.
    54 	stmList := PPUnresolvedParser new.
    59         stm := PPUnresolvedParser new.
    55 	stm := PPUnresolvedParser new.
    60         exp := PPUnresolvedParser new.
    56 	exp := PPUnresolvedParser new.
    61         expList := PPUnresolvedParser new.
    57 	expList := PPUnresolvedParser new.
    62         mulExp := PPUnresolvedParser new.
    58 	mulExp := PPUnresolvedParser new.
    63         primExp := PPUnresolvedParser new.
    59 	primExp := PPUnresolvedParser new.
    64         
    60 	
    65         lower := (Interval from: $a to: $z) asParser.
    61 	lower := ($a to: $z) asParser.
    66         upper := (Interval from: $A to: $Z) asParser.
    62 	upper := ($A to: $Z) asParser.
    67         char := lower / upper.
    63 	char := lower / upper.
    68         nonzero := (Interval from: $1 to: $9) asParser.
    64 	nonzero := ($1 to: $9) asParser.
    69         dec := (Interval from: $0 to: $9) asParser.
    65 	dec := ($0 to: $9) asParser.
    70         id := char, ( char / dec ) star.
    66 	id := char, ( char / dec ) star.
    71         num := $0 asParser / ( nonzero, dec star).
    67 	num := $0 asParser / ( nonzero, dec star).
    72 
    68 
    73         goal def: stmList end.
    69 	goal def: stmList end.
    74         stmList def: stm , ( $; asParser, stm ) star.
    70 	stmList def: stm , ( $; asParser, stm ) star.
    75         stm def: ( id, ':=' asParser, exp )
    71 	stm def: ( id, ':=' asParser, exp )
    76                 / ( 'print' asParser, $( asParser, expList, $) asParser ). 
    72 		/ ( 'print' asParser, $( asParser, expList, $) asParser ). 
    77         exp def: mulExp, ( ( $+ asParser / $- asParser ), mulExp ) star.
    73 	exp def: mulExp, ( ( $+ asParser / $- asParser ), mulExp ) star.
    78         expList def: exp, ( $, asParser, exp ) star.
    74 	expList def: exp, ( $, asParser, exp ) star.
    79         mulExp def: primExp, ( ( $* asParser / $/ asParser ), primExp ) star.
    75 	mulExp def: primExp, ( ( $* asParser / $/ asParser ), primExp ) star.
    80         primExp def: id
    76 	primExp def: id
    81                 / num
    77 		/ num
    82                 / ( $( asParser, stmList, $, asParser, exp, $) asParser ).
    78 		/ ( $( asParser, stmList, $, asParser, exp, $) asParser ).
    83         ^ goal
    79 	^ goal
    84 
       
    85     "Modified: / 05-10-2014 / 00:03:11 / Jan Vrany <jan.vrany@fit.cvut.cz>"
       
    86 ! !
    80 ! !
    87 
    81 
    88 !PPScriptingTest methodsFor:'tests'!
    82 !PPScriptingTest methodsFor:'tests'!
    89 
    83 
    90 testExpressionInterpreter
    84 testExpressionInterpreter