Пример #1
0
 def add(node: ASTNode, _):
     isatLeastOneString = Types.isStrictlyString(
         node.left) or Types.isStrictlyString(node.right)
     if isatLeastOneString:
         node.value = str(node.left.value) + str(node.right.value)
         node.dataType = Types.STRING
     else:
         node.value = node.left.value + node.right.value
         node.dataType = Types.NUMERIC
Пример #2
0
 def reverse_string(node: ASTNode):
     left = node.left
     if TypeChecker.isStrictlyString(left):
         node.dataType = TypeChecker.STRING
         return Result(True)
     else:
         return Result(False, getUniaryOpTypeErr(node))
Пример #3
0
 def hybridAdd(node: ASTNode):
     left = node.left
     right = node.right
     validType = lambda node: TypeChecker.isStrictlyString(
         node) or TypeChecker.isLooselyNumeric(node)
     if validType(left) and validType(right):
         node.dataType = TypeChecker.NUMERIC if TypeChecker.isLooselyNumeric(
             left) and TypeChecker.isLooselyNumeric(
                 right) else TypeChecker.STRING
         return Result(True)
     else:
         return Result(False, getBinaryOpTypeErr(node))