IfArithmetic¶
The arithmetic IF
statement branches to one of three specified statements,
depending on the value of an arithmetic expression.
Declaration¶
Syntax¶
IfArithmetic(expr test, int lt_label, int eq_label, int gt_label)
Arguments¶
test
contains conditional expression to be evaluated.
lt_label
contains
eq_label
contains
gt_label
contains
Return values¶
None.
Описание¶
IfArithmetic is the arithmetic if
statement which branches to one of three
specified statements, depending on the value of an arithmetic expression.
Types¶
test
can be arithmetic expression of type integer, real, double precision, or
quadruple precision.
The other three lables are labels of executable statements.
Examples¶
program ifarithmetic
integer :: i
i = 5
if (i == 5) print *, 'correct'
if (i == 6) print *, 'incorrect'
i = -2
40 i = i + 1
if (i) 50, 60, 70
50 print *, 'i < 0'
go to 40
60 print *, 'i == 0'
go to 40
70 print *, 'i > 0'
end program
ASR:
(TranslationUnit
(SymbolTable
1
{
if1:
(Program
(SymbolTable
2
{
i:
(Variable
2
i
Local
()
()
Default
(Integer 4 [])
Source
Public
Required
.false.
)
})
if1
[]
[(=
(Var 2 i)
(IntegerConstant 5 (Integer 4 []))
()
)
(If
(IntegerCompare
(Var 2 i)
Eq
(IntegerConstant 5 (Integer 4 []))
(Logical 4 [])
()
)
[(Print
()
[(StringConstant
"correct"
(Character 1 7 () [])
)]
()
()
)]
[]
)
(If
(IntegerCompare
(Var 2 i)
Eq
(IntegerConstant 6 (Integer 4 []))
(Logical 4 [])
()
)
[(Print
()
[(StringConstant
"incorrect"
(Character 1 9 () [])
)]
()
()
)]
[]
)
(=
(Var 2 i)
(IntegerUnaryMinus
(IntegerConstant 2 (Integer 4 []))
(Integer 4 [])
(IntegerConstant -2 (Integer 4 []))
)
()
)
(GoToTarget
40
40
)
(=
(Var 2 i)
(IntegerBinOp
(Var 2 i)
Add
(IntegerConstant 1 (Integer 4 []))
(Integer 4 [])
()
)
()
)
(If
(IntegerCompare
(Var 2 i)
Lt
(IntegerConstant 0 (Integer 4 []))
(Logical 4 [])
()
)
[(GoTo
50
50
)]
[(If
(IntegerCompare
(Var 2 i)
Gt
(IntegerConstant 0 (Integer 4 []))
(Logical 4 [])
()
)
[(GoTo
70
70
)]
[(GoTo
60
60
)]
)]
)
(GoToTarget
50
50
)
(Print
()
[(StringConstant
"i < 0"
(Character 1 5 () [])
)]
()
()
)
(GoTo
40
40
)
(GoToTarget
60
60
)
(Print
()
[(StringConstant
"i == 0"
(Character 1 6 () [])
)]
()
()
)
(GoTo
40
40
)
(GoToTarget
70
70
)
(Print
()
[(StringConstant
"i > 0"
(Character 1 5 () [])
)]
()
()
)]
)
})
[]
)