- More improvements.
This commit is contained in:
parent
290e5a8b5c
commit
7637d8a263
@ -48,6 +48,43 @@ class Fact(list):
|
|||||||
def __repr__(self):
|
def __repr__(self):
|
||||||
return "Fact<" + list.__repr__(self) + ">"
|
return "Fact<" + list.__repr__(self) + ">"
|
||||||
|
|
||||||
|
class GoalFact(Fact):
|
||||||
|
def __repr__(self):
|
||||||
|
return "Goal " + Fact.__repr__(self)
|
||||||
|
|
||||||
|
class PrincipalFact(Fact):
|
||||||
|
def __str__(self):
|
||||||
|
res = "Principal Fact:"
|
||||||
|
res += "\nStep " + str(self[0])
|
||||||
|
res += "\nReadNextFrom " + str(self[1])
|
||||||
|
res += "\nActor " + str(self[2])
|
||||||
|
res += "\nRunKnowledge " + str(self[3])
|
||||||
|
res += "\nKnowledge " + str(self[4])
|
||||||
|
#res += "\nBool " + str(self[5])
|
||||||
|
res += "\nSession " + str(self[6])
|
||||||
|
return res + "\n"
|
||||||
|
|
||||||
|
def __repr__(self):
|
||||||
|
return str(self)
|
||||||
|
|
||||||
|
class TimeFact(Fact):
|
||||||
|
def __repr__(self):
|
||||||
|
return "Time " + Fact.__repr__(self)
|
||||||
|
|
||||||
|
class MessageFact(Fact):
|
||||||
|
def __str__(self):
|
||||||
|
res = "Message Fact:"
|
||||||
|
res += "\nStep " + str(self[0])
|
||||||
|
res += "\nRealSender " + str(self[1])
|
||||||
|
res += "\nClaimSender " + str(self[2])
|
||||||
|
res += "\nRecipient " + str(self[3])
|
||||||
|
res += "\nMessage " + str(self[4])
|
||||||
|
res += "\nSession " + str(self[5])
|
||||||
|
return res + "\n"
|
||||||
|
|
||||||
|
def __repr__(self):
|
||||||
|
return str(self)
|
||||||
|
|
||||||
class State(list):
|
class State(list):
|
||||||
def __repr__(self):
|
def __repr__(self):
|
||||||
return "State<" + list.__repr__(self) + ">"
|
return "State<" + list.__repr__(self) + ">"
|
||||||
@ -77,9 +114,13 @@ class Rule(object):
|
|||||||
if self.label != None:
|
if self.label != None:
|
||||||
res += " (" + str(self.label) +")"
|
res += " (" + str(self.label) +")"
|
||||||
res += "\n"
|
res += "\n"
|
||||||
|
if self.left != None:
|
||||||
res += str(self.left) + "\n"
|
res += str(self.left) + "\n"
|
||||||
|
if self.right != None:
|
||||||
|
if self.left != None:
|
||||||
res += "=>\n"
|
res += "=>\n"
|
||||||
res += str(self.right) + "\n"
|
res += str(self.right) + "\n"
|
||||||
|
res += ".\n"
|
||||||
return res
|
return res
|
||||||
|
|
||||||
def __repr__(self):
|
def __repr__(self):
|
||||||
|
@ -138,9 +138,11 @@ def ruleParser ():
|
|||||||
|
|
||||||
# Principal fact
|
# Principal fact
|
||||||
Principal = Literal("w") + lbr + Step + comma + Agent + comma + Agent + comma + MsgList + comma + MsgList + comma + Boolean + comma + Session + rbr
|
Principal = Literal("w") + lbr + Step + comma + Agent + comma + Agent + comma + MsgList + comma + MsgList + comma + Boolean + comma + Session + rbr
|
||||||
|
Principal.setParseAction(lambda s,l,t: [ If.PrincipalFact(t[1:]) ])
|
||||||
|
|
||||||
# Message fact
|
# Message fact
|
||||||
MessageFact = Literal("m") + lbr + Step + comma + Agent + comma + Agent + comma + Agent + comma + Message + comma + Session + rbr
|
MessageFact = Literal("m") + lbr + Step + comma + Agent + comma + Agent + comma + Agent + comma + Message + comma + Session + rbr
|
||||||
|
MessageFact.setParseAction(lambda s,l,t: [ If.MessageFact(t[1:]) ])
|
||||||
|
|
||||||
# Goal fact
|
# Goal fact
|
||||||
Secret = Literal("secret") + lbr + Message + Literal("f") + lbr + Session + rbr + rbr
|
Secret = Literal("secret") + lbr + Message + Literal("f") + lbr + Session + rbr + rbr
|
||||||
@ -148,6 +150,7 @@ def ruleParser ():
|
|||||||
Witness = Literal("witness") + lbr + Agent + comma + Agent + comma + Constant + comma + Message + rbr
|
Witness = Literal("witness") + lbr + Agent + comma + Agent + comma + Constant + comma + Message + rbr
|
||||||
Request = Literal("request") + lbr + Agent + comma + Agent + comma + Constant + comma + Message + rbr
|
Request = Literal("request") + lbr + Agent + comma + Agent + comma + Constant + comma + Message + rbr
|
||||||
GoalFact = Or ([ Secret, Give, Witness, Request ])
|
GoalFact = Or ([ Secret, Give, Witness, Request ])
|
||||||
|
GoalFact.setParseAction(lambda s,l,t: [ If.GoalFact(t) ])
|
||||||
# Goal State
|
# Goal State
|
||||||
# It actually yields a rule (not a state per se)
|
# It actually yields a rule (not a state per se)
|
||||||
Correspondence = Principal + dot + Principal
|
Correspondence = Principal + dot + Principal
|
||||||
@ -164,6 +167,7 @@ def ruleParser ():
|
|||||||
|
|
||||||
# TimeFact
|
# TimeFact
|
||||||
TimeFact = Literal("h") + lbr + Message + rbr
|
TimeFact = Literal("h") + lbr + Message + rbr
|
||||||
|
TimeFact.setParseAction(lambda s,l,t: [ If.TimeFact(t[1]) ])
|
||||||
|
|
||||||
# Intruder knowledge
|
# Intruder knowledge
|
||||||
IntruderKnowledge = Literal("i") + lbr + Message + rbr
|
IntruderKnowledge = Literal("i") + lbr + Message + rbr
|
||||||
@ -180,7 +184,8 @@ def ruleParser ():
|
|||||||
mr2 = implies
|
mr2 = implies
|
||||||
mr3 = Literal("h") + lbr + Literal("xTime") + rbr + dot + MFPrincipal + Optional(dot + delimitedList(GoalFact, "."))
|
mr3 = Literal("h") + lbr + Literal("xTime") + rbr + dot + MFPrincipal + Optional(dot + delimitedList(GoalFact, "."))
|
||||||
MessageRule = Group(mr1) + mr2 + Group(mr3) ## DEVIANT : BNF requires newlines
|
MessageRule = Group(mr1) + mr2 + Group(mr3) ## DEVIANT : BNF requires newlines
|
||||||
MessageRule.setParseAction(lambda s,l,t: [ If.MessageRule(t[0],t[1]) ])
|
MessageRule.setParseAction(lambda s,l,t: [
|
||||||
|
If.MessageRule(t[0][3],t[1][2:]) ])
|
||||||
InitialState = Literal("h") + lbr + Literal("xTime") + rbr + dot + State ## DEVIANT : BNF requires newlines
|
InitialState = Literal("h") + lbr + Literal("xTime") + rbr + dot + State ## DEVIANT : BNF requires newlines
|
||||||
InitialState.setParseAction(lambda s,l,t: [ If.InitialRule(t[2]) ])
|
InitialState.setParseAction(lambda s,l,t: [ If.InitialRule(t[2]) ])
|
||||||
|
|
||||||
@ -216,7 +221,6 @@ def ifParser():
|
|||||||
|
|
||||||
def labeledruleAction(s,l,t):
|
def labeledruleAction(s,l,t):
|
||||||
rule = t[1]
|
rule = t[1]
|
||||||
if type(rule) == "Rule":
|
|
||||||
rule.setLabel(t[0])
|
rule.setLabel(t[0])
|
||||||
return [rule]
|
return [rule]
|
||||||
|
|
||||||
@ -259,6 +263,8 @@ def linesParse(lines):
|
|||||||
|
|
||||||
parser = ifParser()
|
parser = ifParser()
|
||||||
result = parser.parseString("".join( lines[1:]))
|
result = parser.parseString("".join( lines[1:]))
|
||||||
|
|
||||||
|
### TEST
|
||||||
#print result
|
#print result
|
||||||
|
|
||||||
# Main code
|
# Main code
|
||||||
|
Loading…
Reference in New Issue
Block a user