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)
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))