smalltalk.addClass('PPParser', smalltalk.Object, ['memo'], 'Parser'); smalltalk.addMethod( '_initialize', smalltalk.method({ selector: 'initialize', fn: function (){ var self=this; self['@memo']=smalltalk.send((smalltalk.Dictionary || Dictionary), "_new", []); return self;} }), smalltalk.PPParser); smalltalk.addMethod( '_memo', smalltalk.method({ selector: 'memo', fn: function (){ var self=this; return self['@memo']; return self;} }), smalltalk.PPParser); smalltalk.addMethod( '_flatten', smalltalk.method({ selector: 'flatten', fn: function (){ var self=this; return smalltalk.send((smalltalk.PPFlattenParser || PPFlattenParser), "_on_", [self]); return self;} }), smalltalk.PPParser); smalltalk.addMethod( '_withSource', smalltalk.method({ selector: 'withSource', fn: function (){ var self=this; return smalltalk.send((smalltalk.PPSourceParser || PPSourceParser), "_on_", [self]); return self;} }), smalltalk.PPParser); smalltalk.addMethod( '__eq_eq_gt', smalltalk.method({ selector: '==>', fn: function (aBlock){ var self=this; return smalltalk.send((smalltalk.PPActionParser || PPActionParser), "_on_block_", [self, aBlock]); return self;} }), smalltalk.PPParser); smalltalk.addMethod( '__comma', smalltalk.method({ selector: ',', fn: function (aParser){ var self=this; return smalltalk.send((smalltalk.PPSequenceParser || PPSequenceParser), "_with_with_", [self, aParser]); return self;} }), smalltalk.PPParser); smalltalk.addMethod( '__slash', smalltalk.method({ selector: '/', fn: function (aParser){ var self=this; return smalltalk.send((smalltalk.PPChoiceParser || PPChoiceParser), "_with_with_", [self, aParser]); return self;} }), smalltalk.PPParser); smalltalk.addMethod( '_plus', smalltalk.method({ selector: 'plus', fn: function (){ var self=this; return smalltalk.send((smalltalk.PPRepeatingParser || PPRepeatingParser), "_on_min_", [self, (1)]); return self;} }), smalltalk.PPParser); smalltalk.addMethod( '_star', smalltalk.method({ selector: 'star', fn: function (){ var self=this; return smalltalk.send((smalltalk.PPRepeatingParser || PPRepeatingParser), "_on_min_", [self, (0)]); return self;} }), smalltalk.PPParser); smalltalk.addMethod( '_not', smalltalk.method({ selector: 'not', fn: function (){ var self=this; return smalltalk.send((smalltalk.PPNotParser || PPNotParser), "_on_", [self]); return self;} }), smalltalk.PPParser); smalltalk.addMethod( '_optional', smalltalk.method({ selector: 'optional', 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;} }), smalltalk.PPParser); smalltalk.addMethod( '_memoizedParse_', smalltalk.method({ selector: 'memoizedParse:', fn: function (aStream){ var self=this; var start=nil; var end=nil; var node=nil; start=smalltalk.send(aStream, "_position", []); return 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 self;} }), smalltalk.PPParser); smalltalk.addMethod( '_parse_', smalltalk.method({ selector: 'parse:', fn: function (aStream){ var self=this; smalltalk.send(self, "_subclassResponsibility", []); return self;} }), smalltalk.PPParser); smalltalk.addMethod( '_parseAll_', smalltalk.method({ selector: 'parseAll:', 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;} }), smalltalk.PPParser); smalltalk.addClass('PPEOFParser', smalltalk.PPParser, [], 'Parser'); smalltalk.addMethod( '_parse_', smalltalk.method({ selector: 'parse:', 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;} }), smalltalk.PPEOFParser); smalltalk.addClass('PPAnyParser', smalltalk.PPParser, [], 'Parser'); smalltalk.addMethod( '_parse_', smalltalk.method({ selector: 'parse:', 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;} }), smalltalk.PPAnyParser); smalltalk.addClass('PPEpsilonParser', smalltalk.PPParser, [], 'Parser'); smalltalk.addMethod( '_parse_', smalltalk.method({ selector: 'parse:', fn: function (aStream){ var self=this; return nil; return self;} }), smalltalk.PPEpsilonParser); smalltalk.addClass('PPStringParser', smalltalk.PPParser, ['string'], 'Parser'); smalltalk.addMethod( '_string', smalltalk.method({ selector: 'string', fn: function (){ var self=this; return self['@string']; return self;} }), smalltalk.PPStringParser); smalltalk.addMethod( '_string_', smalltalk.method({ selector: 'string:', fn: function (aString){ var self=this; self['@string']=aString; return self;} }), smalltalk.PPStringParser); smalltalk.addMethod( '_parse_', smalltalk.method({ selector: 'parse:', 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;} }), smalltalk.PPStringParser); smalltalk.addClass('PPCharacterParser', smalltalk.PPParser, ['regexp'], 'Parser'); smalltalk.addMethod( '_string_', smalltalk.method({ selector: 'string:', 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;} }), smalltalk.PPCharacterParser); smalltalk.addMethod( '_parse_', smalltalk.method({ selector: 'parse:', 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;} }), smalltalk.PPCharacterParser); smalltalk.addMethod( '_match_', smalltalk.method({ selector: 'match:', fn: function (aString){ var self=this; return smalltalk.send(aString, "_match_", [self['@regexp']]); return self;} }), smalltalk.PPCharacterParser); smalltalk.addClass('PPListParser', smalltalk.PPParser, ['parsers'], 'Parser'); smalltalk.addMethod( '_parsers', smalltalk.method({ selector: 'parsers', fn: function (){ var self=this; return (($receiver = self['@parsers']) == nil || $receiver == undefined) ? (function(){return [];})() : $receiver; return self;} }), smalltalk.PPListParser); smalltalk.addMethod( '_parsers_', smalltalk.method({ selector: 'parsers:', fn: function (aCollection){ var self=this; self['@parsers']=aCollection; return self;} }), smalltalk.PPListParser); smalltalk.addMethod( '_copyWith_', smalltalk.method({ selector: 'copyWith:', fn: function (aParser){ var self=this; return smalltalk.send(smalltalk.send(self, "_class", []), "_withAll_", [smalltalk.send(smalltalk.send(self, "_parsers", []), "_copyWith_", [aParser])]); return self;} }), smalltalk.PPListParser); smalltalk.addMethod( '_withAll_', smalltalk.method({ selector: 'withAll:', 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;} }), smalltalk.PPListParser.klass); smalltalk.addMethod( '_with_with_', smalltalk.method({ selector: 'with:with:', fn: function (aParser, anotherParser){ var self=this; return smalltalk.send(self, "_withAll_", [smalltalk.send((smalltalk.Array || Array), "_with_with_", [aParser, anotherParser])]); return self;} }), smalltalk.PPListParser.klass); smalltalk.addClass('PPSequenceParser', smalltalk.PPListParser, [], 'Parser'); smalltalk.addMethod( '__comma', smalltalk.method({ selector: ',', fn: function (aRule){ var self=this; return smalltalk.send(self, "_copyWith_", [aRule]); return self;} }), smalltalk.PPSequenceParser); smalltalk.addMethod( '_parse_', smalltalk.method({ selector: 'parse:', 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;} }), smalltalk.PPSequenceParser); smalltalk.addClass('PPChoiceParser', smalltalk.PPListParser, [], 'Parser'); smalltalk.addMethod( '__slash', smalltalk.method({ selector: '/', fn: function (aRule){ var self=this; return smalltalk.send(self, "_copyWith_", [aRule]); return self;} }), smalltalk.PPChoiceParser); smalltalk.addMethod( '_parse_', smalltalk.method({ selector: 'parse:', 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;} }), smalltalk.PPChoiceParser); smalltalk.addClass('PPDelegateParser', smalltalk.PPParser, ['parser'], 'Parser'); smalltalk.addMethod( '_parser', smalltalk.method({ selector: 'parser', fn: function (){ var self=this; return self['@parser']; return self;} }), smalltalk.PPDelegateParser); smalltalk.addMethod( '_parser_', smalltalk.method({ selector: 'parser:', fn: function (aParser){ var self=this; self['@parser']=aParser; return self;} }), smalltalk.PPDelegateParser); smalltalk.addMethod( '_parse_', smalltalk.method({ selector: 'parse:', fn: function (aStream){ var self=this; return smalltalk.send(smalltalk.send(self, "_parser", []), "_memoizedParse_", [aStream]); return self;} }), smalltalk.PPDelegateParser); smalltalk.addMethod( '_on_', smalltalk.method({ selector: 'on:', 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;} }), smalltalk.PPDelegateParser.klass); smalltalk.addClass('PPAndParser', smalltalk.PPDelegateParser, [], 'Parser'); smalltalk.addMethod( '_parse_', smalltalk.method({ selector: 'parse:', fn: function (aStream){ var self=this; return smalltalk.send(self, "_basicParse_", [aStream]); return self;} }), smalltalk.PPAndParser); smalltalk.addMethod( '_basicParse_', smalltalk.method({ selector: 'basicParse:', 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;} }), smalltalk.PPAndParser); smalltalk.addClass('PPNotParser', smalltalk.PPAndParser, [], 'Parser'); smalltalk.addMethod( '_parse_', smalltalk.method({ selector: 'parse:', 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;} }), smalltalk.PPNotParser); smalltalk.addClass('PPActionParser', smalltalk.PPDelegateParser, ['block'], 'Parser'); smalltalk.addMethod( '_block', smalltalk.method({ selector: 'block', fn: function (){ var self=this; return self['@block']; return self;} }), smalltalk.PPActionParser); smalltalk.addMethod( '_block_', smalltalk.method({ selector: 'block:', fn: function (aBlock){ var self=this; self['@block']=aBlock; return self;} }), smalltalk.PPActionParser); smalltalk.addMethod( '_parse_', smalltalk.method({ selector: 'parse:', 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;} }), smalltalk.PPActionParser); smalltalk.addMethod( '_on_block_', smalltalk.method({ selector: 'on:block:', 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;} }), smalltalk.PPActionParser.klass); smalltalk.addClass('PPFlattenParser', smalltalk.PPDelegateParser, [], 'Parser'); smalltalk.addMethod( '_parse_', smalltalk.method({ selector: 'parse:', 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;} }), smalltalk.PPFlattenParser); smalltalk.addClass('PPSourceParser', smalltalk.PPDelegateParser, [], 'Parser'); smalltalk.addMethod( '_parse_', smalltalk.method({ selector: 'parse:', 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;} }), smalltalk.PPSourceParser); smalltalk.addClass('PPRepeatingParser', smalltalk.PPDelegateParser, ['min'], 'Parser'); smalltalk.addMethod( '_min', smalltalk.method({ selector: 'min', fn: function (){ var self=this; return self['@min']; return self;} }), smalltalk.PPRepeatingParser); smalltalk.addMethod( '_min_', smalltalk.method({ selector: 'min:', fn: function (aNumber){ var self=this; self['@min']=aNumber; return self;} }), smalltalk.PPRepeatingParser); smalltalk.addMethod( '_parse_', smalltalk.method({ selector: 'parse:', 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