def checkGuardPart(self, part): test = part.strip() openGuardCount = 0 colonIndex = -1 qOpen = 0 for x in range(0, len(test)): if test[x] == '"': if qOpen == 1: qOpen = 0 else: qOpen = 1 if (test[x] == ':') and (openGuardCount == 1) and (qOpen == 0): if not (colonIndex == -1): print "Only one ':' is allowed, invalid command: " + test return False colonIndex = x elif test[x] == '[': openGuardCount = self.manageBrackets(openGuardCount, qOpen, 1) elif test[x] == ']': openGuardCount = self.manageBrackets(openGuardCount, qOpen, -1) if colonIndex == -1: print "Not a guard command: " + test + " is missing ':'." return False g = Guard(test[1:colonIndex], self.getParent()) c = Command(test[colonIndex + 1:len(test) - 1], self.getParent()) c.setSyntaxOnly(self.syntax_only) g.setSyntaxOnly(self.syntax_only) guardValue = g.checkSyntax() if guardValue == -1: #syntax problem return False elif guardValue == 0: #semantically wrong i.e. the "program" guard returns false c.setSyntaxOnly(True) return c.checkSyntax() elif guardValue == 1: #means we generally want to do what's after the guard return c.checkSyntax()