Package spade :: Module SL0Parser
[hide private]
[frames] | no frames]

Source Code for Module spade.SL0Parser

  1  from pyparsing import * 
  2  import sys 
  3   
4 -class SL0Parser:
5 """ 6 SL parser 7 """ 8
9 - def __init__(self):
10 11 lpar = Literal("(").suppress() 12 rpar = Literal(")").suppress() 13 14 15 word = ~Literal(":")+ Word(alphanums+"-_@./\\:") 16 StringLiteral = Combine( Literal('"') + ZeroOrMore( CharsNotIn('\"') | ( Literal('\\"') ) ) + Literal('"') ).streamline() 17 String = ( word | StringLiteral ) #| ByteLengthEncodedString ) 18 Constant = String 19 20 Key = String 21 Expr = Forward() 22 Parameter = Dict(Group(Literal(":").suppress() + Key + Group(Constant|Expr))) 23 Expr << Dict(Group( lpar + Key + Group(OneOrMore(Parameter)|OneOrMore(Constant)|OneOrMore(Expr)) + rpar )) 24 Content = ( lpar + OneOrMore(Expr) + rpar ) 25 26 self.bnf = Content 27 28 #self.bnf.setDebug() 29 30 try: 31 self.bnf.validate() 32 #print "BNF VALID!!!" 33 34 except Exception, err: 35 print "ERROR: BNF NOT VALID!!!" 36 print err
37 #sys.exit(-1) 38
39 - def parse(self,string):
40 """ 41 parses a string 42 returns a pyparsing.ParseResults 43 """ 44 45 m = None 46 try: 47 m = self.bnf.parseString(str(string)) 48 except ParseException, err: 49 print err.line 50 print " "*(err.column-1)+"|" 51 print err 52 #sys.exit(-1) 53 except Exception, err: 54 print "Unknown Parsing Exception" 55 print err 56 #sys.exit(-1) 57 58 return m
59
60 - def parseFile(self,file):
61 """ 62 parses a file 63 returns a pyparsing.ParseResults 64 """ 65 66 try: 67 m = self.bnf.parseFile(file) 68 except ParseException, err: 69 print err.line 70 print " "*(err.column-1)+"|" 71 print err 72 sys.exit(-1) 73 except Exception, err: 74 print "Unkwonw Exception" 75 print err 76 sys.exit(-1) 77 78 return m
79 80 if __name__ == "__main__": 81 p = SL0Parser() 82 msg = p.parse("((prueba :name (set (bla uno) (bla dos))))") 83 #msg = p.parseFile("message.sl0") 84 #print repr(msg) 85 print msg.asXML() 86 print msg.asList() 87 #print "--------------------" 88 #print msg.action['agent-identifier'].addresses.keys() 89 #print msg.action['agent-identifier'].addresses.sequence[1] 90 91 print msg.prueba.name.set 92 for cosa in msg.prueba.name.set: 93 print cosa 94 """ 95 print msg.prueba.name.set.bla 96 print msg.prueba.name.set.bla.keys() 97 print msg.prueba.name.set.bla.values() 98 print msg.prueba.name.set.bla[0] 99 print "--" 100 print msg.prueba.name.set.values() 101 """ 102 print "--" 103 104 slgrande = """((result 105 (search 106 (set 107 (df-agent-description 108 :name 109 (agent-identifier 110 :name scheduler-agent@foo.com 111 :addresses (sequence iiop://foo.com/acc)) 112 :ontology (set meeting-scheduler FIPA-Agent-Management) 113 :languages (set FIPA-SL0 FIPA-SL1 KIF) 114 :services (set 115 (service-description 116 :name profiling 117 :type meeting-scheduler-service) 118 (service-description 119 :name profiling 120 :type user-profiling-service)))))))""" 121 slgrande="""((result (set (ams-agent-description 122 :name (agent-identifier 123 :name agent@alien3.dsic.upv.es 124 :addresses 125 (sequence 126 xmpp://agent@alien3.dsic.upv.es 127 ) 128 ) 129 130 :ownership agent@alien3.dsic.upv.es 131 ) 132 (ams-agent-description 133 :name (agent-identifier 134 :name ams.alien3.dsic.upv.es 135 :addresses 136 (sequence 137 xmpp://ams.alien3.dsic.upv.es 138 ) 139 ) 140 141 :ownership SPADE 142 :state active) 143 (ams-agent-description 144 :name (agent-identifier 145 :name df.alien3.dsic.upv.es 146 :addresses 147 (sequence 148 xmpp://df.alien3.dsic.upv.es 149 ) 150 ) 151 152 :ownership SPADE 153 :state active) 154 )))""" 155 from DF import DfAgentDescription 156 msg = p.parse(slgrande) 157 print msg 158 for dfd in msg.result.search.set: 159 d = DfAgentDescription() 160 d.loadSL0(dfd[1]) 161 print str(d) 162