compiler/tests/extras/PPLL1ExpressionGrammar.st
changeset 464 f6d77fee9811
child 469 8dc4eb06316e
child 502 1e45d3c96ec5
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/compiler/tests/extras/PPLL1ExpressionGrammar.st	Thu May 21 14:12:22 2015 +0100
@@ -0,0 +1,82 @@
+"{ Package: 'stx:goodies/petitparser/compiler/tests/extras' }"
+
+"{ NameSpace: Smalltalk }"
+
+PPCompositeParser subclass:#PPLL1ExpressionGrammar
+	instanceVariableNames:'add prod term mul prim parens number mulPrime addPrime termPrime'
+	classVariableNames:''
+	poolDictionaries:''
+	category:'PetitCompiler-Extras-Tests-Expressions'
+!
+
+
+!PPLL1ExpressionGrammar methodsFor:'as yet unclassified'!
+
+add
+   ^ prod, addPrime optional
+ 	map: [ :_prod :_addPrime |
+		_addPrime isNil 
+			ifTrue: [ _prod  ]
+			ifFalse: [ Array with: _prod withAll: _addPrime ]
+		
+	]
+!
+
+addPrime
+    ^ $+ asParser trimmingToken , term
+!
+
+mul
+   ^ prim, mulPrime optional
+ 	map: [ :_prim :_mulPrime |
+		_mulPrime isNil 
+			ifTrue: [ _prim  ]
+			ifFalse: [ Array with: _prim withAll: _mulPrime ]
+		
+	]
+!
+
+mulPrime
+   ^ $* asParser trimmingToken, prod
+!
+
+number
+   ^ #digit asParser plus trimmingToken ==> [ :token | token inputValue asNumber ]
+!
+
+parens
+   ^ ($( asParser token trim), term , ($) asParser token trim)
+!
+
+prim
+   ^ parens / number
+!
+
+prod
+   ^ mul
+!
+
+start
+   ^ term end
+!
+
+term
+    ^ prod, termPrime optional
+ 	map: [ :_prod :_termPrime |
+        _termPrime isNil 
+            ifTrue: [ _prod  ]
+            ifFalse: [ Array with: _prod withAll: _termPrime ]
+    ]	
+!
+
+termPrime
+    ^ $+ asParser trimmingToken, term
+! !
+
+!PPLL1ExpressionGrammar class methodsFor:'documentation'!
+
+version_HG
+
+    ^ '$Changeset: <not expanded> $'
+! !
+