コード例 #1
0
ファイル: Parser.py プロジェクト: remyoster/42_cursus
 def check_all(self):
     eq = self.check_ac().upper()
     eq_parts = eq.split('=')
     if (len(eq_parts) != 2):
         Printer.error("format")
     for part in eq_parts:
         if (len(part) == 0):
             Printer.error("format")
         self.check_characters(part)
     return (eq)
コード例 #2
0
ファイル: Parser.py プロジェクト: remyoster/42_cursus
    def check_characters(self, eq):
        i = 0
        eq_len = len(eq)
        if (self.is_operator(eq[0]) and eq[0] != '-'):
            Printer.error("format")
        while (i < eq_len):

            if (eq[i].isdigit()):
                while (i + 1 < eq_len and eq[i].isdigit()):
                    i += 1
            # case : not digit(0123456789) not X  not op(+-/*^.)
            if (not self.is_operator(eq[i])
                    and not self.is_number_or_x(eq[i])):
                Printer.error("format")

            # case : .
            if (eq[i] == '.'):
                if (not eq[i - 1].isdigit() or not eq[i + 1].isdigit()):
                    Printer.error("format")
                while (i + 1 < eq_len and eq[i + 1].isdigit()):
                    i += 1
                if (i + 1 == eq_len and not eq[i].isdigit()):
                    Printer.error("format")
                elif (i + 1 < eq_len and eq[i + 1] != '+' and eq[i + 1] != '-'
                      and eq[i + 1] != '*' and eq[i + 1] != 'X'):
                    Printer.error("format")
            try:
                # case ^
                if (eq[i] == '^'):
                    if (eq[i - 1] != 'X'):
                        Printer.error("format")
                    if (not eq[i + 1].isdigit()):
                        Printer.error("degree")
                    while (i + 1 < eq_len and eq[i + 1].isdigit()):
                        i += 1
                    if (i + 1 == eq_len and not eq[i].isdigit()):
                        Printer.error("format")
                    elif (i + 1 < eq_len and eq[i + 1] != '+'
                          and eq[i + 1] != '-'):
                        Printer.error("format")

                # case double operator
                if (self.is_operator(eq[i]) and self.is_operator(eq[i - 1])):
                    Printer.error("format")

                # case / and . with else than digit around
                if ((eq[i] == '/' or eq[i] == '.')
                        and (not self.is_number_or_x(eq[i + 1])
                             or not self.is_number_or_x(eq[i - 1]))):
                    Printer.error("format")
            except Exception:
                Printer.error("format")
            i += 1

        # case last char is operator
        if (self.is_operator(eq[i - 1])):
            Printer.error("format")