repos/MysteryMachine
view MysteryMachine/parsetools/grammar.py @ 61:fe9c6208c80c
Fix to yapsy (in patch) that deail with untust Failure.
Also include syntax fix for untrustPlugin in the MM TrustedPluginManager
and tests for the bug.
Also include syntax fix for untrustPlugin in the MM TrustedPluginManager
and tests for the bug.
| author | Roger Gammans <rgammans@computer-surgery.co.uk> |
|---|---|
| date | Wed Oct 21 23:56:53 2009 +0100 (2009-10-21) |
| parents | 60629872bb01 |
| children | a29907c2f491 |
line source
1 #!/usr/bin/python
3 ###Grammar stuff
4 from pyparsing import Regex,Optional,ZeroOrMore, QuotedString , Literal, Word, alphas , nums , printables , CharsNotIn
5 from functools import partial
7 import sys
10 def Grammar(obj):
11 home=obj
12 #Tokens
13 openExpr = Literal("${")
14 closeExpr = Literal("}")
15 seperator = Literal(":")
16 queryOp = Literal("?")
17 equalsOp = Literal("=")
18 notequalsOp= Literal("!=")
20 identifier = Word(alphas + nums)
21 objectName = identifier.copy()
22 fieldName = identifier.copy()
23 ObjectId = Word(nums)
24 NonExpr = CharsNotIn("$")
26 ExprLimit = Regex("[^ \n\t]*[ \n\t]")
27 Value = QuotedString('"')
29 # Productions
30 cfoperator = equalsOp ^ notequalsOp
31 ObjectUID = Optional(objectName + seperator + ObjectId)
33 NamedField = ObjectUID + seperator +fieldName
34 ExprField = ObjectUID ^ \
35 NamedField
37 BoolExpr = ExprField + cfoperator + Value.copy()
38 QueryExpr = BoolExpr + queryOp + Value.copy() + seperator +Value.copy()
40 ExprText = ExprField ^ \
41 QueryExpr
43 Expr = openExpr + ExprText + closeExpr
44 #Error = openExpr + ExprLimit
46 textEle = NonExpr ^ \
47 Expr
49 text = ZeroOrMore(textEle)
52 ## Functions for parsing.
54 def getField(s,loc,toks):
55 print "bar(%s)\n" % toks
56 field=toks[2]
57 obj=toks[0]
58 return obj[field]
61 def doBool(s,loc,toks):
62 # print "baz\n"
63 sense=(toks[1]=="!=")
64 return sense ^ ( str(toks[0]) == toks[2])
67 def doQuery(s,loc,toks):
68 # print "foo\n"
69 if toks[0]:
70 return toks[2]
71 else:
72 return toks[4]
74 def initFromParse(s,loc,toks):
75 print "Creating form :%s (current=%s)\n"%(toks,repr(home))
76 isSelf=len(toks)==0
77 if isSelf: return home
78 elif home is None: return None
79 else: return home.get_root().get_object(toks[0],toks[2])
81 #def gotError(s,loc,toks):
82 # sys.stderr.write("BARR")
84 ## Bind functions to parse actions
86 NamedField.setParseAction(getField)
88 BoolExpr.setParseAction(doBool)
89 QueryExpr.setParseAction(doQuery)
90 Expr.setParseAction(lambda s,loc,tok:tok[1])
91 #Error.setParseAction(gotError)
93 ObjectUID.setParseAction(initFromParse)
95 return ExprText
