diff -r 000000000000 -r 739fe9b7253e PPLambdaParser.st --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/PPLambdaParser.st Thu Aug 18 20:56:17 2011 +0200 @@ -0,0 +1,65 @@ +"{ Package: 'squeak:petitparser' }" + +PPCompositeParser subclass:#PPLambdaParser + instanceVariableNames:'expression abstraction application variable' + classVariableNames:'' + poolDictionaries:'' + category:'PetitTests-Examples' +! + + +!PPLambdaParser class methodsFor:'curch-booleans'! + +and + ^ self parse: '\p.\q.((p q) p)' +! + +false + ^ self parse: '\x.\y.y' +! + +ifthenelse + ^ self parse: '\p.p' +! + +not + ^ self parse: '\p.\a.\b.((p b) a)' +! + +or + ^ self parse: '\p.\q.((p p) q)' +! + +true + ^ self parse: '\x.\y.x' +! ! + +!PPLambdaParser methodsFor:'accessing'! + +start + ^ expression end +! ! + +!PPLambdaParser methodsFor:'productions'! + +abstraction + ^ $\ asParser token trim , variable , $. asParser token trim , expression ==> [ :node | Array with: node second with: node fourth ] +! + +application + ^ $( asParser token trim , expression , expression , $) asParser token trim ==> [ :node | Array with: node second with: node third ] +! + +expression + ^ variable / abstraction / application +! + +variable + ^ (#letter asParser , #word asParser star) token trim ==> [ :token | token value ] +! ! + +!PPLambdaParser class methodsFor:'documentation'! + +version_SVN + ^ '$Id: PPLambdaParser.st,v 1.1 2011-08-18 18:56:17 cg Exp $' +! !