cast_kind¶
Cast Kind nodes or cast kind types.
声明¶
语法¶
cast_kind
= RealToInteger
| IntegerToReal
| LogicalToReal
| RealToReal
| IntegerToInteger
| RealToComplex
| IntegerToComplex
| IntegerToLogical
| RealToLogical
| CharacterToLogical
| CharacterToInteger
| CharacterToList
| ComplexToLogical
| ComplexToComplex
| ComplexToReal
| ComplexToInteger
| LogicalToInteger
| RealToCharacter
| IntegerToCharacter
| LogicalToCharacter
参数¶
无。
返回值¶
无。
描述¶
cast_kind nodes or cast kind types denotes kinds to typecast one idenfier to another.
cast_kind denotes the types supported for cast in LFortran.
类型¶
It denotes all types supported in LFortran, which are:
RealToIntegerdenotescast_kindofrealtointegertype.IntegerToRealdenotescast_kindofintegertorealtype.LogicalToRealdenotescast_kindoflogicaltorealtype.RealToRealdenotescast_kindofRealtoReal.IntegerToIntegerdenotescast_kindofintegertointeger.RealToComplexdenotescast_kindofRealtocomplex.IntegerToComplexdenotescast_kindofintegertocomplex.IntegerToLogicaldenotescast_kindofintegertological.RealToLogicaldenotescast_kindofrealtological.CharacterToLogicaldenotescast_kindofcharactertological.CharacterToIntegerdenotescast_kindofcharactertointeger.CharacterToListdenotescast_kindofcharactertolist.ComplexToLogicaldenotescast_kindofcomplextological.ComplexToComplexdenotescast_kindofcomplextocomplex.ComplexToRealdenotescast_kindofcomplextoreal.ComplexToIntegerdenotescast_kindofcomplextointeger.LogicalToIntegerdenotescast_kindoflogicaltointeger.RealToCharacterdenotescast_kindofrealtocharacter.IntegerToCharacterdenotescast_kindofintegertocharacter.LogicalToCharacterdenotescast_kindoflogicaltocharacter.
示例¶
Example for RealToInteger:
program types_03
implicit none
real :: r
integer :: i
r = 1.5
print *, r
i = r
print *, i
end program
ASR:
(TranslationUnit
(SymbolTable
1
{
types_03:
(Program
(SymbolTable
2
{
i:
(Variable
2
i
Local
()
()
Default
(Integer 4 [])
Source
Public
Required
.false.
),
r:
(Variable
2
r
Local
()
()
Default
(Real 4 [])
Source
Public
Required
.false.
)
})
types_03
[]
[(=
(Var 2 r)
(RealConstant
1.500000
(Real 4 [])
)
()
)
(Print
()
[(Var 2 r)]
()
()
)
(=
(Var 2 i)
(Cast
(Var 2 r)
RealToInteger
(Integer 4 [])
()
)
()
)
(Print
()
[(Var 2 i)]
()
()
)]
)
})
[]
)
Example for IntegerToReal:
program types_02
implicit none
real :: r
integer :: i
i = 1
r = 1
r = i
end program
ASR:
(TranslationUnit
(SymbolTable
1
{
types_02:
(Program
(SymbolTable
2
{
i:
(Variable
2
i
Local
()
()
Default
(Integer 4 [])
Source
Public
Required
.false.
),
r:
(Variable
2
r
Local
()
()
Default
(Real 4 [])
Source
Public
Required
.false.
)
})
types_02
[]
[(=
(Var 2 i)
(IntegerConstant 1 (Integer 4 []))
()
)
(=
(Var 2 r)
(Cast
(IntegerConstant 1 (Integer 4 []))
IntegerToReal
(Real 4 [])
(RealConstant
1.000000
(Real 4 [])
)
)
()
)
(=
(Var 2 r)
(Cast
(Var 2 i)
IntegerToReal
(Real 4 [])
()
)
()
)]
)
})
[]
)
Example of RealToReal:
program types_01
implicit none
real :: r
r = 1.0
r = 1.5
r = 1.
r = float(2)
r = dble(3)
end program
ASR:
(TranslationUnit
(SymbolTable
1
{
types_01:
(Program
(SymbolTable
2
{
r:
(Variable
2
r
Local
()
()
Default
(Real 4 [])
Source
Public
Required
.false.
)
})
types_01
[]
[(=
(Var 2 r)
(RealConstant
1.000000
(Real 4 [])
)
()
)
(=
(Var 2 r)
(RealConstant
1.500000
(Real 4 [])
)
()
)
(=
(Var 2 r)
(RealConstant
1.000000
(Real 4 [])
)
()
)
(=
(Var 2 r)
(Cast
(Cast
(IntegerConstant 2 (Integer 4 []))
IntegerToReal
(Real 8 [])
(RealConstant
2.000000
(Real 8 [])
)
)
RealToReal
(Real 4 [])
(RealConstant
2.000000
(Real 4 [])
)
)
()
)
(=
(Var 2 r)
(Cast
(Cast
(IntegerConstant 3 (Integer 4 []))
IntegerToReal
(Real 8 [])
(RealConstant
3.000000
(Real 8 [])
)
)
RealToReal
(Real 4 [])
(RealConstant
3.000000
(Real 4 [])
)
)
()
)]
)
})
[]
)
Example of IntegerToLogical:
program logical4
! this program checks logical operators
implicit none
! variable declaration
logical :: a, b, c
! assigning values
a = 2
b = -1
c = 0
print *, a, b, c
end program logical4
ASR:
(TranslationUnit
(SymbolTable
1
{
logical4:
(Program
(SymbolTable
2
{
a:
(Variable
2
a
Local
()
()
Default
(Logical 4 [])
Source
Public
Required
.false.
),
b:
(Variable
2
b
Local
()
()
Default
(Logical 4 [])
Source
Public
Required
.false.
),
c:
(Variable
2
c
Local
()
()
Default
(Logical 4 [])
Source
Public
Required
.false.
)
})
logical4
[]
[(=
(Var 2 a)
(Cast
(IntegerConstant 2 (Integer 4 []))
IntegerToLogical
(Logical 4 [])
()
)
()
)
(=
(Var 2 b)
(Cast
(IntegerUnaryMinus
(IntegerConstant 1 (Integer 4 []))
(Integer 4 [])
(IntegerConstant -1 (Integer 4 []))
)
IntegerToLogical
(Logical 4 [])
()
)
()
)
(=
(Var 2 c)
(Cast
(IntegerConstant 0 (Integer 4 []))
IntegerToLogical
(Logical 4 [])
()
)
()
)
(Print
()
[(Var 2 a)
(Var 2 b)
(Var 2 c)]
()
()
)]
)
})
[]
)
Example of ComplexToComplex:
program complex_dp
complex(4) :: zero
complex(8) :: v
complex :: x
zero = 0.0_4
v = (1.05_4, 1.05_4)
x = (1.05_4, 1.05_8)
print *, v, x, zero
end program
ASR:
(TranslationUnit
(SymbolTable
1
{
complex_dp:
(Program
(SymbolTable
2
{
v:
(Variable
2
v
Local
()
()
Default
(Complex 8 [])
Source
Public
Required
.false.
),
x:
(Variable
2
x
Local
()
()
Default
(Complex 4 [])
Source
Public
Required
.false.
),
zero:
(Variable
2
zero
Local
()
()
Default
(Complex 4 [])
Source
Public
Required
.false.
)
})
complex_dp
[]
[(=
(Var 2 zero)
(Cast
(RealConstant
0.000000
(Real 4 [])
)
RealToComplex
(Complex 4 [])
(ComplexConstant
0.000000
0.000000
(Complex 4 [])
)
)
()
)
(=
(Var 2 v)
(Cast
(ComplexConstructor
(RealConstant
1.050000
(Real 4 [])
)
(RealConstant
1.050000
(Real 4 [])
)
(Complex 4 [])
(ComplexConstant
1.050000
1.050000
(Complex 4 [])
)
)
ComplexToComplex
(Complex 8 [])
()
)
()
)
(=
(Var 2 x)
(Cast
(ComplexConstructor
(RealConstant
1.050000
(Real 4 [])
)
(RealConstant
1.050000
(Real 8 [])
)
(Complex 8 [])
(ComplexConstant
1.050000
1.050000
(Complex 8 [])
)
)
ComplexToComplex
(Complex 4 [])
()
)
()
)
(Print
()
[(Var 2 v)
(Var 2 x)
(Var 2 zero)]
()
()
)]
)
})
[]
)