Esempio n. 1
0
    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()