21 lines
		
	
	
		
			628 B
		
	
	
	
		
			Factor
		
	
	
			
		
		
	
	
			21 lines
		
	
	
		
			628 B
		
	
	
	
		
			Factor
		
	
	
! Copyright (C) 2008 Chris Double.
 | 
						|
! See http://factorcode.org/license.txt for BSD license.
 | 
						|
USING: kernel arrays strings math.parser sequences
 | 
						|
peg peg.ebnf peg.parsers memoize math accessors ;
 | 
						|
IN: peg.expr
 | 
						|
 | 
						|
EBNF: expr 
 | 
						|
digit    = [0-9]            => [[ digit> ]]
 | 
						|
number   = (digit)+         => [[ 10 digits>integer ]]
 | 
						|
value    =   number 
 | 
						|
           | ("(" exp ")")  => [[ second ]]
 | 
						|
 | 
						|
fac      =   fac "*" value  => [[ first3 nip * ]]
 | 
						|
           | fac "/" value  => [[ first3 nip / ]]
 | 
						|
           | number
 | 
						|
 | 
						|
exp      =   exp "+" fac    => [[ first3 nip + ]]
 | 
						|
           | exp "-" fac    => [[ first3 nip - ]]
 | 
						|
           | fac
 | 
						|
;EBNF
 |