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