Updated peg.expr to use range-pattern for digits
parent
ec4f964e4f
commit
68388fbed9
|
@ -0,0 +1,25 @@
|
||||||
|
! Copyright (C) 2007 Chris Double.
|
||||||
|
! See http://factorcode.org/license.txt for BSD license.
|
||||||
|
!
|
||||||
|
USING: kernel tools.test peg.expr multiline sequences ;
|
||||||
|
IN: temporary
|
||||||
|
|
||||||
|
{ 5 } [
|
||||||
|
"2+3" eval-expr
|
||||||
|
] unit-test
|
||||||
|
|
||||||
|
{ 6 } [
|
||||||
|
"2*3" eval-expr
|
||||||
|
] unit-test
|
||||||
|
|
||||||
|
{ 14 } [
|
||||||
|
"2+3*4" eval-expr
|
||||||
|
] unit-test
|
||||||
|
|
||||||
|
{ 17 } [
|
||||||
|
"2+3*4+3" eval-expr
|
||||||
|
] unit-test
|
||||||
|
|
||||||
|
{ 23 } [
|
||||||
|
"2+3*(4+3)" eval-expr
|
||||||
|
] unit-test
|
|
@ -16,9 +16,8 @@ divide = ("/") [[ drop [ / ] ]]
|
||||||
add = ("+") [[ drop [ + ] ]]
|
add = ("+") [[ drop [ + ] ]]
|
||||||
subtract = ("-") [[ drop [ - ] ]]
|
subtract = ("-") [[ drop [ - ] ]]
|
||||||
|
|
||||||
digit = "0" | "1" | "2" | "3" | "4" |
|
digit = ([0-9]) [[ digit> ]]
|
||||||
"5" | "6" | "7" | "8" | "9"
|
number = ((digit)+) [[ unclip [ swap 10 * + ] reduce ]]
|
||||||
number = ((digit)+) [[ concat string>number ]]
|
|
||||||
|
|
||||||
value = number | ("(" expr ")") [[ second ]]
|
value = number | ("(" expr ")") [[ second ]]
|
||||||
product = (value ((times | divide) value)*) [[ first2 operator-fold ]]
|
product = (value ((times | divide) value)*) [[ first2 operator-fold ]]
|
||||||
|
|
Loading…
Reference in New Issue