name = Word(alphanums+"_") flaglist = Literal('[')+ quotedString.setParseAction(removeQuotes) + ZeroOrMore(Literal(',') + quotedString.setParseAction(removeQuotes)) + Literal(']') value = quotedString.setParseAction(removeQuotes) | flaglist keyval = name + Literal("=") + value keyval_list = keyval + ZeroOrMore(Literal(",") + keyval) evidence = Literal("[") + keyval_list + Literal("]") evidencelist = evidence + ZeroOrMore(Literal(",") + evidence) path = ZeroOrMore(Literal('/')) + name + ZeroOrMore(Literal('/') + name) context = Literal('@@') + path + Literal(':') + keyval_list component = Literal('--') + name + Literal(":") + keyval_list + Optional(Literal(',') + evidencelist) view = Literal('==') + name + Literal(":") + path + ZeroOrMore(Literal(",") + path) mdef = OneOrMore(context + ZeroOrMore(component) + ZeroOrMore(view)) + Literal('$$') name.setParseAction(doname) keyval.setParseAction(dokeyval) flaglist.setParseAction(doflaglist) keyval_list.setParseAction(dokeyval_list) evidence.setParseAction(doevidence) evidencelist.setParseAction(doevidencelist) path.setParseAction(dopath) context.setParseAction(docontext) component.setParseAction(docomponent) view.setParseAction(doview) mdef.setParseAction(domdef) def domodeldef(mdefstring): """ function to parse a modeldef statement arg is a string containing the mdef statement """
raise ParseException, (str, loc, "tell failed",0) return True def donotify(str, loc, toks): #print "donotify::", toks url = "".join(toks[1:]) import urllib print "Notify", url f = urllib.urlopen(url) print f.readlines() f.close() return component = Forward() componentval = Literal("<")+Optional(Word(alphas) + Literal('!'))+component+Literal(">") componentval.setParseAction(askval) componentname = Word(alphas) | componentval modelname = Literal('.') | componentname component << modelname + ZeroOrMore(Literal('/') + componentname) item = component | quotedString.setParseAction(removeQuotes) cronspec = Literal('[') + quotedString.setParseAction(removeQuotes) + Literal(']') patternmatch = item + Literal('~') + item patternmatch.setParseAction(domatch) tell = Literal('TELL') + item + Literal(',') + item + Literal(':') + item tell.setParseAction(dotell) tellchanged = Literal('TELLCHANGED') + item + Literal(',') + item + Literal(':') + item tellchanged.setParseAction(dotellchanged) notify = Literal('NOTIFY') + OneOrMore(item) notify.setParseAction(donotify) action = tell | notify | tellchanged subgrammar = Optional(cronspec) + patternmatch + Literal(':') + action
keyval = name + Literal("=") + value keyval_list = keyval + ZeroOrMore(Literal(",") + keyval) evidence = Literal("[") + keyval_list + Literal("]") evidencelist = evidence + ZeroOrMore(Literal(",") + evidence) path = ZeroOrMore(Literal('/')) + name + ZeroOrMore(Literal('/') + name) context = Literal('@@') + path + Literal(':') + keyval_list component = Literal('--') + name + Literal(":") + keyval_list + Optional( Literal(',') + evidencelist) view = Literal('==') + name + Literal(":") + path + ZeroOrMore( Literal(",") + path) mdef = OneOrMore(context + ZeroOrMore(component) + ZeroOrMore(view)) + Literal('$$') name.setParseAction(doname) keyval.setParseAction(dokeyval) flaglist.setParseAction(doflaglist) keyval_list.setParseAction(dokeyval_list) evidence.setParseAction(doevidence) evidencelist.setParseAction(doevidencelist) path.setParseAction(dopath) context.setParseAction(docontext) component.setParseAction(docomponent) view.setParseAction(doview) mdef.setParseAction(domdef) def domodeldef(mdefstring): """ function to parse a modeldef statement arg is a string containing the mdef statement """