PK÷®(6“×2EGG-INFO/dependency_links.txt PK÷®(6RŸ˼¼EGG-INFO/PKG-INFOMetadata-Version: 1.0 Name: ZestyParser Version: 0.5.1 Summary: A simple but highly flexible approach to parsing Home-page: http://adamatlas.org/2006/12/ZestyParser Author: Adam Atlas Author-email: adam@atlas.st License: GPL Description: ZestyParser is a small parsing toolkit for Python. It doesn't use the traditional separated lexer/parser approach, nor does it make you learn a new ugly syntax for specifying grammar. It is based entirely on Python regular expressions and callbacks; its flow is very simple, but can accomodate a vast array of parsing situations. Platform: UNKNOWN Classifier: Development Status :: 4 - Beta Classifier: Intended Audience :: Developers Classifier: License :: OSI Approved :: GNU General Public License (GPL) Classifier: Natural Language :: English Classifier: Programming Language :: Python Classifier: Topic :: Software Development :: Libraries :: Python Modules Classifier: Topic :: Text Processing PK÷®(6/ḜœEGG-INFO/SOURCES.txtCHANGES.txt Docs.html Docs.text LICENSE.txt MANIFEST.in setup.py ZestyParser/Parser.py ZestyParser/Tokens.py ZestyParser/__init__.py ZestyParser.egg-info/PKG-INFO ZestyParser.egg-info/SOURCES.txt ZestyParser.egg-info/dependency_links.txt ZestyParser.egg-info/top_level.txt examples/bdecode.py examples/calcy.py examples/phpserialize.py examples/plist.py examples/sexp-bench.py examples/sexp.py examples/testy.py PK÷®(6µ& EGG-INFO/top_level.txtZestyParser PK÷®(6“×2EGG-INFO/zip-safe PKºŸ5>à³OAAZestyParser/__init__.py# ZestyParser 0.5.0 -- Parses in Python zestily # Copyright (C) 2006 Adam Atlas # # This program is free software; you can redistribute it and/or # modify it under the terms of the GNU General Public License # as published by the Free Software Foundation; either version 2 # of the License, or (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. from Parser import * from Tokens import *PK÷®(6†½QdººZestyParser/__init__.pyc;ò ‹˜Ec@sdkTdkTdS((s*N(sParsersTokens(((s9build/bdist.darwin-8.8.2-i386/egg/ZestyParser/__init__.pys?sPK5‚(6W 1j¼ ¼ ZestyParser/Parser.py# ZestyParser 0.5.1 -- Parses in Python zestily # Copyright (C) 2006 Adam Atlas # # This program is free software; you can redistribute it and/or # modify it under the terms of the GNU General Public License # as published by the Free Software Foundation; either version 2 # of the License, or (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. import re, copy __all__ = ('ZestyParser', 'NotMatched', 'ParseError', 'EOF', 'ReturnRaw', 'CallbackFor') class Error(Exception): pass class NotMatched(Error): pass class ParseError(Error): def __init__(self, parser, message): self.parser, self.message, self.coord = parser, message, parser.coord() def __str__(self): return "%s at line %i column %i" % (self.message, self.coord[0], self.coord[1]) def EOF(parser, origCursor): if parser.cursor != parser.len: raise NotMatched def ReturnRaw(matches): return matches.group() class CallbackFor: def __init__(self, token): self.token = token def __call__(self, func): self.token.callback = func return self.token class ZestyParser: tokens = {} data = None cursor = 0 len = 0 def __init__(self, data=None): if data: self.useData(data) self.last = None def useData(self, data): self.data = data self.cursor = 0 self.len = len(data) def addTokens(self, *tokens, **moreTokens): for t in tokens: self.tokens[t.name] = t for n in moreTokens: self.tokens[n] = moreTokens[n] def scan(self, tokens): if not hasattr(tokens, '__iter__'): tokens = (tokens,) for t in tokens: oldCursor = self.cursor try: r = t(self, oldCursor) self.last = t return r except NotMatched: self.cursor = oldCursor if hasattr(t, 'failMessage') and t.failMessage: raise ParseError(self, t.failMessage) self.last = None return None def skip(self, t): oldCursor = self.cursor try: t(self, oldCursor) except NotMatched: self.cursor = oldCursor if hasattr(t, 'failMessage') and t.failMessage: raise ParseError(self, t.failMessage) else: return False return True def iter(self, tokens, skip=None, until=None): return ParserIterator(tokens, self, skip, until) def coord(self, loc=None): if loc is None: loc = self.cursor row = self.data.count('\n', 0, loc) col = loc - self.data.rfind('\n', 0, loc) return (row + 1, col) class ParserIterator: def __init__(self, tokens, parser, skip=None, until=None): self.tokens, self.parser, self.skip, self.until = tokens, parser, skip, until def __iter__(self): return self def next(self): if self.skip: self.parser.skip(self.skip) if self.until and self.parser.skip(self.until[0]): raise StopIteration r = self.parser.scan(self.tokens) if self.parser.last is None: if self.until: raise ParseError(self.parser, self.until[1]) else: raise StopIteration return r PK÷®(6ê©×ÊggZestyParser/Parser.pyc;ò ö´¢Ec@s»dkZdkZddddddfZdefd„ƒYZdefd „ƒYZdefd „ƒYZd „Zd „Zdfd „ƒYZ dfd„ƒYZ dfd„ƒYZ dS(Ns ZestyParsers NotMatcheds ParseErrorsEOFs ReturnRaws CallbackForsErrorcBstZRS(N(s__name__s __module__(((s7build/bdist.darwin-8.8.2-i386/egg/ZestyParser/Parser.pysErrorscBstZRS(N(s__name__s __module__(((s7build/bdist.darwin-8.8.2-i386/egg/ZestyParser/Parser.pys NotMatchedscBstZd„Zd„ZRS(NcCs+|||iƒf\|_|_|_dS(N(sparsersmessagescoordsself(sselfsparsersmessage((s7build/bdist.darwin-8.8.2-i386/egg/ZestyParser/Parser.pys__init__scCs&d|i|id|idfSdS(Ns%s at line %i column %iii(sselfsmessagescoord(sself((s7build/bdist.darwin-8.8.2-i386/egg/ZestyParser/Parser.pys__str__s(s__name__s __module__s__init__s__str__(((s7build/bdist.darwin-8.8.2-i386/egg/ZestyParser/Parser.pys ParseErrors cCs!|i|ijo t‚ndS(N(sparserscursorslens NotMatched(sparsers origCursor((s7build/bdist.darwin-8.8.2-i386/egg/ZestyParser/Parser.pysEOFscCs|iƒSdS(N(smatchessgroup(smatches((s7build/bdist.darwin-8.8.2-i386/egg/ZestyParser/Parser.pys ReturnRaw!scBstZd„Zd„ZRS(NcCs ||_dS(N(stokensself(sselfstoken((s7build/bdist.darwin-8.8.2-i386/egg/ZestyParser/Parser.pys__init__$scCs||i_|iSdS(N(sfuncsselfstokenscallback(sselfsfunc((s7build/bdist.darwin-8.8.2-i386/egg/ZestyParser/Parser.pys__call__'s (s__name__s __module__s__init__s__call__(((s7build/bdist.darwin-8.8.2-i386/egg/ZestyParser/Parser.pys CallbackFor#s cBsktZhZeZdZdZed„Zd„Zd„Z d„Z d„Z eed„Z ed„Z RS( NicCs%|o|i|ƒnt|_dS(N(sdatasselfsuseDatasNoneslast(sselfsdata((s7build/bdist.darwin-8.8.2-i386/egg/ZestyParser/Parser.pys__init__1scCs%||_d|_t|ƒ|_dS(Ni(sdatasselfscursorslen(sselfsdata((s7build/bdist.darwin-8.8.2-i386/egg/ZestyParser/Parser.pysuseData5s  cOsGx|D]}||i|i= self.min: return self.preprocessResult(parser, o, origCursor) else: raise NotMatched class Defer (AbstractToken): def __init__(self, func, callback=None, name=None): AbstractToken.__init__(self, func, callback, name) def __call__(self, parser, origCursor): t = parser.scan(self.desc()) if parser.last is None: raise NotMatched return t class Skip (AbstractToken): def __init__(self, token, callback=None, name=None): AbstractToken.__init__(self, token, callback, name) def __call__(self, parser, origCursor): parser.skip(self.desc)PK÷®(6†³À“9“9ZestyParser/Tokens.pyc;ò mã¢Ec @s(dkZdkZdklZlZlZdddddddd d d f ZgZdfd „ƒYZdefd „ƒYZ defd„ƒYZ e dƒZ defd„ƒYZ defd„ƒYZ defd„ƒYZdefd„ƒYZd efd„ƒYZd efd„ƒYZdS(N(s NotMatcheds ParseErrorsEOFs AbstractTokensTokensRawTokensCompositeTokens TokenSequences TakeTokens TokenSeriess EmptyTokensSkipsDefercBsMtZeed„Zd„Zd„Zd„Zd„Zd„Zd„Z RS(NcCs.|||tf\|_|_|_|_dS(N(sdescscallbacksnamesNonesselfs failMessage(sselfsdescscallbacksname((s7build/bdist.darwin-8.8.2-i386/egg/ZestyParser/Tokens.pys__init__scCs(d|ii|ip t|ƒfSdS(Ns%s %s(sselfs __class__s__name__snamesstr(sself((s7build/bdist.darwin-8.8.2-i386/egg/ZestyParser/Tokens.pys__repr__scCs¡|i o|Snye|iii}|djo|i||ƒSn2|djo|i|ƒSn|i|||ƒSWn"tj o||_ t‚nXdS(Nii( sselfscallbacksdatas func_codes co_argcountscsparsers origCursors NotMatchedscursor(sselfsparsersdatas origCursorsc((s7build/bdist.darwin-8.8.2-i386/egg/ZestyParser/Tokens.pyspreprocessResult s    cCst||gƒSdS(N(s TokenSequencesselfsother(sselfsother((s7build/bdist.darwin-8.8.2-i386/egg/ZestyParser/Tokens.pys__add__,scCst||gƒSdS(N(sCompositeTokensselfsother(sselfsother((s7build/bdist.darwin-8.8.2-i386/egg/ZestyParser/Tokens.pys__or__/scCs ti|ƒ}||_|SdS(N(scopysselfsnewscallback(sselfscallbacksnew((s7build/bdist.darwin-8.8.2-i386/egg/ZestyParser/Tokens.pys __rshift__2s cCs ti|ƒ}||_|SdS(N(scopysselfsnewsmessages failMessage(sselfsmessagesnew((s7build/bdist.darwin-8.8.2-i386/egg/ZestyParser/Tokens.pys__xor__7s ( s__name__s __module__sNones__init__s__repr__spreprocessResults__add__s__or__s __rshift__s__xor__(((s7build/bdist.darwin-8.8.2-i386/egg/ZestyParser/Tokens.pys AbstractTokens    cBs,tZeeed„Zd„Zd„ZRS(NcCsMt|dƒ oti|tiƒ}nti||||ƒ||_ dS(Nsmatch( shasattrsregexsrescompilesDOTALLs AbstractTokens__init__sselfscallbacksnamesgroup(sselfsregexscallbacksnamesgroup((s7build/bdist.darwin-8.8.2-i386/egg/ZestyParser/Tokens.pys__init__=scCsv|ii|i|ƒ}| o t‚n|iƒ|_ |i t j o|i |i ƒ}n|i |||ƒSdS(N( sselfsdescsmatchsparsersdatas origCursorsmatchess NotMatchedsendscursorsgroupsNonespreprocessResult(sselfsparsers origCursorsmatches((s7build/bdist.darwin-8.8.2-i386/egg/ZestyParser/Tokens.pys__call__Cs cCst|iiƒSdS(N(sreprsselfsdescspattern(sself((s7build/bdist.darwin-8.8.2-i386/egg/ZestyParser/Tokens.pys__str__Ks(s__name__s __module__sNones__init__s__call__s__str__(((s7build/bdist.darwin-8.8.2-i386/egg/ZestyParser/Tokens.pysToken<s cBs,tZeeed„Zd„Zd„ZRS(NcCsOti||||ƒt|ƒ|_||_|o|ii ƒ|_ndS(N( s AbstractTokens__init__sselfsstringscallbacksnameslenscaseInsensitivesdescslower(sselfsstringscallbacksnamescaseInsensitive((s7build/bdist.darwin-8.8.2-i386/egg/ZestyParser/Tokens.pys__init__Os  cCs¢||i}|i||!}|io|iƒ|i jo ||_ |i |||ƒSnB|i o ||i jo ||_ |i |||ƒSnt ‚dS(N( s origCursorsselfslensendsparsersdatasdscaseInsensitiveslowersdescscursorspreprocessResults NotMatched(sselfsparsers origCursorsendsd((s7build/bdist.darwin-8.8.2-i386/egg/ZestyParser/Tokens.pys__call__Vs    cCst|iƒSdS(N(sreprsselfsdesc(sself((s7build/bdist.darwin-8.8.2-i386/egg/ZestyParser/Tokens.pys__str__bs(s__name__s __module__sNonesFalses__init__s__call__s__str__(((s7build/bdist.darwin-8.8.2-i386/egg/ZestyParser/Tokens.pysRawTokenNs scBs>tZgeed„Zd„Zd„Zd„Zd„ZRS(NcCsti||||ƒdS(N(s AbstractTokens__init__sselfstokensscallbacksname(sselfstokensscallbacksname((s7build/bdist.darwin-8.8.2-i386/egg/ZestyParser/Tokens.pys__init__hscCsI|i|iƒ}|ittfjo t‚n|i |||ƒSdS(N( sparsersscansselfsdescsrslastsNonesEOFs NotMatchedspreprocessResults origCursor(sselfsparsers origCursorsr((s7build/bdist.darwin-8.8.2-i386/egg/ZestyParser/Tokens.pys__call__ks cCsu|tjodSn]ti|ƒddigi}|iD]}|t|ƒƒq<~ƒd}ti ƒ|SdS(Ns...s(s | s)( sselfsrstacksappendsjoins_[1]sdescstsreprsdspop(sselfsds_[1]st((s7build/bdist.darwin-8.8.2-i386/egg/ZestyParser/Tokens.pys__str__qs   A cCskt|tƒot|i|iƒSn@t|dƒot|it|ƒƒSnt|i|gƒSdS(Ns__iter__(s isinstancesothersCompositeTokensselfsdescshasattrslist(sselfsother((s7build/bdist.darwin-8.8.2-i386/egg/ZestyParser/Tokens.pys__or__zs cCsgt|tƒo|i|i7_n:t|dƒo|it|ƒ7_n|ii|ƒ|SdS(Ns__iter__(s isinstancesothersCompositeTokensselfsdescshasattrslistsappend(sselfsother((s7build/bdist.darwin-8.8.2-i386/egg/ZestyParser/Tokens.pys__ior__‚s (s__name__s __module__sNones__init__s__call__s__str__s__or__s__ior__(((s7build/bdist.darwin-8.8.2-i386/egg/ZestyParser/Tokens.pysCompositeTokengs   cBs>tZgeed„Zd„Zd„Zd„Zd„ZRS(NcCsti||||ƒdS(N(s AbstractTokens__init__sselfs tokenGroupsscallbacksname(sselfs tokenGroupsscallbacksname((s7build/bdist.darwin-8.8.2-i386/egg/ZestyParser/Tokens.pys__init__ŒscCsg}x_|iD]T}|i|ƒ}|itjo t ‚nt |it ƒ o|i |ƒqqW|i |||ƒSdS(N(sosselfsdescsgsparsersscansrslastsNones NotMatcheds isinstancesSkipsappendspreprocessResults origCursor(sselfsparsers origCursorsgsosr((s7build/bdist.darwin-8.8.2-i386/egg/ZestyParser/Tokens.pys__call__s  cCsu|tjodSn]ti|ƒddigi}|iD]}|t|ƒƒq<~ƒd}ti ƒ|SdS(Ns...s(s + s)( sselfsrstacksappendsjoins_[1]sdescstsreprsdspop(sselfsds_[1]st((s7build/bdist.darwin-8.8.2-i386/egg/ZestyParser/Tokens.pys__str__—s   A cCskt|tƒot|i|iƒSn@t|dƒot|it|ƒƒSnt|i|gƒSdS(Ns__iter__(s isinstancesothers TokenSequencesselfsdescshasattrslist(sselfsother((s7build/bdist.darwin-8.8.2-i386/egg/ZestyParser/Tokens.pys__add__ s cCsgt|tƒo|i|i7_n:t|dƒo|it|ƒ7_n|ii|ƒ|SdS(Ns__iter__(s isinstancesothers TokenSequencesselfsdescshasattrslistsappend(sselfsother((s7build/bdist.darwin-8.8.2-i386/egg/ZestyParser/Tokens.pys__iadd__¨s (s__name__s __module__sNones__init__s__call__s__str__s__add__s__iadd__(((s7build/bdist.darwin-8.8.2-i386/egg/ZestyParser/Tokens.pys TokenSequence‹s   cBs tZeed„Zd„ZRS(NcCsti||||ƒdS(N(s AbstractTokens__init__sselfslengthscallbacksname(sselfslengthscallbacksname((s7build/bdist.darwin-8.8.2-i386/egg/ZestyParser/Tokens.pys__init__²scCsB||i}|i|jo t‚n||_|i||!SdS(N( sstartsselfsdescsendsparserslens NotMatchedscursorsdata(sselfsparsersstartsend((s7build/bdist.darwin-8.8.2-i386/egg/ZestyParser/Tokens.pys__call__µs    (s__name__s __module__sNones__init__s__call__(((s7build/bdist.darwin-8.8.2-i386/egg/ZestyParser/Tokens.pys TakeToken±sc Bs5tZdeeeeeeeed„ Zd„ZRS(Nic Cs¹ti||| | ƒ|||||||f\|_|_|_|_ |_ |_ |_ t t|ƒ|||gd„ƒ|_t t|ƒ|t|ƒ|||gd„ƒ|_dS(NcCs|dS(Ni(sr(sr((s7build/bdist.darwin-8.8.2-i386/egg/ZestyParser/Tokens.pys¿scCs|dS(Ni(sr(sr((s7build/bdist.darwin-8.8.2-i386/egg/ZestyParser/Tokens.pysÀs(s AbstractTokens__init__sselfstokenscallbacksnamesminsmaxsskipsprefixspostfixs delimitersuntils TokenSequencesSkipsscanForsscanForSecondary( sselfstokensminsmaxsskipsprefixspostfixs delimitersuntilscallbacksname((s7build/bdist.darwin-8.8.2-i386/egg/ZestyParser/Tokens.pys__init__¼sE'cCs;g}d}xõ|itjp ||ijoÔ|i|iƒ|io|i|idƒoPn|djo |i}n |i }|i |ƒ}|i tjoA|io2|idot||idƒ‚qät‚qèPn|i|ƒ|d7}qWt|ƒ|ijo|i|||ƒSnt‚dS(Nii(sosisselfsmaxsFalsesparsersskipsuntilsscanForsdsscanForSecondarysscanstslastsNones ParseErrors NotMatchedsappendslensminspreprocessResults origCursor(sselfsparsers origCursorsdsisost((s7build/bdist.darwin-8.8.2-i386/egg/ZestyParser/Tokens.pys__call__Âs, !     (s__name__s __module__sFalses EmptyTokensNones__init__s__call__(((s7build/bdist.darwin-8.8.2-i386/egg/ZestyParser/Tokens.pys TokenSeries»s$cBs tZeed„Zd„ZRS(NcCsti||||ƒdS(N(s AbstractTokens__init__sselfsfuncscallbacksname(sselfsfuncscallbacksname((s7build/bdist.darwin-8.8.2-i386/egg/ZestyParser/Tokens.pys__init__ÙscCs7|i|iƒƒ}|itjo t‚n|SdS(N(sparsersscansselfsdescstslastsNones NotMatched(sselfsparsers origCursorst((s7build/bdist.darwin-8.8.2-i386/egg/ZestyParser/Tokens.pys__call__Üs (s__name__s __module__sNones__init__s__call__(((s7build/bdist.darwin-8.8.2-i386/egg/ZestyParser/Tokens.pysDeferØscBs tZeed„Zd„ZRS(NcCsti||||ƒdS(N(s AbstractTokens__init__sselfstokenscallbacksname(sselfstokenscallbacksname((s7build/bdist.darwin-8.8.2-i386/egg/ZestyParser/Tokens.pys__init__âscCs|i|iƒdS(N(sparsersskipsselfsdesc(sselfsparsers origCursor((s7build/bdist.darwin-8.8.2-i386/egg/ZestyParser/Tokens.pys__call__ås(s__name__s __module__sNones__init__s__call__(((s7build/bdist.darwin-8.8.2-i386/egg/ZestyParser/Tokens.pysSkipás(srescopysParsers NotMatcheds ParseErrorsEOFs__all__srstacks AbstractTokensTokensRawTokens EmptyTokensCompositeTokens TokenSequences TakeTokens TokenSeriessDefersSkip(sDefers NotMatchedsEOFs__all__s EmptyTokensSkips TokenSeriess AbstractTokensCompositeTokens ParseErrorsresTokensrstacks TakeTokensRawTokenscopys TokenSequence((s7build/bdist.darwin-8.8.2-i386/egg/ZestyParser/Tokens.pys?s$# $&  PK÷®(6“×2¤EGG-INFO/dependency_links.txtPK÷®(6RŸ˼¼¤<EGG-INFO/PKG-INFOPK÷®(6/Ḝœ¤'EGG-INFO/SOURCES.txtPK÷®(6µ& ¤õEGG-INFO/top_level.txtPK÷®(6“×2¤5EGG-INFO/zip-safePKºŸ5>à³OAA¤eZestyParser/__init__.pyPK÷®(6†½Qdºº¤Û ZestyParser/__init__.pycPK5‚(6W 1j¼ ¼ ¤Ë ZestyParser/Parser.pyPK÷®(6ê©×Êgg¤ºZestyParser/Parser.pycPK|œ(6jƒ}:QQ¤U2ZestyParser/Tokens.pyPK÷®(6†³À“9“9¤ÙNZestyParser/Tokens.pycPK è ˆ