smalltalk.addClass('PPParser', smalltalk.Object, ['memo'], 'Parser'); smalltalk.addMethod( '_initialize', smalltalk.method({ selector: 'initialize', category: 'initialization', fn: function (){ var self=this; self['@memo']=smalltalk.send((smalltalk.Dictionary || Dictionary), "_new", []); return self;}, source: unescape('initialize%0A%09memo%20%3A%3D%20Dictionary%20new'), messageSends: ["new"], referencedClasses: [smalltalk.Dictionary] }), smalltalk.PPParser); smalltalk.addMethod( '_memo', smalltalk.method({ selector: 'memo', category: 'accessing', fn: function (){ var self=this; return self['@memo']; return self;}, source: unescape('memo%0A%09%5Ememo'), messageSends: [], referencedClasses: [] }), smalltalk.PPParser); smalltalk.addMethod( '_flatten', smalltalk.method({ selector: 'flatten', category: 'operations', fn: function (){ var self=this; return smalltalk.send((smalltalk.PPFlattenParser || PPFlattenParser), "_on_", [self]); return self;}, source: unescape('flatten%0A%09%5EPPFlattenParser%20on%3A%20self'), messageSends: ["on:"], referencedClasses: [smalltalk.PPFlattenParser] }), smalltalk.PPParser); smalltalk.addMethod( '_withSource', smalltalk.method({ selector: 'withSource', category: 'operations', fn: function (){ var self=this; return smalltalk.send((smalltalk.PPSourceParser || PPSourceParser), "_on_", [self]); return self;}, source: unescape('withSource%0A%09%5EPPSourceParser%20on%3A%20self'), messageSends: ["on:"], referencedClasses: [smalltalk.PPSourceParser] }), smalltalk.PPParser); smalltalk.addMethod( '__eq_eq_gt', smalltalk.method({ selector: '==>', category: 'operations', fn: function (aBlock){ var self=this; return smalltalk.send((smalltalk.PPActionParser || PPActionParser), "_on_block_", [self, aBlock]); return self;}, source: unescape('%3D%3D%3E%20aBlock%0A%09%5EPPActionParser%20on%3A%20self%20block%3A%20aBlock'), messageSends: ["on:block:"], referencedClasses: [smalltalk.PPActionParser] }), smalltalk.PPParser); smalltalk.addMethod( '__comma', smalltalk.method({ selector: ',', category: 'operations', fn: function (aParser){ var self=this; return smalltalk.send((smalltalk.PPSequenceParser || PPSequenceParser), "_with_with_", [self, aParser]); return self;}, source: unescape('%2C%20aParser%0A%09%5EPPSequenceParser%20with%3A%20self%20with%3A%20aParser'), messageSends: ["with:with:"], referencedClasses: [smalltalk.PPSequenceParser] }), smalltalk.PPParser); smalltalk.addMethod( '__slash', smalltalk.method({ selector: '/', category: 'operations', fn: function (aParser){ var self=this; return smalltalk.send((smalltalk.PPChoiceParser || PPChoiceParser), "_with_with_", [self, aParser]); return self;}, source: unescape('/%20aParser%0A%09%5EPPChoiceParser%20with%3A%20self%20with%3A%20aParser'), messageSends: ["with:with:"], referencedClasses: [smalltalk.PPChoiceParser] }), smalltalk.PPParser); smalltalk.addMethod( '_plus', smalltalk.method({ selector: 'plus', category: 'operations', fn: function (){ var self=this; return smalltalk.send((smalltalk.PPRepeatingParser || PPRepeatingParser), "_on_min_", [self, (1)]); return self;}, source: unescape('plus%0A%09%5EPPRepeatingParser%20on%3A%20self%20min%3A%201'), messageSends: ["on:min:"], referencedClasses: [smalltalk.PPRepeatingParser] }), smalltalk.PPParser); smalltalk.addMethod( '_star', smalltalk.method({ selector: 'star', category: 'operations', fn: function (){ var self=this; return smalltalk.send((smalltalk.PPRepeatingParser || PPRepeatingParser), "_on_min_", [self, (0)]); return self;}, source: unescape('star%0A%09%5EPPRepeatingParser%20on%3A%20self%20min%3A%200'), messageSends: ["on:min:"], referencedClasses: [smalltalk.PPRepeatingParser] }), smalltalk.PPParser); smalltalk.addMethod( '_not', smalltalk.method({ selector: 'not', category: 'operations', fn: function (){ var self=this; return smalltalk.send((smalltalk.PPNotParser || PPNotParser), "_on_", [self]); return self;}, source: unescape('not%0A%09%5EPPNotParser%20on%3A%20self'), messageSends: ["on:"], referencedClasses: [smalltalk.PPNotParser] }), smalltalk.PPParser); smalltalk.addMethod( '_optional', smalltalk.method({ selector: 'optional', category: 'operations', fn: function (){ var self=this; return (($receiver = self).klass === smalltalk.Number) ? $receiver /smalltalk.send((smalltalk.PPEpsilonParser || PPEpsilonParser), "_new", []) : smalltalk.send($receiver, "__slash", [smalltalk.send((smalltalk.PPEpsilonParser || PPEpsilonParser), "_new", [])]); return self;}, source: unescape('optional%0A%09%5Eself%20/%20PPEpsilonParser%20new'), messageSends: [unescape("/"), "new"], referencedClasses: [smalltalk.PPEpsilonParser] }), smalltalk.PPParser); smalltalk.addMethod( '_memoizedParse_', smalltalk.method({ selector: 'memoizedParse:', category: 'operations', fn: function (aStream){ var self=this; var r=nil; var start=nil; var end=nil; var node=nil; start=smalltalk.send(aStream, "_position", []); smalltalk.send(self, "_log_block_", ["memoizedParse", (function(){return r=smalltalk.send(smalltalk.send(self, "_memo", []), "_at_ifPresent_ifAbsent_", [start, (function(value){smalltalk.send(aStream, "_position_", [smalltalk.send(smalltalk.send(smalltalk.send(self, "_memo", []), "_at_", [start]), "_second", [])]);return smalltalk.send(value, "_first", []);}), (function(){node=smalltalk.send(self, "_parse_", [aStream]);end=smalltalk.send(aStream, "_position", []);smalltalk.send(smalltalk.send(self, "_memo", []), "_at_put_", [start, smalltalk.send((smalltalk.Array || Array), "_with_with_", [node, end])]);return node;})]);})]); return r; return self;}, source: unescape('memoizedParse%3A%20aStream%0A%09%7C%20r%20start%20end%20node%20%7C%0A%09start%20%3A%3D%20aStream%20position.%0A%20%20%20%20%20%20%20%20self%20log%3A%20%27memoizedParse%27%20block%3A%20%5Br%20%3A%3D%20self%20memo%20at%3A%20start%20%0A%09%20%20%20%20ifPresent%3A%20%5B%3Avalue%20%7C%0A%09%09aStream%20position%3A%20%28self%20memo%20at%3A%20start%29%20second.%0A%09%09value%20first%5D%0A%09%20%20%20%20ifAbsent%3A%20%5B%0A%09%09node%20%3A%3D%20self%20parse%3A%20aStream.%0A%09%09end%20%3A%3D%20aStream%20position.%0A%09%09self%20memo%20at%3A%20start%20put%3A%20%28Array%20with%3A%20node%20with%3A%20end%29.%0A%09%09node%5D%5D.%0A%09%5Er'), messageSends: ["position", "log:block:", "at:ifPresent:ifAbsent:", "memo", "position:", "second", "at:", "first", "parse:", "at:put:", "with:with:"], referencedClasses: [smalltalk.Array] }), smalltalk.PPParser); smalltalk.addMethod( '_parse_', smalltalk.method({ selector: 'parse:', category: 'parsing', fn: function (aStream){ var self=this; smalltalk.send(self, "_subclassResponsibility", []); return self;}, source: unescape('parse%3A%20aStream%0A%09self%20subclassResponsibility'), messageSends: ["subclassResponsibility"], referencedClasses: [] }), smalltalk.PPParser); smalltalk.addMethod( '_parseAll_', smalltalk.method({ selector: 'parseAll:', category: 'parsing', fn: function (aStream){ var self=this; var result=nil; result=smalltalk.send(smalltalk.send((smalltalk.PPSequenceParser || PPSequenceParser), "_with_with_", [self, smalltalk.send((smalltalk.PPEOFParser || PPEOFParser), "_new", [])]), "_memoizedParse_", [aStream]); return (($receiver = smalltalk.send(result, "_isParseFailure", [])).klass === smalltalk.Boolean) ? ($receiver ? (function(){return smalltalk.send(self, "_error_", [smalltalk.send(result, "_messageFor_", [smalltalk.send(aStream, "_contents", [])])]);})() : (function(){return smalltalk.send(result, "_first", []);})()) : smalltalk.send($receiver, "_ifTrue_ifFalse_", [(function(){return smalltalk.send(self, "_error_", [smalltalk.send(result, "_messageFor_", [smalltalk.send(aStream, "_contents", [])])]);}), (function(){return smalltalk.send(result, "_first", []);})]); return self;}, source: unescape('parseAll%3A%20aStream%0A%09%7C%20result%20%7C%0A%09result%20%3A%3D%20%28PPSequenceParser%20with%3A%20self%20with%3A%20PPEOFParser%20new%29%20memoizedParse%3A%20aStream.%0A%09%5Eresult%20isParseFailure%20%0A%09%20%20%20%20ifTrue%3A%20%5Bself%20error%3A%20%28result%20messageFor%3A%20aStream%20contents%29%5D%0A%09%20%20%20%20ifFalse%3A%20%5Bresult%20first%5D'), messageSends: ["memoizedParse:", "with:with:", "new", "ifTrue:ifFalse:", "isParseFailure", "error:", "messageFor:", "contents", "first"], referencedClasses: [smalltalk.PPSequenceParser,smalltalk.PPEOFParser] }), smalltalk.PPParser); smalltalk.addClass('PPEOFParser', smalltalk.PPParser, [], 'Parser'); smalltalk.addMethod( '_parse_', smalltalk.method({ selector: 'parse:', category: 'parsing', fn: function (aStream){ var self=this; return (($receiver = smalltalk.send(aStream, "_atEnd", [])).klass === smalltalk.Boolean) ? (! $receiver ? (function(){return smalltalk.send(smalltalk.send((smalltalk.PPFailure || PPFailure), "_new", []), "_reason_at_", [smalltalk.send(smalltalk.send(smalltalk.send(smalltalk.send(smalltalk.send(aStream, "_contents", []), "__comma", [smalltalk.send((smalltalk.String || String), "_lf", [])]), "__comma", [unescape("---------------")]), "__comma", [smalltalk.send((smalltalk.String || String), "_lf", [])]), "__comma", ["EOF expected"]), smalltalk.send(aStream, "_position", [])]);})() : (function(){return nil;})()) : smalltalk.send($receiver, "_ifFalse_ifTrue_", [(function(){return smalltalk.send(smalltalk.send((smalltalk.PPFailure || PPFailure), "_new", []), "_reason_at_", [smalltalk.send(smalltalk.send(smalltalk.send(smalltalk.send(smalltalk.send(aStream, "_contents", []), "__comma", [smalltalk.send((smalltalk.String || String), "_lf", [])]), "__comma", [unescape("---------------")]), "__comma", [smalltalk.send((smalltalk.String || String), "_lf", [])]), "__comma", ["EOF expected"]), smalltalk.send(aStream, "_position", [])]);}), (function(){return nil;})]); return self;}, source: unescape('parse%3A%20aStream%0A%09%5EaStream%20atEnd%20%0A%09%20%20%20%20ifFalse%3A%20%5B%0A%09%09PPFailure%20new%20reason%3A%20aStream%20contents%2C%20String%20lf%2C%20%27---------------%27%2C%20String%20lf%2C%20%27EOF%20expected%27%20at%3A%20aStream%20position%5D%0A%09%20%20%20%20ifTrue%3A%20%5Bnil%5D'), messageSends: ["ifFalse:ifTrue:", "atEnd", "reason:at:", "new", unescape("%2C"), "contents", "lf", "position"], referencedClasses: [smalltalk.PPFailure,smalltalk.String] }), smalltalk.PPEOFParser); smalltalk.addClass('PPAnyParser', smalltalk.PPParser, [], 'Parser'); smalltalk.addMethod( '_parse_', smalltalk.method({ selector: 'parse:', category: 'parsing', fn: function (aStream){ var self=this; return (($receiver = smalltalk.send(aStream, "_atEnd", [])).klass === smalltalk.Boolean) ? ($receiver ? (function(){return smalltalk.send(smalltalk.send((smalltalk.PPFailure || PPFailure), "_new", []), "_reason_at_", ["did not expect EOF", smalltalk.send(aStream, "_position", [])]);})() : (function(){return smalltalk.send(aStream, "_next", []);})()) : smalltalk.send($receiver, "_ifTrue_ifFalse_", [(function(){return smalltalk.send(smalltalk.send((smalltalk.PPFailure || PPFailure), "_new", []), "_reason_at_", ["did not expect EOF", smalltalk.send(aStream, "_position", [])]);}), (function(){return smalltalk.send(aStream, "_next", []);})]); return self;}, source: unescape('parse%3A%20aStream%0A%09%5EaStream%20atEnd%0A%09%20%20%20%20ifTrue%3A%20%5BPPFailure%20new%0A%09%09%09%20reason%3A%20%27did%20not%20expect%20EOF%27%20at%3A%20aStream%20position%5D%0A%09%20%20%20%20ifFalse%3A%20%5BaStream%20next%5D'), messageSends: ["ifTrue:ifFalse:", "atEnd", "reason:at:", "new", "position", "next"], referencedClasses: [smalltalk.PPFailure] }), smalltalk.PPAnyParser); smalltalk.addClass('PPEpsilonParser', smalltalk.PPParser, [], 'Parser'); smalltalk.addMethod( '_parse_', smalltalk.method({ selector: 'parse:', category: 'parsing', fn: function (aStream){ var self=this; return nil; return self;}, source: unescape('parse%3A%20aStream%0A%09%5Enil'), messageSends: [], referencedClasses: [] }), smalltalk.PPEpsilonParser); smalltalk.addClass('PPStringParser', smalltalk.PPParser, ['string'], 'Parser'); smalltalk.addMethod( '_string', smalltalk.method({ selector: 'string', category: 'accessing', fn: function (){ var self=this; return self['@string']; return self;}, source: unescape('string%0A%09%5Estring'), messageSends: [], referencedClasses: [] }), smalltalk.PPStringParser); smalltalk.addMethod( '_string_', smalltalk.method({ selector: 'string:', category: 'accessing', fn: function (aString){ var self=this; self['@string']=aString; return self;}, source: unescape('string%3A%20aString%0A%09string%20%3A%3D%20aString'), messageSends: [], referencedClasses: [] }), smalltalk.PPStringParser); smalltalk.addMethod( '_parse_', smalltalk.method({ selector: 'parse:', category: 'parsing', fn: function (aStream){ var self=this; var position=nil; var result=nil; position=smalltalk.send(aStream, "_position", []); result=smalltalk.send(aStream, "_next_", [smalltalk.send(smalltalk.send(self, "_string", []), "_size", [])]); return (($receiver = smalltalk.send(result, "__eq", [smalltalk.send(self, "_string", [])])).klass === smalltalk.Boolean) ? ($receiver ? (function(){return result;})() : (function(){smalltalk.send(aStream, "_position_", [position]);return (function($rec){smalltalk.send($rec, "_reason_", [smalltalk.send(smalltalk.send(smalltalk.send("Expected ", "__comma", [smalltalk.send(self, "_string", [])]), "__comma", [" but got "]), "__comma", [smalltalk.send(smalltalk.send(result, "_at_", [position]), "_printString", [])])]);return smalltalk.send($rec, "_yourself", []);})(smalltalk.send((smalltalk.PPFailure || PPFailure), "_new", []));})()) : smalltalk.send($receiver, "_ifTrue_ifFalse_", [(function(){return result;}), (function(){smalltalk.send(aStream, "_position_", [position]);return (function($rec){smalltalk.send($rec, "_reason_", [smalltalk.send(smalltalk.send(smalltalk.send("Expected ", "__comma", [smalltalk.send(self, "_string", [])]), "__comma", [" but got "]), "__comma", [smalltalk.send(smalltalk.send(result, "_at_", [position]), "_printString", [])])]);return smalltalk.send($rec, "_yourself", []);})(smalltalk.send((smalltalk.PPFailure || PPFailure), "_new", []));})]); return self;}, source: unescape('parse%3A%20aStream%0A%09%7C%20position%20result%20%7C%0A%09position%20%3A%3D%20aStream%20position.%0A%09result%20%3A%3D%20aStream%20next%3A%20self%20string%20size.%0A%09%5Eresult%20%3D%20self%20string%0A%09%20%20%20%20ifTrue%3A%20%5Bresult%5D%0A%09%20%20%20%20ifFalse%3A%20%5B%0A%09%09aStream%20position%3A%20position.%0A%09%09PPFailure%20new%20reason%3A%20%27Expected%20%27%2C%20self%20string%2C%20%27%20but%20got%20%27%2C%20%28result%20at%3A%20position%29%20printString%3B%20yourself%5D'), messageSends: ["position", "next:", "size", "string", "ifTrue:ifFalse:", unescape("%3D"), "position:", "reason:", unescape("%2C"), "printString", "at:", "yourself", "new"], referencedClasses: [smalltalk.PPFailure] }), smalltalk.PPStringParser); smalltalk.addClass('PPCharacterParser', smalltalk.PPParser, ['regexp'], 'Parser'); smalltalk.addMethod( '_string_', smalltalk.method({ selector: 'string:', category: 'accessing', fn: function (aString){ var self=this; self['@regexp']=smalltalk.send((smalltalk.RegularExpression || RegularExpression), "_fromString_", [smalltalk.send(smalltalk.send(unescape("%5B"), "__comma", [aString]), "__comma", [unescape("%5D")])]); return self;}, source: unescape('string%3A%20aString%0A%09regexp%20%3A%3D%20RegularExpression%20fromString%3A%20%27%5B%27%2C%20aString%2C%20%27%5D%27'), messageSends: ["fromString:", unescape("%2C")], referencedClasses: [smalltalk.RegularExpression] }), smalltalk.PPCharacterParser); smalltalk.addMethod( '_parse_', smalltalk.method({ selector: 'parse:', category: 'parsing', fn: function (aStream){ var self=this; return (($receiver = smalltalk.send(smalltalk.send(smalltalk.send(aStream, "_peek", []), "_notNil", []), "_and_", [(function(){return smalltalk.send(self, "_match_", [smalltalk.send(aStream, "_peek", [])]);})])).klass === smalltalk.Boolean) ? ($receiver ? (function(){return smalltalk.send(aStream, "_next", []);})() : (function(){return smalltalk.send(smalltalk.send((smalltalk.PPFailure || PPFailure), "_new", []), "_reason_at_", ["Could not match", smalltalk.send(aStream, "_position", [])]);})()) : smalltalk.send($receiver, "_ifTrue_ifFalse_", [(function(){return smalltalk.send(aStream, "_next", []);}), (function(){return smalltalk.send(smalltalk.send((smalltalk.PPFailure || PPFailure), "_new", []), "_reason_at_", ["Could not match", smalltalk.send(aStream, "_position", [])]);})]); return self;}, source: unescape('parse%3A%20aStream%0A%09%5E%28aStream%20peek%20notNil%20and%3A%20%5Bself%20match%3A%20aStream%20peek%5D%29%0A%09%20%20%20%20ifTrue%3A%20%5BaStream%20next%5D%0A%09%20%20%20%20ifFalse%3A%20%5BPPFailure%20new%20reason%3A%20%27Could%20not%20match%27%20at%3A%20aStream%20position%5D'), messageSends: ["ifTrue:ifFalse:", "and:", "notNil", "peek", "match:", "next", "reason:at:", "new", "position"], referencedClasses: [smalltalk.PPFailure] }), smalltalk.PPCharacterParser); smalltalk.addMethod( '_match_', smalltalk.method({ selector: 'match:', category: 'private', fn: function (aString){ var self=this; return smalltalk.send(aString, "_match_", [self['@regexp']]); return self;}, source: unescape('match%3A%20aString%0A%09%5EaString%20match%3A%20regexp'), messageSends: ["match:"], referencedClasses: [] }), smalltalk.PPCharacterParser); smalltalk.addClass('PPListParser', smalltalk.PPParser, ['parsers'], 'Parser'); smalltalk.addMethod( '_parsers', smalltalk.method({ selector: 'parsers', category: 'accessing', fn: function (){ var self=this; return (($receiver = self['@parsers']) == nil || $receiver == undefined) ? (function(){return [];})() : $receiver; return self;}, source: unescape('parsers%0A%09%5Eparsers%20ifNil%3A%20%5B%23%28%29%5D'), messageSends: ["ifNil:"], referencedClasses: [] }), smalltalk.PPListParser); smalltalk.addMethod( '_parsers_', smalltalk.method({ selector: 'parsers:', category: 'accessing', fn: function (aCollection){ var self=this; self['@parsers']=aCollection; return self;}, source: unescape('parsers%3A%20aCollection%0A%09parsers%20%3A%3D%20aCollection'), messageSends: [], referencedClasses: [] }), smalltalk.PPListParser); smalltalk.addMethod( '_copyWith_', smalltalk.method({ selector: 'copyWith:', category: 'copying', fn: function (aParser){ var self=this; return smalltalk.send(smalltalk.send(self, "_class", []), "_withAll_", [smalltalk.send(smalltalk.send(self, "_parsers", []), "_copyWith_", [aParser])]); return self;}, source: unescape('copyWith%3A%20aParser%0A%09%5Eself%20class%20withAll%3A%20%28self%20parsers%20copyWith%3A%20aParser%29'), messageSends: ["withAll:", "class", "copyWith:", "parsers"], referencedClasses: [] }), smalltalk.PPListParser); smalltalk.addMethod( '_withAll_', smalltalk.method({ selector: 'withAll:', category: 'instance creation', fn: function (aCollection){ var self=this; return (function($rec){smalltalk.send($rec, "_parsers_", [aCollection]);return smalltalk.send($rec, "_yourself", []);})(smalltalk.send(self, "_new", [])); return self;}, source: unescape('withAll%3A%20aCollection%0A%09%20%20%20%20%5Eself%20new%0A%09%09parsers%3A%20aCollection%3B%0A%09%09yourself'), messageSends: ["parsers:", "yourself", "new"], referencedClasses: [] }), smalltalk.PPListParser.klass); smalltalk.addMethod( '_with_with_', smalltalk.method({ selector: 'with:with:', category: 'instance creation', fn: function (aParser, anotherParser){ var self=this; return smalltalk.send(self, "_withAll_", [smalltalk.send((smalltalk.Array || Array), "_with_with_", [aParser, anotherParser])]); return self;}, source: unescape('with%3A%20aParser%20with%3A%20anotherParser%0A%09%20%20%20%20%5Eself%20withAll%3A%20%28Array%20with%3A%20aParser%20with%3A%20anotherParser%29'), messageSends: ["withAll:", "with:with:"], referencedClasses: [smalltalk.Array] }), smalltalk.PPListParser.klass); smalltalk.addClass('PPSequenceParser', smalltalk.PPListParser, [], 'Parser'); smalltalk.addMethod( '__comma', smalltalk.method({ selector: ',', category: 'copying', fn: function (aRule){ var self=this; return smalltalk.send(self, "_copyWith_", [aRule]); return self;}, source: unescape('%2C%20aRule%0A%09%5Eself%20copyWith%3A%20aRule'), messageSends: ["copyWith:"], referencedClasses: [] }), smalltalk.PPSequenceParser); smalltalk.addMethod( '_parse_', smalltalk.method({ selector: 'parse:', category: 'parsing', fn: function (aStream){ var self=this; var start=nil; var elements=nil; var element=nil; start=smalltalk.send(aStream, "_position", []); elements=[]; smalltalk.send(smalltalk.send(self, "_parsers", []), "_detect_ifNone_", [(function(each){element=smalltalk.send(each, "_memoizedParse_", [aStream]);smalltalk.send(elements, "_add_", [element]);return smalltalk.send(element, "_isParseFailure", []);}), (function(){return nil;})]); return (($receiver = smalltalk.send(element, "_isParseFailure", [])).klass === smalltalk.Boolean) ? (! $receiver ? (function(){return elements;})() : (function(){smalltalk.send(aStream, "_position_", [start]);return element;})()) : smalltalk.send($receiver, "_ifFalse_ifTrue_", [(function(){return elements;}), (function(){smalltalk.send(aStream, "_position_", [start]);return element;})]); return self;}, source: unescape('parse%3A%20aStream%0A%09%7C%20start%20elements%20element%20%7C%0A%09start%20%3A%3D%20aStream%20position.%0A%09elements%20%3A%3D%20%23%28%29.%0A%09self%20parsers%20%0A%09%20%20%20%20detect%3A%20%5B%3Aeach%20%7C%0A%09%09element%20%3A%3D%20each%20memoizedParse%3A%20aStream.%0A%09%09elements%20add%3A%20element.%0A%09%09element%20isParseFailure%5D%20%0A%09%20%20%20%20ifNone%3A%20%5B%5D.%0A%09%5Eelement%20isParseFailure%0A%09%20%20%20%20ifFalse%3A%20%5Belements%5D%0A%09%20%20%20%20ifTrue%3A%20%5BaStream%20position%3A%20start.%20element%5D'), messageSends: ["position", "detect:ifNone:", "parsers", "memoizedParse:", "add:", "isParseFailure", "ifFalse:ifTrue:", "position:"], referencedClasses: [] }), smalltalk.PPSequenceParser); smalltalk.addClass('PPChoiceParser', smalltalk.PPListParser, [], 'Parser'); smalltalk.addMethod( '__slash', smalltalk.method({ selector: '/', category: 'copying', fn: function (aRule){ var self=this; return smalltalk.send(self, "_copyWith_", [aRule]); return self;}, source: unescape('/%20aRule%0A%09%5Eself%20copyWith%3A%20aRule'), messageSends: ["copyWith:"], referencedClasses: [] }), smalltalk.PPChoiceParser); smalltalk.addMethod( '_parse_', smalltalk.method({ selector: 'parse:', category: 'parsing', fn: function (aStream){ var self=this; var result=nil; smalltalk.send(smalltalk.send(self, "_parsers", []), "_detect_ifNone_", [(function(each){result=smalltalk.send(each, "_memoizedParse_", [aStream]);return smalltalk.send(smalltalk.send(result, "_isParseFailure", []), "_not", []);}), (function(){return nil;})]); return result; return self;}, source: unescape('parse%3A%20aStream%0A%09%7C%20result%20%7C%0A%09self%20parsers%0A%20%20%20%20%09%20%20%20%20detect%3A%20%5B%3Aeach%20%7C%0A%09%09result%20%3A%3D%20each%20memoizedParse%3A%20aStream.%0A%09%09result%20isParseFailure%20not%5D%0A%09%20%20%20%20ifNone%3A%20%5B%5D.%0A%09%5Eresult'), messageSends: ["detect:ifNone:", "parsers", "memoizedParse:", "not", "isParseFailure"], referencedClasses: [] }), smalltalk.PPChoiceParser); smalltalk.addClass('PPDelegateParser', smalltalk.PPParser, ['parser'], 'Parser'); smalltalk.addMethod( '_parser', smalltalk.method({ selector: 'parser', category: 'accessing', fn: function (){ var self=this; return self['@parser']; return self;}, source: unescape('parser%0A%09%5Eparser'), messageSends: [], referencedClasses: [] }), smalltalk.PPDelegateParser); smalltalk.addMethod( '_parser_', smalltalk.method({ selector: 'parser:', category: 'accessing', fn: function (aParser){ var self=this; self['@parser']=aParser; return self;}, source: unescape('parser%3A%20aParser%0A%09parser%20%3A%3D%20aParser'), messageSends: [], referencedClasses: [] }), smalltalk.PPDelegateParser); smalltalk.addMethod( '_parse_', smalltalk.method({ selector: 'parse:', category: 'parsing', fn: function (aStream){ var self=this; return smalltalk.send(smalltalk.send(self, "_parser", []), "_memoizedParse_", [aStream]); return self;}, source: unescape('parse%3A%20aStream%0A%09%5Eself%20parser%20memoizedParse%3A%20aStream'), messageSends: ["memoizedParse:", "parser"], referencedClasses: [] }), smalltalk.PPDelegateParser); smalltalk.addMethod( '_on_', smalltalk.method({ selector: 'on:', category: 'instance creation', fn: function (aParser){ var self=this; return (function($rec){smalltalk.send($rec, "_parser_", [aParser]);return smalltalk.send($rec, "_yourself", []);})(smalltalk.send(self, "_new", [])); return self;}, source: unescape('on%3A%20aParser%0A%09%20%20%20%20%5Eself%20new%0A%09%09parser%3A%20aParser%3B%0A%09%09yourself'), messageSends: ["parser:", "yourself", "new"], referencedClasses: [] }), smalltalk.PPDelegateParser.klass); smalltalk.addClass('PPAndParser', smalltalk.PPDelegateParser, [], 'Parser'); smalltalk.addMethod( '_parse_', smalltalk.method({ selector: 'parse:', category: 'parsing', fn: function (aStream){ var self=this; return smalltalk.send(self, "_basicParse_", [aStream]); return self;}, source: unescape('parse%3A%20aStream%0A%09%5Eself%20basicParse%3A%20aStream'), messageSends: ["basicParse:"], referencedClasses: [] }), smalltalk.PPAndParser); smalltalk.addMethod( '_basicParse_', smalltalk.method({ selector: 'basicParse:', category: 'parsing', fn: function (aStream){ var self=this; var element=nil; var position=nil; position=smalltalk.send(aStream, "_position", []); element=smalltalk.send(smalltalk.send(self, "_parser", []), "_memoizedParse_", [aStream]); smalltalk.send(aStream, "_position_", [position]); return element; return self;}, source: unescape('basicParse%3A%20aStream%0A%09%7C%20element%20position%20%7C%0A%09position%20%3A%3D%20aStream%20position.%0A%09element%20%3A%3D%20self%20parser%20memoizedParse%3A%20aStream.%0A%09aStream%20position%3A%20position.%0A%09%5Eelement'), messageSends: ["position", "memoizedParse:", "parser", "position:"], referencedClasses: [] }), smalltalk.PPAndParser); smalltalk.addClass('PPNotParser', smalltalk.PPAndParser, [], 'Parser'); smalltalk.addMethod( '_parse_', smalltalk.method({ selector: 'parse:', category: 'parsing', fn: function (aStream){ var self=this; var element=nil; element=smalltalk.send(self, "_basicParse_", [aStream]); return (($receiver = smalltalk.send(element, "_isParseFailure", [])).klass === smalltalk.Boolean) ? ($receiver ? (function(){return nil;})() : (function(){return smalltalk.send((smalltalk.PPFailure || PPFailure), "_reason_at_", [element, smalltalk.send(aStream, "_position", [])]);})()) : smalltalk.send($receiver, "_ifTrue_ifFalse_", [(function(){return nil;}), (function(){return smalltalk.send((smalltalk.PPFailure || PPFailure), "_reason_at_", [element, smalltalk.send(aStream, "_position", [])]);})]); return self;}, source: unescape('parse%3A%20aStream%0A%09%7C%20element%20%7C%0A%09element%20%3A%3D%20self%20basicParse%3A%20aStream.%0A%09%5Eelement%20isParseFailure%20%0A%09%20%20%20%20ifTrue%3A%20%5Bnil%5D%0A%09%20%20%20%20ifFalse%3A%20%5BPPFailure%20reason%3A%20element%20at%3A%20aStream%20position%5D'), messageSends: ["basicParse:", "ifTrue:ifFalse:", "isParseFailure", "reason:at:", "position"], referencedClasses: [smalltalk.PPFailure] }), smalltalk.PPNotParser); smalltalk.addClass('PPActionParser', smalltalk.PPDelegateParser, ['block'], 'Parser'); smalltalk.addMethod( '_block', smalltalk.method({ selector: 'block', category: 'accessing', fn: function (){ var self=this; return self['@block']; return self;}, source: unescape('block%0A%09%5Eblock'), messageSends: [], referencedClasses: [] }), smalltalk.PPActionParser); smalltalk.addMethod( '_block_', smalltalk.method({ selector: 'block:', category: 'accessing', fn: function (aBlock){ var self=this; self['@block']=aBlock; return self;}, source: unescape('block%3A%20aBlock%0A%09block%20%3A%3D%20aBlock'), messageSends: [], referencedClasses: [] }), smalltalk.PPActionParser); smalltalk.addMethod( '_parse_', smalltalk.method({ selector: 'parse:', category: 'parsing', fn: function (aStream){ var self=this; var element=nil; element=smalltalk.send(smalltalk.send(self, "_parser", []), "_memoizedParse_", [aStream]); return (($receiver = smalltalk.send(element, "_isParseFailure", [])).klass === smalltalk.Boolean) ? (! $receiver ? (function(){return smalltalk.send(smalltalk.send(self, "_block", []), "_value_", [element]);})() : (function(){return element;})()) : smalltalk.send($receiver, "_ifFalse_ifTrue_", [(function(){return smalltalk.send(smalltalk.send(self, "_block", []), "_value_", [element]);}), (function(){return element;})]); return self;}, source: unescape('parse%3A%20aStream%0A%09%7C%20element%20%7C%0A%09element%20%3A%3D%20self%20parser%20memoizedParse%3A%20aStream.%0A%09%5Eelement%20isParseFailure%0A%09%20%20%20%20ifFalse%3A%20%5Bself%20block%20value%3A%20element%5D%0A%09%20%20%20%20ifTrue%3A%20%5Belement%5D'), messageSends: ["memoizedParse:", "parser", "ifFalse:ifTrue:", "isParseFailure", "value:", "block"], referencedClasses: [] }), smalltalk.PPActionParser); smalltalk.addMethod( '_on_block_', smalltalk.method({ selector: 'on:block:', category: 'instance creation', fn: function (aParser, aBlock){ var self=this; return (function($rec){smalltalk.send($rec, "_parser_", [aParser]);smalltalk.send($rec, "_block_", [aBlock]);return smalltalk.send($rec, "_yourself", []);})(smalltalk.send(self, "_new", [])); return self;}, source: unescape('on%3A%20aParser%20block%3A%20aBlock%0A%09%20%20%20%20%5Eself%20new%0A%09%09parser%3A%20aParser%3B%0A%09%09block%3A%20aBlock%3B%0A%09%09yourself'), messageSends: ["parser:", "block:", "yourself", "new"], referencedClasses: [] }), smalltalk.PPActionParser.klass); smalltalk.addClass('PPFlattenParser', smalltalk.PPDelegateParser, [], 'Parser'); smalltalk.addMethod( '_parse_', smalltalk.method({ selector: 'parse:', category: 'parsing', fn: function (aStream){ var self=this; var start=nil; var element=nil; var stop=nil; start=smalltalk.send(aStream, "_position", []); element=smalltalk.send(smalltalk.send(self, "_parser", []), "_memoizedParse_", [aStream]); return (($receiver = smalltalk.send(element, "_isParseFailure", [])).klass === smalltalk.Boolean) ? ($receiver ? (function(){return element;})() : (function(){return smalltalk.send(smalltalk.send(aStream, "_collection", []), "_copyFrom_to_", [(($receiver = start).klass === smalltalk.Number) ? $receiver +(1) : smalltalk.send($receiver, "__plus", [(1)]), smalltalk.send(aStream, "_position", [])]);})()) : smalltalk.send($receiver, "_ifTrue_ifFalse_", [(function(){return element;}), (function(){return smalltalk.send(smalltalk.send(aStream, "_collection", []), "_copyFrom_to_", [(($receiver = start).klass === smalltalk.Number) ? $receiver +(1) : smalltalk.send($receiver, "__plus", [(1)]), smalltalk.send(aStream, "_position", [])]);})]); return self;}, source: unescape('parse%3A%20aStream%0A%09%7C%20start%20element%20stop%20%7C%0A%09start%20%3A%3D%20aStream%20position.%0A%09element%20%3A%3D%20self%20parser%20memoizedParse%3A%20aStream.%0A%09%5Eelement%20isParseFailure%0A%09%20%20%20%20ifTrue%3A%20%5Belement%5D%0A%09%20%20%20%20ifFalse%3A%20%5BaStream%20collection%20%0A%09%09copyFrom%3A%20start%20+%201%20%0A%09%09to%3A%20aStream%20position%5D'), messageSends: ["position", "memoizedParse:", "parser", "ifTrue:ifFalse:", "isParseFailure", "copyFrom:to:", "collection", unescape("+")], referencedClasses: [] }), smalltalk.PPFlattenParser); smalltalk.addClass('PPSourceParser', smalltalk.PPDelegateParser, [], 'Parser'); smalltalk.addMethod( '_parse_', smalltalk.method({ selector: 'parse:', category: 'parsing', fn: function (aStream){ var self=this; var start=nil; var element=nil; var stop=nil; var result=nil; start=smalltalk.send(aStream, "_position", []); element=smalltalk.send(smalltalk.send(self, "_parser", []), "_memoizedParse_", [aStream]); return (($receiver = smalltalk.send(element, "_isParseFailure", [])).klass === smalltalk.Boolean) ? ($receiver ? (function(){return element;})() : (function(){result=smalltalk.send(smalltalk.send(aStream, "_collection", []), "_copyFrom_to_", [(($receiver = start).klass === smalltalk.Number) ? $receiver +(1) : smalltalk.send($receiver, "__plus", [(1)]), smalltalk.send(aStream, "_position", [])]);return smalltalk.send((smalltalk.Array || Array), "_with_with_", [element, result]);})()) : smalltalk.send($receiver, "_ifTrue_ifFalse_", [(function(){return element;}), (function(){result=smalltalk.send(smalltalk.send(aStream, "_collection", []), "_copyFrom_to_", [(($receiver = start).klass === smalltalk.Number) ? $receiver +(1) : smalltalk.send($receiver, "__plus", [(1)]), smalltalk.send(aStream, "_position", [])]);return smalltalk.send((smalltalk.Array || Array), "_with_with_", [element, result]);})]); return self;}, source: unescape('parse%3A%20aStream%0A%09%7C%20start%20element%20stop%20result%20%7C%0A%09start%20%3A%3D%20aStream%20position.%0A%09element%20%3A%3D%20self%20parser%20memoizedParse%3A%20aStream.%0A%09%5Eelement%20isParseFailure%0A%09%09ifTrue%3A%20%5Belement%5D%0A%09%09ifFalse%3A%20%5Bresult%20%3A%3D%20aStream%20collection%20copyFrom%3A%20start%20+%201%20to%3A%20aStream%20position.%0A%09%09%09Array%20with%3A%20element%20with%3A%20result%5D.'), messageSends: ["position", "memoizedParse:", "parser", "ifTrue:ifFalse:", "isParseFailure", "copyFrom:to:", "collection", unescape("+"), "with:with:"], referencedClasses: [smalltalk.Array] }), smalltalk.PPSourceParser); smalltalk.addClass('PPRepeatingParser', smalltalk.PPDelegateParser, ['min'], 'Parser'); smalltalk.addMethod( '_min', smalltalk.method({ selector: 'min', category: 'accessing', fn: function (){ var self=this; return self['@min']; return self;}, source: unescape('min%0A%09%5Emin'), messageSends: [], referencedClasses: [] }), smalltalk.PPRepeatingParser); smalltalk.addMethod( '_min_', smalltalk.method({ selector: 'min:', category: 'accessing', fn: function (aNumber){ var self=this; self['@min']=aNumber; return self;}, source: unescape('min%3A%20aNumber%0A%09min%20%3A%3D%20aNumber'), messageSends: [], referencedClasses: [] }), smalltalk.PPRepeatingParser); smalltalk.addMethod( '_parse_', smalltalk.method({ selector: 'parse:', category: 'parsing', fn: function (aStream){ var self=this; var start=nil; var element=nil; var elements=nil; var failure=nil; start=smalltalk.send(aStream, "_position", []); elements=smalltalk.send((smalltalk.Array || Array), "_new", []); (function(){while((function(){return smalltalk.send((($receiver = smalltalk.send(elements, "_size", [])).klass === smalltalk.Number) ? $receiver