Example #1
0
    def tryNew(cls, lineNumber: int, indentation: int,
               line: str) -> Optional[ParsedLine]:
        """Teste si la ligne respecte le modèle variable = expression
        et crée l'item correspondant le cas échéant

        :param lineNumber: numéro de la ligne
        :type lineNumber: int
        :param indentation: indentation de la ligne
        :type indentation: int
        :param line: ligne à analyser
        :type line: str
        :return: noeud du type print ou None
        :rtype: Optional[ParsedLine_Print]
        :raises: ParseError si l'expression ou variable détectée n'ont pas la bonne forme
        """
        allGroup = re.search(cls.regex(), line)
        if allGroup is None:
            return None
        variableName = allGroup[1].strip()  # la variable
        expressionStr = allGroup[
            2]  # tout ce qu'il y a dans les ( ) de l'input
        if not ExpressionParser.strIsVariableName(variableName):
            raise ParseError(
                "La variable <{}> est incorrecte.".format(variableName),
                {"lineNumber": lineNumber})
        expr = ExpressionParser.buildExpression(expressionStr)
        if not isinstance(expr, ArithmeticExpressionNode):
            raise ParseError("L'expression <{}> est incorrecte.".format(expr),
                             {"lineNumber": lineNumber})
        return ParsedLine_Affectation(lineNumber, indentation,
                                      Variable.add(variableName), expr)
Example #2
0
    def tryNew(cls, lineNumber: int, indentation: int,
               line: str) -> Optional[ParsedLine]:
        """Teste si la ligne respecte le modèle print
        et crée l'item correspondant le cas échéant

        :param lineNumber: numéro de la ligne
        :type lineNumber: int
        :param indentation: indentation de la ligne
        :type indentation: int
        :param line: ligne à analyser
        :type line: str
        :return: noeud du type print ou None
        :rtype: Optional[ParsedLine_Print]
        :raises: ParseError si la variable n'a pas la bonne forme
        """
        allGroup = re.search(cls.regex(), line)
        if allGroup is None:
            return None
        variableName = allGroup[1].strip()  # la variable

        if not ExpressionParser.strIsVariableName(variableName):
            raise ParseError(
                "La variable <{}> est incorrecte.".format(variableName),
                {"lineNumber": lineNumber})
        return ParsedLine_Input(lineNumber, indentation,
                                Variable.add(variableName))