tests/PPArithmeticParser.st
changeset 375 e2b2f08d054e
parent 183 553dad635f6d
child 376 a2656b27cace
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tests/PPArithmeticParser.st	Fri Oct 03 01:36:33 2014 +0100
@@ -0,0 +1,70 @@
+"{ Package: 'stx:goodies/petitparser' }"
+
+PPCompositeParser subclass:#PPArithmeticParser
+	instanceVariableNames:'terms addition factors multiplication power primary parentheses
+		number'
+	classVariableNames:''
+	poolDictionaries:''
+	category:'PetitTests-Examples'
+!
+
+
+!PPArithmeticParser methodsFor:'accessing'!
+
+start
+	^ terms end
+! !
+
+!PPArithmeticParser methodsFor:'grammar'!
+
+addition
+	^ (factors separatedBy: ($+ asParser / $- asParser) trim) 
+		foldLeft: [ :a :op :b | a perform: op asSymbol with: b ]
+!
+
+factors
+	^ multiplication / power
+!
+
+multiplication
+	^ (power separatedBy: ($* asParser / $/ asParser) trim)
+		foldLeft: [ :a :op :b | a perform: op asSymbol with: b ]
+!
+
+number
+	^ ($- asParser optional , #digit asParser plus , ($. asParser , #digit asParser plus) optional) flatten trim 
+		==> [ :value | value asNumber ]
+!
+
+parentheses
+	^ $( asParser trim , terms , $) asParser trim
+		==> [ :nodes | nodes second ]
+!
+
+power
+	^ (primary separatedBy: $^ asParser trim)
+		foldRight: [ :a :op :b | a raisedTo: b ]
+!
+
+primary
+	^ number / parentheses
+!
+
+terms
+	^ addition / factors
+! !
+
+!PPArithmeticParser class methodsFor:'documentation'!
+
+version
+    ^ '$Header: /cvs/stx/stx/goodies/petitparser/PPArithmeticParser.st,v 1.4 2014-03-04 14:33:59 cg Exp $'
+!
+
+version_CVS
+    ^ '$Header: /cvs/stx/stx/goodies/petitparser/PPArithmeticParser.st,v 1.4 2014-03-04 14:33:59 cg Exp $'
+!
+
+version_SVN
+    ^ '$Id: PPArithmeticParser.st,v 1.4 2014-03-04 14:33:59 cg Exp $'
+! !
+