pyparsing problem

name x at y.z
Tue Jul 1 09:02:58 EDT 2008


Hi,

I try to parse a file with pyparsing and get this output:

    ['generic', 'host-01', 'host alias xyz', '10.0.0.1']
    - alias: host alias xyz
    - host_name: ['host-01']
    - ip_address: ['10.0.0.1']
    - use: ['generic']
    
    
    <Hosts>
      <ITEM>generic</ITEM>
      <host_name>host-01</host_name>
      <alias>host alias xyz</alias>
      <ip_address>10.0.0.1</ip_address>
    </Hosts>
    
    ['generic', 'host-01', 'host alias xyz', '10.0.0.1']
    
    finished

What I don't understand is why I get the line

    <ITEM>generic</ITEM>

and not 

    <use>generic</use>

as there is an associated name in the dump() output.

Thank you very much in advance for any clue or help you could
provide.



The code:
---------

#!/usr/bin/env python

from pyparsing import *

sample = """
define host{ 
  use			generic
  host_name	        host-01
  alias			host alias xyz
  address			10.0.0.1
}
"""

# define tokens
LBRACE,RBRACE = map(Suppress, '{}')
ipAddress = Combine(Word(nums) + ('.' + Word(nums))*3)
useTemplate = oneOf('generic user')

# define grammar

deviceName = Word(alphanums+'-')
hostDef = Literal('define').suppress() + Literal('host').suppress()
useLine = Suppress('use') + useTemplate + Suppress(SkipTo(lineEnd))
host_nameLine = Suppress('host_name') + deviceName + Suppress(SkipTo
(lineEnd))
aliasLine = Suppress('alias') + SkipTo(lineEnd)
aliasLine.setParseAction(lambda x: ' '.join(x[0].split()))
ip_addressLine = Suppress('address') + ipAddress

use = useLine.setResultsName('use')
host_name = host_nameLine.setResultsName('host_name')
alias = aliasLine.setResultsName('alias')
ip_address = ip_addressLine.setResultsName('ip_address')


host_stmt = (use + host_name + alias + ip_address)
host = hostDef + LBRACE + host_stmt  + RBRACE

test_file = OneOrMore(host) + stringEnd


# test
x = test_file.parseString(sample)
print x.dump()
print
print x.asXML('Hosts')
print
print x.asList()
print

print 'finished'




More information about the Python-list mailing list