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 [ + ] ]]
|
||||
subtract = ("-") [[ drop [ - ] ]]
|
||||
|
||||
digit = "0" | "1" | "2" | "3" | "4" |
|
||||
"5" | "6" | "7" | "8" | "9"
|
||||
number = ((digit)+) [[ concat string>number ]]
|
||||
digit = ([0-9]) [[ digit> ]]
|
||||
number = ((digit)+) [[ unclip [ swap 10 * + ] reduce ]]
|
||||
|
||||
value = number | ("(" expr ")") [[ second ]]
|
||||
product = (value ((times | divide) value)*) [[ first2 operator-fold ]]
|
||||
|
|
Loading…
Reference in New Issue