USING: kernel tools.test peg peg.expr multiline sequences ;
IN: peg.expr.tests
-{ 5 } [
- "2+3" expr
-] unit-test
+{ 5 } [ "2+3" expr ] unit-test
+{ 5 } [ "2+(3)" expr ] unit-test
+{ 5 } [ "(2)+3" expr ] unit-test
+{ 5 } [ "(2)+(3)" expr ] unit-test
-{ 6 } [
- "2*3" expr
-] unit-test
+{ 6 } [ "2*3" expr ] unit-test
-{ 14 } [
- "2+3*4" expr
-] unit-test
+{ 14 } [ "2+3*4" expr ] unit-test
-{ 17 } [
- "2+3*4+3" expr
-] unit-test
+{ 17 } [ "2+3*4+3" expr ] unit-test
+
+{ 23 } [ "2+3*(4+3)" expr ] unit-test
-{ 23 } [
- "2+3*(4+3)" expr
-] unit-test
EBNF: expr [=[
number = ([0-9])+ => [[ string>number ]]
-value = number
+value = number
| ("(" exp ")") => [[ second ]]
fac = fac "*" value => [[ first3 nip * ]]
| fac "/" value => [[ first3 nip / ]]
- | number
+ | value
exp = exp "+" fac => [[ first3 nip + ]]
| exp "-" fac => [[ first3 nip - ]]