コード例 #1
0
    def array(node: ASTNode, _):

        if Types.isAtomic(node.left):
            node.left.value = [node.left.value]
        node.value = node.left.value
        node.value.append(node.right.value)
        isLooselyNumeric = lambda type: type == Types.NUMERICARRAY or type == Types.INTARRAY
        isNumericBool = lambda type: type == Types.INTARRAY or type == Types.NUMERICARRAY or type == Types.BOOLEANARRAY or type == Types.NUMERIC_BOOL_ARR
        if Types.isAtomic(node.left):
            ltype = Types.getArrayTypeBasedOnAtomic(node.left)
        else:
            ltype = node.left.dataType
        rtype = Types.getArrayTypeBasedOnAtomic(node.right)
        if ltype == rtype:
            node.dataType = ltype
        elif isLooselyNumeric(ltype) and isLooselyNumeric(rtype):
            node.dataType = Types.NUMERICARRAY
        elif isNumericBool(ltype) and isNumericBool(rtype):
            node.dataType = Types.NUMERIC_BOOL_ARR
コード例 #2
0
 def array_sep(node: ASTNode):
     left, right = node.left, node.right
     status, err = None, None
     isLooselyNumeric = lambda type: type == TypeChecker.NUMERICARRAY or type == TypeChecker.INTARRAY
     isNumericBool = lambda type: type == TypeChecker.INTARRAY or type == TypeChecker.NUMERICARRAY or type == TypeChecker.BOOLEANARRAY or type == TypeChecker.NUMERIC_BOOL_ARR
     if TypeChecker.isAtomic(left):
         ltype = TypeChecker.getArrayTypeBasedOnAtomic(left)
     else:
         ltype = left.dataType
     rtype = TypeChecker.getArrayTypeBasedOnAtomic(right)
     if ltype == rtype:
         node.dataType = ltype
         status = True
     elif isLooselyNumeric(ltype) and isLooselyNumeric(rtype):
         node.dataType = TypeChecker.NUMERICARRAY
         status = True
     elif isNumericBool(ltype) and isNumericBool(rtype):
         node.dataType = TypeChecker.NUMERIC_BOOL_ARR
         status = True
     else:
         status = False
         err = f"Array cannot hold different types: {TypeChecker.getAtomicTypeBasedOnArray(ltype)} and {TypeChecker.getAtomicTypeBasedOnArray(rtype)}"
     return Result(status, err)