Better way to do parsing?

Paul McGuire ptmcg at austin.rr.com
Wed May 4 10:52:09 EDT 2005


You asked for parsing, here's some pyparsing.  Download pyparsing at
http://pyparsing.sourceforge.net.
-- Paul

from pyparsing import *

IMPORT = Keyword("import")
AS = Keyword("as")
FROM = Keyword("from")
ident = Word(alphas+"_", alphanums+"_")

import1 = Group( IMPORT + ident + Optional( AS + ident ) )
import2 = Group( FROM + ident + IMPORT +
            ("*" | delimitedList( ident + Optional( AS + ident ) ) ) )

imports = import1 | import2
comment = "#" + restOfLine
imports.ignore(comment)


test = """
import useful
from useful import *
from useful import turn_around, turn_right, climb_up_east
import useful as use
from useful import turn_right
from useful import turn_right
from useful import turn_right as vire_a_droite, turn_left as
drehen_nach_links
import sys
from sys import *
# import in comment
# import sys
import useful
import sys
"""

results = OneOrMore( imports ).parseString( test )
for imp in results:
    print imp

===========
prints:
['import', 'useful']
['from', 'useful', 'import', '*']
['from', 'useful', 'import', 'turn_around', 'turn_right',
'climb_up_east']
['import', 'useful', 'as', 'use']
['from', 'useful', 'import', 'turn_right']
['from', 'useful', 'import', 'turn_right']
['from', 'useful', 'import', 'turn_right', 'as', 'vire_a_droite',
'turn_left', 'as', 'drehen_nach_links']
['import', 'sys']
['from', 'sys', 'import', '*']
['import', 'useful']
['import', 'sys']




More information about the Python-list mailing list