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 |