AST 和 ASR 之间的区别¶
让我们看一个简单的 Fortran 代码:
integer function f(a, b) result(r)
integer, intent(in) :: a, b
integer :: c, d
c = a + b - d
r = c * a
end function
and look at what the AST and ASR look like.
AST¶
[1]:
%%showast
integer function f(a, b) result(r)
integer, intent(in) :: a, b
integer :: c, d
c = a + b - d
r = c * a
end function
(TranslationUnit
[(Function
f
[(a)
(b)]
[(AttrType
TypeInteger
[]
()
()
None
)]
r
()
()
[(Declaration
(AttrType
TypeInteger
[]
()
()
None
)
[(AttrIntent
In
)]
[(a
[]
[]
()
()
None
())
(b
[]
[]
()
()
None
())]
()
)
(Declaration
(AttrType
TypeInteger
[]
()
()
None
)
[]
[(c
[]
[]
()
()
None
())
(d
[]
[]
()
()
None
())]
()
)
(Assignment
0
c
(- (+ a b) d)
()
)
(Assignment
0
r
(* c a)
()
)]
[]
[]
)]
)
AST 没有任何语义信息,但具有表示声明的节点,例如 integer, intent(in) :: a。诸如 a 之类的变量由 Name 节点表示,并且尚未连接到它们的声明。
The AST can also be exported in JSON, including source file name, line and column information: lfortran example.f90 --show-ast --json
ASR¶
[2]:
%%showasr
integer function f(a, b) result(r)
integer, intent(in) :: a, b
integer :: c, d
c = a + b - d
r = c * a
end function
(TranslationUnit
(SymbolTable
1
{
_lcompilers_len_trim_str:
(Function
(SymbolTable
18
{
result:
(Variable
18
result
[]
ReturnVar
()
()
Default
(Integer 4)
()
ExternalUndefined
Public
Required
.false.
.false.
.false.
()
.false.
.false.
NotMethod
()
[]
),
str:
(Variable
18
str
[]
In
()
()
Default
(String 1 () AssumedLength DescriptorString)
()
ExternalUndefined
Public
Required
.false.
.false.
.false.
()
.false.
.false.
NotMethod
()
[]
)
})
_lcompilers_len_trim_str
(FunctionType
[(String 1 () AssumedLength DescriptorString)]
(Integer 4)
ExternalUndefined
Implementation
()
.false.
.false.
.false.
.false.
.false.
[]
.false.
)
[]
[(Var 18 str)]
[(Assignment
(Var 18 result)
(Cast
(StringLen
(Var 18 str)
(Integer 4)
()
)
IntegerToInteger
(Integer 4)
()
()
)
()
.false.
.false.
)
(If
()
(IntegerCompare
(Var 18 result)
NotEq
(IntegerConstant 0 (Integer 4) Decimal)
(Logical 4)
()
)
[(WhileLoop
()
(StringCompare
(StringItem
(Var 18 str)
(Var 18 result)
(String 1 (IntegerConstant 1 (Integer 4) Decimal) ExpressionLength DescriptorString)
()
)
Eq
(StringConstant
" "
(String 1 (IntegerConstant 1 (Integer 4) Decimal) ExpressionLength DescriptorString)
)
(Logical 4)
()
)
[(Assignment
(Var 18 result)
(IntegerBinOp
(Var 18 result)
Sub
(IntegerConstant 1 (Integer 4) Decimal)
(Integer 4)
()
)
()
.false.
.false.
)
(If
()
(IntegerCompare
(Var 18 result)
Eq
(IntegerConstant 0 (Integer 4) Decimal)
(Logical 4)
()
)
[(Exit
()
)]
[]
)]
[]
)]
[]
)]
(Var 18 result)
Public
.false.
.false.
()
),
_lcompilers_len_trim_str1:
(Function
(SymbolTable
20
{
result:
(Variable
20
result
[]
ReturnVar
()
()
Default
(Integer 4)
()
ExternalUndefined
Public
Required
.false.
.false.
.false.
()
.false.
.false.
NotMethod
()
[]
),
str:
(Variable
20
str
[]
In
()
()
Default
(String 1 () AssumedLength DescriptorString)
()
ExternalUndefined
Public
Required
.false.
.false.
.false.
()
.false.
.false.
NotMethod
()
[]
)
})
_lcompilers_len_trim_str1
(FunctionType
[(String 1 () AssumedLength DescriptorString)]
(Integer 4)
ExternalUndefined
Implementation
()
.false.
.false.
.false.
.false.
.false.
[]
.false.
)
[]
[(Var 20 str)]
[(Assignment
(Var 20 result)
(Cast
(StringLen
(Var 20 str)
(Integer 4)
()
)
IntegerToInteger
(Integer 4)
()
()
)
()
.false.
.false.
)
(If
()
(IntegerCompare
(Var 20 result)
NotEq
(IntegerConstant 0 (Integer 4) Decimal)
(Logical 4)
()
)
[(WhileLoop
()
(StringCompare
(StringItem
(Var 20 str)
(Var 20 result)
(String 1 (IntegerConstant 1 (Integer 4) Decimal) ExpressionLength DescriptorString)
()
)
Eq
(StringConstant
" "
(String 1 (IntegerConstant 1 (Integer 4) Decimal) ExpressionLength DescriptorString)
)
(Logical 4)
()
)
[(Assignment
(Var 20 result)
(IntegerBinOp
(Var 20 result)
Sub
(IntegerConstant 1 (Integer 4) Decimal)
(Integer 4)
()
)
()
.false.
.false.
)
(If
()
(IntegerCompare
(Var 20 result)
Eq
(IntegerConstant 0 (Integer 4) Decimal)
(Logical 4)
()
)
[(Exit
()
)]
[]
)]
[]
)]
[]
)]
(Var 20 result)
Public
.false.
.false.
()
),
_lcompilers_len_trim_str2:
(Function
(SymbolTable
22
{
result:
(Variable
22
result
[]
ReturnVar
()
()
Default
(Integer 4)
()
ExternalUndefined
Public
Required
.false.
.false.
.false.
()
.false.
.false.
NotMethod
()
[]
),
str:
(Variable
22
str
[]
In
()
()
Default
(String 1 () AssumedLength DescriptorString)
()
ExternalUndefined
Public
Required
.false.
.false.
.false.
()
.false.
.false.
NotMethod
()
[]
)
})
_lcompilers_len_trim_str2
(FunctionType
[(String 1 () AssumedLength DescriptorString)]
(Integer 4)
ExternalUndefined
Implementation
()
.false.
.false.
.false.
.false.
.false.
[]
.false.
)
[]
[(Var 22 str)]
[(Assignment
(Var 22 result)
(Cast
(StringLen
(Var 22 str)
(Integer 4)
()
)
IntegerToInteger
(Integer 4)
()
()
)
()
.false.
.false.
)
(If
()
(IntegerCompare
(Var 22 result)
NotEq
(IntegerConstant 0 (Integer 4) Decimal)
(Logical 4)
()
)
[(WhileLoop
()
(StringCompare
(StringItem
(Var 22 str)
(Var 22 result)
(String 1 (IntegerConstant 1 (Integer 4) Decimal) ExpressionLength DescriptorString)
()
)
Eq
(StringConstant
" "
(String 1 (IntegerConstant 1 (Integer 4) Decimal) ExpressionLength DescriptorString)
)
(Logical 4)
()
)
[(Assignment
(Var 22 result)
(IntegerBinOp
(Var 22 result)
Sub
(IntegerConstant 1 (Integer 4) Decimal)
(Integer 4)
()
)
()
.false.
.false.
)
(If
()
(IntegerCompare
(Var 22 result)
Eq
(IntegerConstant 0 (Integer 4) Decimal)
(Logical 4)
()
)
[(Exit
()
)]
[]
)]
[]
)]
[]
)]
(Var 22 result)
Public
.false.
.false.
()
),
_lcompilers_len_trim_str3:
(Function
(SymbolTable
24
{
result:
(Variable
24
result
[]
ReturnVar
()
()
Default
(Integer 4)
()
ExternalUndefined
Public
Required
.false.
.false.
.false.
()
.false.
.false.
NotMethod
()
[]
),
str:
(Variable
24
str
[]
In
()
()
Default
(String 1 () AssumedLength DescriptorString)
()
ExternalUndefined
Public
Required
.false.
.false.
.false.
()
.false.
.false.
NotMethod
()
[]
)
})
_lcompilers_len_trim_str3
(FunctionType
[(String 1 () AssumedLength DescriptorString)]
(Integer 4)
ExternalUndefined
Implementation
()
.false.
.false.
.false.
.false.
.false.
[]
.false.
)
[]
[(Var 24 str)]
[(Assignment
(Var 24 result)
(Cast
(StringLen
(Var 24 str)
(Integer 4)
()
)
IntegerToInteger
(Integer 4)
()
()
)
()
.false.
.false.
)
(If
()
(IntegerCompare
(Var 24 result)
NotEq
(IntegerConstant 0 (Integer 4) Decimal)
(Logical 4)
()
)
[(WhileLoop
()
(StringCompare
(StringItem
(Var 24 str)
(Var 24 result)
(String 1 (IntegerConstant 1 (Integer 4) Decimal) ExpressionLength DescriptorString)
()
)
Eq
(StringConstant
" "
(String 1 (IntegerConstant 1 (Integer 4) Decimal) ExpressionLength DescriptorString)
)
(Logical 4)
()
)
[(Assignment
(Var 24 result)
(IntegerBinOp
(Var 24 result)
Sub
(IntegerConstant 1 (Integer 4) Decimal)
(Integer 4)
()
)
()
.false.
.false.
)
(If
()
(IntegerCompare
(Var 24 result)
Eq
(IntegerConstant 0 (Integer 4) Decimal)
(Logical 4)
()
)
[(Exit
()
)]
[]
)]
[]
)]
[]
)]
(Var 24 result)
Public
.false.
.false.
()
),
_lcompilers_len_trim_str4:
(Function
(SymbolTable
28
{
result:
(Variable
28
result
[]
ReturnVar
()
()
Default
(Integer 4)
()
ExternalUndefined
Public
Required
.false.
.false.
.false.
()
.false.
.false.
NotMethod
()
[]
),
str:
(Variable
28
str
[]
In
()
()
Default
(String 1 () AssumedLength DescriptorString)
()
ExternalUndefined
Public
Required
.false.
.false.
.false.
()
.false.
.false.
NotMethod
()
[]
)
})
_lcompilers_len_trim_str4
(FunctionType
[(String 1 () AssumedLength DescriptorString)]
(Integer 4)
ExternalUndefined
Implementation
()
.false.
.false.
.false.
.false.
.false.
[]
.false.
)
[]
[(Var 28 str)]
[(Assignment
(Var 28 result)
(Cast
(StringLen
(Var 28 str)
(Integer 4)
()
)
IntegerToInteger
(Integer 4)
()
()
)
()
.false.
.false.
)
(If
()
(IntegerCompare
(Var 28 result)
NotEq
(IntegerConstant 0 (Integer 4) Decimal)
(Logical 4)
()
)
[(WhileLoop
()
(StringCompare
(StringItem
(Var 28 str)
(Var 28 result)
(String 1 (IntegerConstant 1 (Integer 4) Decimal) ExpressionLength DescriptorString)
()
)
Eq
(StringConstant
" "
(String 1 (IntegerConstant 1 (Integer 4) Decimal) ExpressionLength DescriptorString)
)
(Logical 4)
()
)
[(Assignment
(Var 28 result)
(IntegerBinOp
(Var 28 result)
Sub
(IntegerConstant 1 (Integer 4) Decimal)
(Integer 4)
()
)
()
.false.
.false.
)
(If
()
(IntegerCompare
(Var 28 result)
Eq
(IntegerConstant 0 (Integer 4) Decimal)
(Logical 4)
()
)
[(Exit
()
)]
[]
)]
[]
)]
[]
)]
(Var 28 result)
Public
.false.
.false.
()
),
_lcompilers_len_trim_str5:
(Function
(SymbolTable
30
{
result:
(Variable
30
result
[]
ReturnVar
()
()
Default
(Integer 4)
()
ExternalUndefined
Public
Required
.false.
.false.
.false.
()
.false.
.false.
NotMethod
()
[]
),
str:
(Variable
30
str
[]
In
()
()
Default
(String 1 () AssumedLength DescriptorString)
()
ExternalUndefined
Public
Required
.false.
.false.
.false.
()
.false.
.false.
NotMethod
()
[]
)
})
_lcompilers_len_trim_str5
(FunctionType
[(String 1 () AssumedLength DescriptorString)]
(Integer 4)
ExternalUndefined
Implementation
()
.false.
.false.
.false.
.false.
.false.
[]
.false.
)
[]
[(Var 30 str)]
[(Assignment
(Var 30 result)
(Cast
(StringLen
(Var 30 str)
(Integer 4)
()
)
IntegerToInteger
(Integer 4)
()
()
)
()
.false.
.false.
)
(If
()
(IntegerCompare
(Var 30 result)
NotEq
(IntegerConstant 0 (Integer 4) Decimal)
(Logical 4)
()
)
[(WhileLoop
()
(StringCompare
(StringItem
(Var 30 str)
(Var 30 result)
(String 1 (IntegerConstant 1 (Integer 4) Decimal) ExpressionLength DescriptorString)
()
)
Eq
(StringConstant
" "
(String 1 (IntegerConstant 1 (Integer 4) Decimal) ExpressionLength DescriptorString)
)
(Logical 4)
()
)
[(Assignment
(Var 30 result)
(IntegerBinOp
(Var 30 result)
Sub
(IntegerConstant 1 (Integer 4) Decimal)
(Integer 4)
()
)
()
.false.
.false.
)
(If
()
(IntegerCompare
(Var 30 result)
Eq
(IntegerConstant 0 (Integer 4) Decimal)
(Logical 4)
()
)
[(Exit
()
)]
[]
)]
[]
)]
[]
)]
(Var 30 result)
Public
.false.
.false.
()
),
_lcompilers_len_trim_str6:
(Function
(SymbolTable
32
{
result:
(Variable
32
result
[]
ReturnVar
()
()
Default
(Integer 4)
()
ExternalUndefined
Public
Required
.false.
.false.
.false.
()
.false.
.false.
NotMethod
()
[]
),
str:
(Variable
32
str
[]
In
()
()
Default
(String 1 () AssumedLength DescriptorString)
()
ExternalUndefined
Public
Required
.false.
.false.
.false.
()
.false.
.false.
NotMethod
()
[]
)
})
_lcompilers_len_trim_str6
(FunctionType
[(String 1 () AssumedLength DescriptorString)]
(Integer 4)
ExternalUndefined
Implementation
()
.false.
.false.
.false.
.false.
.false.
[]
.false.
)
[]
[(Var 32 str)]
[(Assignment
(Var 32 result)
(Cast
(StringLen
(Var 32 str)
(Integer 4)
()
)
IntegerToInteger
(Integer 4)
()
()
)
()
.false.
.false.
)
(If
()
(IntegerCompare
(Var 32 result)
NotEq
(IntegerConstant 0 (Integer 4) Decimal)
(Logical 4)
()
)
[(WhileLoop
()
(StringCompare
(StringItem
(Var 32 str)
(Var 32 result)
(String 1 (IntegerConstant 1 (Integer 4) Decimal) ExpressionLength DescriptorString)
()
)
Eq
(StringConstant
" "
(String 1 (IntegerConstant 1 (Integer 4) Decimal) ExpressionLength DescriptorString)
)
(Logical 4)
()
)
[(Assignment
(Var 32 result)
(IntegerBinOp
(Var 32 result)
Sub
(IntegerConstant 1 (Integer 4) Decimal)
(Integer 4)
()
)
()
.false.
.false.
)
(If
()
(IntegerCompare
(Var 32 result)
Eq
(IntegerConstant 0 (Integer 4) Decimal)
(Logical 4)
()
)
[(Exit
()
)]
[]
)]
[]
)]
[]
)]
(Var 32 result)
Public
.false.
.false.
()
),
_lcompilers_len_trim_str7:
(Function
(SymbolTable
34
{
result:
(Variable
34
result
[]
ReturnVar
()
()
Default
(Integer 4)
()
ExternalUndefined
Public
Required
.false.
.false.
.false.
()
.false.
.false.
NotMethod
()
[]
),
str:
(Variable
34
str
[]
In
()
()
Default
(String 1 () AssumedLength DescriptorString)
()
ExternalUndefined
Public
Required
.false.
.false.
.false.
()
.false.
.false.
NotMethod
()
[]
)
})
_lcompilers_len_trim_str7
(FunctionType
[(String 1 () AssumedLength DescriptorString)]
(Integer 4)
ExternalUndefined
Implementation
()
.false.
.false.
.false.
.false.
.false.
[]
.false.
)
[]
[(Var 34 str)]
[(Assignment
(Var 34 result)
(Cast
(StringLen
(Var 34 str)
(Integer 4)
()
)
IntegerToInteger
(Integer 4)
()
()
)
()
.false.
.false.
)
(If
()
(IntegerCompare
(Var 34 result)
NotEq
(IntegerConstant 0 (Integer 4) Decimal)
(Logical 4)
()
)
[(WhileLoop
()
(StringCompare
(StringItem
(Var 34 str)
(Var 34 result)
(String 1 (IntegerConstant 1 (Integer 4) Decimal) ExpressionLength DescriptorString)
()
)
Eq
(StringConstant
" "
(String 1 (IntegerConstant 1 (Integer 4) Decimal) ExpressionLength DescriptorString)
)
(Logical 4)
()
)
[(Assignment
(Var 34 result)
(IntegerBinOp
(Var 34 result)
Sub
(IntegerConstant 1 (Integer 4) Decimal)
(Integer 4)
()
)
()
.false.
.false.
)
(If
()
(IntegerCompare
(Var 34 result)
Eq
(IntegerConstant 0 (Integer 4) Decimal)
(Logical 4)
()
)
[(Exit
()
)]
[]
)]
[]
)]
[]
)]
(Var 34 result)
Public
.false.
.false.
()
),
_lcompilers_stringconcat:
(Function
(SymbolTable
15
{
concat_result:
(Variable
15
concat_result
[]
Out
()
()
Default
(Allocatable
(String 1 () DeferredLength DescriptorString)
)
()
ExternalUndefined
Public
Required
.false.
.false.
.false.
()
.false.
.false.
NotMethod
()
[]
),
s1:
(Variable
15
s1
[]
In
()
()
Default
(String 1 () AssumedLength DescriptorString)
()
ExternalUndefined
Public
Required
.false.
.false.
.false.
()
.false.
.false.
NotMethod
()
[]
),
s1_len:
(Variable
15
s1_len
[]
In
()
()
Default
(Integer 4)
()
ExternalUndefined
Public
Required
.false.
.false.
.false.
()
.false.
.false.
NotMethod
()
[]
),
s2:
(Variable
15
s2
[]
In
()
()
Default
(String 1 () AssumedLength DescriptorString)
()
ExternalUndefined
Public
Required
.false.
.false.
.false.
()
.false.
.false.
NotMethod
()
[]
),
s2_len:
(Variable
15
s2_len
[]
In
()
()
Default
(Integer 4)
()
ExternalUndefined
Public
Required
.false.
.false.
.false.
()
.false.
.false.
NotMethod
()
[]
)
})
_lcompilers_stringconcat
(FunctionType
[(String 1 () AssumedLength DescriptorString)
(String 1 () AssumedLength DescriptorString)
(Integer 4)
(Integer 4)
(Allocatable
(String 1 () DeferredLength DescriptorString)
)]
()
ExternalUndefined
Implementation
()
.false.
.false.
.false.
.false.
.false.
[]
.false.
)
[]
[(Var 15 s1)
(Var 15 s2)
(Var 15 s1_len)
(Var 15 s2_len)
(Var 15 concat_result)]
[(Allocate
[((Var 15 concat_result)
[]
(IntegerBinOp
(Var 15 s1_len)
Add
(Var 15 s2_len)
(Integer 4)
()
)
()
())]
()
()
()
)
(Assignment
(StringSection
(Var 15 concat_result)
(IntegerConstant 1 (Integer 4) Decimal)
(Var 15 s1_len)
(IntegerConstant 1 (Integer 4) Decimal)
(String 1 (IntegerBinOp
(IntegerBinOp
(Var 15 s1_len)
Sub
(IntegerConstant 1 (Integer 4) Decimal)
(Integer 4)
()
)
Add
(IntegerConstant 1 (Integer 4) Decimal)
(Integer 4)
()
) ExpressionLength DescriptorString)
()
)
(Var 15 s1)
()
.false.
.false.
)
(Assignment
(StringSection
(Var 15 concat_result)
(IntegerBinOp
(Var 15 s1_len)
Add
(IntegerConstant 1 (Integer 4) Decimal)
(Integer 4)
()
)
(StringLen
(Var 15 concat_result)
(Integer 4)
()
)
(IntegerConstant 1 (Integer 4) Decimal)
(String 1 (IntegerBinOp
(IntegerBinOp
(StringLen
(Var 15 concat_result)
(Integer 4)
()
)
Sub
(IntegerBinOp
(Var 15 s1_len)
Add
(IntegerConstant 1 (Integer 4) Decimal)
(Integer 4)
()
)
(Integer 4)
()
)
Add
(IntegerConstant 1 (Integer 4) Decimal)
(Integer 4)
()
) ExpressionLength DescriptorString)
()
)
(Var 15 s2)
()
.false.
.false.
)]
()
Public
.false.
.false.
()
),
_lcompilers_trim_str:
(Function
(SymbolTable
17
{
result:
(Variable
17
result
[_lcompilers_len_trim_str
str]
Out
()
()
Default
(String 1 (FunctionCall
1 _lcompilers_len_trim_str
1 _lcompilers_len_trim_str
[((Var 17 str))]
(Integer 4)
()
()
) ExpressionLength DescriptorString)
()
ExternalUndefined
Public
Required
.false.
.false.
.false.
()
.false.
.false.
NotMethod
()
[]
),
str:
(Variable
17
str
[]
In
()
()
Default
(String 1 () AssumedLength DescriptorString)
()
ExternalUndefined
Public
Required
.false.
.false.
.false.
()
.false.
.false.
NotMethod
()
[]
)
})
_lcompilers_trim_str
(FunctionType
[(String 1 () AssumedLength DescriptorString)
(String 1 (FunctionCall
1 _lcompilers_len_trim_str
1 _lcompilers_len_trim_str
[((FunctionParam
0
(String 1 () AssumedLength DescriptorString)
()
))]
(Integer 4)
()
()
) ExpressionLength DescriptorString)]
()
ExternalUndefined
Implementation
()
.false.
.false.
.false.
.false.
.false.
[]
.false.
)
[_lcompilers_len_trim_str]
[(Var 17 str)
(Var 17 result)]
[(Assignment
(Var 17 result)
(StringSection
(Var 17 str)
(IntegerConstant 1 (Integer 4) Decimal)
(FunctionCall
1 _lcompilers_len_trim_str
1 _lcompilers_len_trim_str
[((Var 17 str))]
(Integer 4)
()
()
)
(IntegerConstant 1 (Integer 4) Decimal)
(String 1 (IntegerBinOp
(IntegerBinOp
(FunctionCall
1 _lcompilers_len_trim_str
1 _lcompilers_len_trim_str
[((Var 17 str))]
(Integer 4)
()
()
)
Sub
(IntegerConstant 1 (Integer 4) Decimal)
(Integer 4)
()
)
Add
(IntegerConstant 1 (Integer 4) Decimal)
(Integer 4)
()
) ExpressionLength DescriptorString)
()
)
()
.false.
.false.
)]
()
Public
.false.
.false.
()
),
_lcompilers_trim_str1:
(Function
(SymbolTable
19
{
result:
(Variable
19
result
[_lcompilers_len_trim_str1
str]
Out
()
()
Default
(String 1 (FunctionCall
1 _lcompilers_len_trim_str1
1 _lcompilers_len_trim_str1
[((Var 19 str))]
(Integer 4)
()
()
) ExpressionLength DescriptorString)
()
ExternalUndefined
Public
Required
.false.
.false.
.false.
()
.false.
.false.
NotMethod
()
[]
),
str:
(Variable
19
str
[]
In
()
()
Default
(String 1 () AssumedLength DescriptorString)
()
ExternalUndefined
Public
Required
.false.
.false.
.false.
()
.false.
.false.
NotMethod
()
[]
)
})
_lcompilers_trim_str1
(FunctionType
[(String 1 () AssumedLength DescriptorString)
(String 1 (FunctionCall
1 _lcompilers_len_trim_str1
1 _lcompilers_len_trim_str1
[((FunctionParam
0
(String 1 () AssumedLength DescriptorString)
()
))]
(Integer 4)
()
()
) ExpressionLength DescriptorString)]
()
ExternalUndefined
Implementation
()
.false.
.false.
.false.
.false.
.false.
[]
.false.
)
[_lcompilers_len_trim_str1]
[(Var 19 str)
(Var 19 result)]
[(Assignment
(Var 19 result)
(StringSection
(Var 19 str)
(IntegerConstant 1 (Integer 4) Decimal)
(FunctionCall
1 _lcompilers_len_trim_str1
1 _lcompilers_len_trim_str1
[((Var 19 str))]
(Integer 4)
()
()
)
(IntegerConstant 1 (Integer 4) Decimal)
(String 1 (IntegerBinOp
(IntegerBinOp
(FunctionCall
1 _lcompilers_len_trim_str1
1 _lcompilers_len_trim_str1
[((Var 19 str))]
(Integer 4)
()
()
)
Sub
(IntegerConstant 1 (Integer 4) Decimal)
(Integer 4)
()
)
Add
(IntegerConstant 1 (Integer 4) Decimal)
(Integer 4)
()
) ExpressionLength DescriptorString)
()
)
()
.false.
.false.
)]
()
Public
.false.
.false.
()
),
_lcompilers_trim_str2:
(Function
(SymbolTable
21
{
result:
(Variable
21
result
[_lcompilers_len_trim_str2
str]
Out
()
()
Default
(String 1 (FunctionCall
1 _lcompilers_len_trim_str2
1 _lcompilers_len_trim_str2
[((Var 21 str))]
(Integer 4)
()
()
) ExpressionLength DescriptorString)
()
ExternalUndefined
Public
Required
.false.
.false.
.false.
()
.false.
.false.
NotMethod
()
[]
),
str:
(Variable
21
str
[]
In
()
()
Default
(String 1 () AssumedLength DescriptorString)
()
ExternalUndefined
Public
Required
.false.
.false.
.false.
()
.false.
.false.
NotMethod
()
[]
)
})
_lcompilers_trim_str2
(FunctionType
[(String 1 () AssumedLength DescriptorString)
(String 1 (FunctionCall
1 _lcompilers_len_trim_str2
1 _lcompilers_len_trim_str2
[((FunctionParam
0
(String 1 () AssumedLength DescriptorString)
()
))]
(Integer 4)
()
()
) ExpressionLength DescriptorString)]
()
ExternalUndefined
Implementation
()
.false.
.false.
.false.
.false.
.false.
[]
.false.
)
[_lcompilers_len_trim_str2]
[(Var 21 str)
(Var 21 result)]
[(Assignment
(Var 21 result)
(StringSection
(Var 21 str)
(IntegerConstant 1 (Integer 4) Decimal)
(FunctionCall
1 _lcompilers_len_trim_str2
1 _lcompilers_len_trim_str2
[((Var 21 str))]
(Integer 4)
()
()
)
(IntegerConstant 1 (Integer 4) Decimal)
(String 1 (IntegerBinOp
(IntegerBinOp
(FunctionCall
1 _lcompilers_len_trim_str2
1 _lcompilers_len_trim_str2
[((Var 21 str))]
(Integer 4)
()
()
)
Sub
(IntegerConstant 1 (Integer 4) Decimal)
(Integer 4)
()
)
Add
(IntegerConstant 1 (Integer 4) Decimal)
(Integer 4)
()
) ExpressionLength DescriptorString)
()
)
()
.false.
.false.
)]
()
Public
.false.
.false.
()
),
_lcompilers_trim_str3:
(Function
(SymbolTable
23
{
result:
(Variable
23
result
[_lcompilers_len_trim_str3
str]
Out
()
()
Default
(String 1 (FunctionCall
1 _lcompilers_len_trim_str3
1 _lcompilers_len_trim_str3
[((Var 23 str))]
(Integer 4)
()
()
) ExpressionLength DescriptorString)
()
ExternalUndefined
Public
Required
.false.
.false.
.false.
()
.false.
.false.
NotMethod
()
[]
),
str:
(Variable
23
str
[]
In
()
()
Default
(String 1 () AssumedLength DescriptorString)
()
ExternalUndefined
Public
Required
.false.
.false.
.false.
()
.false.
.false.
NotMethod
()
[]
)
})
_lcompilers_trim_str3
(FunctionType
[(String 1 () AssumedLength DescriptorString)
(String 1 (FunctionCall
1 _lcompilers_len_trim_str3
1 _lcompilers_len_trim_str3
[((FunctionParam
0
(String 1 () AssumedLength DescriptorString)
()
))]
(Integer 4)
()
()
) ExpressionLength DescriptorString)]
()
ExternalUndefined
Implementation
()
.false.
.false.
.false.
.false.
.false.
[]
.false.
)
[_lcompilers_len_trim_str3]
[(Var 23 str)
(Var 23 result)]
[(Assignment
(Var 23 result)
(StringSection
(Var 23 str)
(IntegerConstant 1 (Integer 4) Decimal)
(FunctionCall
1 _lcompilers_len_trim_str3
1 _lcompilers_len_trim_str3
[((Var 23 str))]
(Integer 4)
()
()
)
(IntegerConstant 1 (Integer 4) Decimal)
(String 1 (IntegerBinOp
(IntegerBinOp
(FunctionCall
1 _lcompilers_len_trim_str3
1 _lcompilers_len_trim_str3
[((Var 23 str))]
(Integer 4)
()
()
)
Sub
(IntegerConstant 1 (Integer 4) Decimal)
(Integer 4)
()
)
Add
(IntegerConstant 1 (Integer 4) Decimal)
(Integer 4)
()
) ExpressionLength DescriptorString)
()
)
()
.false.
.false.
)]
()
Public
.false.
.false.
()
),
_lcompilers_trim_str4:
(Function
(SymbolTable
27
{
result:
(Variable
27
result
[_lcompilers_len_trim_str4
str]
Out
()
()
Default
(String 1 (FunctionCall
1 _lcompilers_len_trim_str4
1 _lcompilers_len_trim_str4
[((Var 27 str))]
(Integer 4)
()
()
) ExpressionLength DescriptorString)
()
ExternalUndefined
Public
Required
.false.
.false.
.false.
()
.false.
.false.
NotMethod
()
[]
),
str:
(Variable
27
str
[]
In
()
()
Default
(String 1 () AssumedLength DescriptorString)
()
ExternalUndefined
Public
Required
.false.
.false.
.false.
()
.false.
.false.
NotMethod
()
[]
)
})
_lcompilers_trim_str4
(FunctionType
[(String 1 () AssumedLength DescriptorString)
(String 1 (FunctionCall
1 _lcompilers_len_trim_str4
1 _lcompilers_len_trim_str4
[((FunctionParam
0
(String 1 () AssumedLength DescriptorString)
()
))]
(Integer 4)
()
()
) ExpressionLength DescriptorString)]
()
ExternalUndefined
Implementation
()
.false.
.false.
.false.
.false.
.false.
[]
.false.
)
[_lcompilers_len_trim_str4]
[(Var 27 str)
(Var 27 result)]
[(Assignment
(Var 27 result)
(StringSection
(Var 27 str)
(IntegerConstant 1 (Integer 4) Decimal)
(FunctionCall
1 _lcompilers_len_trim_str4
1 _lcompilers_len_trim_str4
[((Var 27 str))]
(Integer 4)
()
()
)
(IntegerConstant 1 (Integer 4) Decimal)
(String 1 (IntegerBinOp
(IntegerBinOp
(FunctionCall
1 _lcompilers_len_trim_str4
1 _lcompilers_len_trim_str4
[((Var 27 str))]
(Integer 4)
()
()
)
Sub
(IntegerConstant 1 (Integer 4) Decimal)
(Integer 4)
()
)
Add
(IntegerConstant 1 (Integer 4) Decimal)
(Integer 4)
()
) ExpressionLength DescriptorString)
()
)
()
.false.
.false.
)]
()
Public
.false.
.false.
()
),
_lcompilers_trim_str5:
(Function
(SymbolTable
29
{
result:
(Variable
29
result
[_lcompilers_len_trim_str5
str]
Out
()
()
Default
(String 1 (FunctionCall
1 _lcompilers_len_trim_str5
1 _lcompilers_len_trim_str5
[((Var 29 str))]
(Integer 4)
()
()
) ExpressionLength DescriptorString)
()
ExternalUndefined
Public
Required
.false.
.false.
.false.
()
.false.
.false.
NotMethod
()
[]
),
str:
(Variable
29
str
[]
In
()
()
Default
(String 1 () AssumedLength DescriptorString)
()
ExternalUndefined
Public
Required
.false.
.false.
.false.
()
.false.
.false.
NotMethod
()
[]
)
})
_lcompilers_trim_str5
(FunctionType
[(String 1 () AssumedLength DescriptorString)
(String 1 (FunctionCall
1 _lcompilers_len_trim_str5
1 _lcompilers_len_trim_str5
[((FunctionParam
0
(String 1 () AssumedLength DescriptorString)
()
))]
(Integer 4)
()
()
) ExpressionLength DescriptorString)]
()
ExternalUndefined
Implementation
()
.false.
.false.
.false.
.false.
.false.
[]
.false.
)
[_lcompilers_len_trim_str5]
[(Var 29 str)
(Var 29 result)]
[(Assignment
(Var 29 result)
(StringSection
(Var 29 str)
(IntegerConstant 1 (Integer 4) Decimal)
(FunctionCall
1 _lcompilers_len_trim_str5
1 _lcompilers_len_trim_str5
[((Var 29 str))]
(Integer 4)
()
()
)
(IntegerConstant 1 (Integer 4) Decimal)
(String 1 (IntegerBinOp
(IntegerBinOp
(FunctionCall
1 _lcompilers_len_trim_str5
1 _lcompilers_len_trim_str5
[((Var 29 str))]
(Integer 4)
()
()
)
Sub
(IntegerConstant 1 (Integer 4) Decimal)
(Integer 4)
()
)
Add
(IntegerConstant 1 (Integer 4) Decimal)
(Integer 4)
()
) ExpressionLength DescriptorString)
()
)
()
.false.
.false.
)]
()
Public
.false.
.false.
()
),
_lcompilers_trim_str6:
(Function
(SymbolTable
31
{
result:
(Variable
31
result
[_lcompilers_len_trim_str6
str]
Out
()
()
Default
(String 1 (FunctionCall
1 _lcompilers_len_trim_str6
1 _lcompilers_len_trim_str6
[((Var 31 str))]
(Integer 4)
()
()
) ExpressionLength DescriptorString)
()
ExternalUndefined
Public
Required
.false.
.false.
.false.
()
.false.
.false.
NotMethod
()
[]
),
str:
(Variable
31
str
[]
In
()
()
Default
(String 1 () AssumedLength DescriptorString)
()
ExternalUndefined
Public
Required
.false.
.false.
.false.
()
.false.
.false.
NotMethod
()
[]
)
})
_lcompilers_trim_str6
(FunctionType
[(String 1 () AssumedLength DescriptorString)
(String 1 (FunctionCall
1 _lcompilers_len_trim_str6
1 _lcompilers_len_trim_str6
[((FunctionParam
0
(String 1 () AssumedLength DescriptorString)
()
))]
(Integer 4)
()
()
) ExpressionLength DescriptorString)]
()
ExternalUndefined
Implementation
()
.false.
.false.
.false.
.false.
.false.
[]
.false.
)
[_lcompilers_len_trim_str6]
[(Var 31 str)
(Var 31 result)]
[(Assignment
(Var 31 result)
(StringSection
(Var 31 str)
(IntegerConstant 1 (Integer 4) Decimal)
(FunctionCall
1 _lcompilers_len_trim_str6
1 _lcompilers_len_trim_str6
[((Var 31 str))]
(Integer 4)
()
()
)
(IntegerConstant 1 (Integer 4) Decimal)
(String 1 (IntegerBinOp
(IntegerBinOp
(FunctionCall
1 _lcompilers_len_trim_str6
1 _lcompilers_len_trim_str6
[((Var 31 str))]
(Integer 4)
()
()
)
Sub
(IntegerConstant 1 (Integer 4) Decimal)
(Integer 4)
()
)
Add
(IntegerConstant 1 (Integer 4) Decimal)
(Integer 4)
()
) ExpressionLength DescriptorString)
()
)
()
.false.
.false.
)]
()
Public
.false.
.false.
()
),
_lcompilers_trim_str7:
(Function
(SymbolTable
33
{
result:
(Variable
33
result
[_lcompilers_len_trim_str7
str]
Out
()
()
Default
(String 1 (FunctionCall
1 _lcompilers_len_trim_str7
1 _lcompilers_len_trim_str7
[((Var 33 str))]
(Integer 4)
()
()
) ExpressionLength DescriptorString)
()
ExternalUndefined
Public
Required
.false.
.false.
.false.
()
.false.
.false.
NotMethod
()
[]
),
str:
(Variable
33
str
[]
In
()
()
Default
(String 1 () AssumedLength DescriptorString)
()
ExternalUndefined
Public
Required
.false.
.false.
.false.
()
.false.
.false.
NotMethod
()
[]
)
})
_lcompilers_trim_str7
(FunctionType
[(String 1 () AssumedLength DescriptorString)
(String 1 (FunctionCall
1 _lcompilers_len_trim_str7
1 _lcompilers_len_trim_str7
[((FunctionParam
0
(String 1 () AssumedLength DescriptorString)
()
))]
(Integer 4)
()
()
) ExpressionLength DescriptorString)]
()
ExternalUndefined
Implementation
()
.false.
.false.
.false.
.false.
.false.
[]
.false.
)
[_lcompilers_len_trim_str7]
[(Var 33 str)
(Var 33 result)]
[(Assignment
(Var 33 result)
(StringSection
(Var 33 str)
(IntegerConstant 1 (Integer 4) Decimal)
(FunctionCall
1 _lcompilers_len_trim_str7
1 _lcompilers_len_trim_str7
[((Var 33 str))]
(Integer 4)
()
()
)
(IntegerConstant 1 (Integer 4) Decimal)
(String 1 (IntegerBinOp
(IntegerBinOp
(FunctionCall
1 _lcompilers_len_trim_str7
1 _lcompilers_len_trim_str7
[((Var 33 str))]
(Integer 4)
()
()
)
Sub
(IntegerConstant 1 (Integer 4) Decimal)
(Integer 4)
()
)
Add
(IntegerConstant 1 (Integer 4) Decimal)
(Integer 4)
()
) ExpressionLength DescriptorString)
()
)
()
.false.
.false.
)]
()
Public
.false.
.false.
()
),
f:
(Function
(SymbolTable
35
{
a:
(Variable
35
a
[]
In
()
()
Default
(Integer 4)
()
Source
Public
Required
.false.
.false.
.false.
()
.false.
.false.
NotMethod
()
[]
),
b:
(Variable
35
b
[]
In
()
()
Default
(Integer 4)
()
Source
Public
Required
.false.
.false.
.false.
()
.false.
.false.
NotMethod
()
[]
),
c:
(Variable
35
c
[]
Local
()
()
Default
(Integer 4)
()
Source
Public
Required
.false.
.false.
.false.
()
.false.
.false.
NotMethod
()
[]
),
d:
(Variable
35
d
[]
Local
()
()
Default
(Integer 4)
()
Source
Public
Required
.false.
.false.
.false.
()
.false.
.false.
NotMethod
()
[]
),
r:
(Variable
35
r
[]
ReturnVar
()
()
Default
(Integer 4)
()
Source
Public
Required
.false.
.false.
.false.
()
.false.
.false.
NotMethod
()
[]
)
})
f
(FunctionType
[(Integer 4)
(Integer 4)]
(Integer 4)
Source
Implementation
()
.false.
.false.
.false.
.false.
.false.
[]
.false.
)
[]
[(Var 35 a)
(Var 35 b)]
[(Assignment
(Var 35 c)
(IntegerBinOp
(IntegerBinOp
(Var 35 a)
Add
(Var 35 b)
(Integer 4)
()
)
Sub
(Var 35 d)
(Integer 4)
()
)
()
.false.
.false.
)
(Assignment
(Var 35 r)
(IntegerBinOp
(Var 35 c)
Mul
(Var 35 a)
(Integer 4)
()
)
()
.false.
.false.
)]
(Var 35 r)
Public
.true.
.true.
()
),
iso_c_binding:
(IntrinsicModule lfortran_intrinsic_iso_c_binding),
lfortran_display:
(Module
(SymbolTable
2
{
c_char:
(ExternalSymbol
2
c_char
4 c_char
lfortran_intrinsic_iso_c_binding
[]
c_char
Public
),
c_null_char:
(ExternalSymbol
2
c_null_char
4 c_null_char
lfortran_intrinsic_iso_c_binding
[]
c_null_char
Public
),
display_data:
(Function
(SymbolTable
14
{
__libasr__created__var__0_return_slot:
(Variable
14
__libasr__created__var__0_return_slot
[]
Local
()
()
Default
(Allocatable
(String 1 () DeferredLength DescriptorString)
)
()
ExternalUndefined
Public
Required
.false.
.false.
.false.
()
.false.
.false.
NotMethod
()
[]
),
__libasr__created__var__10_return_slot:
(Variable
14
__libasr__created__var__10_return_slot
[]
Local
()
()
Default
(Allocatable
(String 1 () DeferredLength DescriptorString)
)
()
ExternalUndefined
Public
Required
.false.
.false.
.false.
()
.false.
.false.
NotMethod
()
[]
),
__libasr__created__var__11_return_slot:
(Variable
14
__libasr__created__var__11_return_slot
[]
Local
()
()
Default
(Allocatable
(String 1 () DeferredLength DescriptorString)
)
()
ExternalUndefined
Public
Required
.false.
.false.
.false.
()
.false.
.false.
NotMethod
()
[]
),
__libasr__created__var__1_return_slot:
(Variable
14
__libasr__created__var__1_return_slot
[]
Local
()
()
Default
(Allocatable
(String 1 () DeferredLength DescriptorString)
)
()
ExternalUndefined
Public
Required
.false.
.false.
.false.
()
.false.
.false.
NotMethod
()
[]
),
__libasr__created__var__2_return_slot:
(Variable
14
__libasr__created__var__2_return_slot
[]
Local
()
()
Default
(Allocatable
(String 1 () DeferredLength DescriptorString)
)
()
ExternalUndefined
Public
Required
.false.
.false.
.false.
()
.false.
.false.
NotMethod
()
[]
),
__libasr__created__var__3_return_slot:
(Variable
14
__libasr__created__var__3_return_slot
[]
Local
()
()
Default
(Allocatable
(String 1 () DeferredLength DescriptorString)
)
()
ExternalUndefined
Public
Required
.false.
.false.
.false.
()
.false.
.false.
NotMethod
()
[]
),
__libasr__created__var__4_return_slot:
(Variable
14
__libasr__created__var__4_return_slot
[]
Local
()
()
Default
(Allocatable
(String 1 () DeferredLength DescriptorString)
)
()
ExternalUndefined
Public
Required
.false.
.false.
.false.
()
.false.
.false.
NotMethod
()
[]
),
__libasr__created__var__5_return_slot:
(Variable
14
__libasr__created__var__5_return_slot
[]
Local
()
()
Default
(Allocatable
(String 1 () DeferredLength DescriptorString)
)
()
ExternalUndefined
Public
Required
.false.
.false.
.false.
()
.false.
.false.
NotMethod
()
[]
),
__libasr__created__var__6_return_slot:
(Variable
14
__libasr__created__var__6_return_slot
[]
Local
()
()
Default
(Allocatable
(String 1 () DeferredLength DescriptorString)
)
()
ExternalUndefined
Public
Required
.false.
.false.
.false.
()
.false.
.false.
NotMethod
()
[]
),
__libasr__created__var__7_return_slot:
(Variable
14
__libasr__created__var__7_return_slot
[]
Local
()
()
Default
(Allocatable
(String 1 () DeferredLength DescriptorString)
)
()
ExternalUndefined
Public
Required
.false.
.false.
.false.
()
.false.
.false.
NotMethod
()
[]
),
__libasr__created__var__8_return_slot:
(Variable
14
__libasr__created__var__8_return_slot
[]
Local
()
()
Default
(Allocatable
(String 1 () DeferredLength DescriptorString)
)
()
ExternalUndefined
Public
Required
.false.
.false.
.false.
()
.false.
.false.
NotMethod
()
[]
),
__libasr__created__var__9_return_slot:
(Variable
14
__libasr__created__var__9_return_slot
[]
Local
()
()
Default
(Allocatable
(String 1 () DeferredLength DescriptorString)
)
()
ExternalUndefined
Public
Required
.false.
.false.
.false.
()
.false.
.false.
NotMethod
()
[]
),
data:
(Variable
14
data
[]
In
()
()
Default
(String 1 () AssumedLength DescriptorString)
()
ExternalUndefined
Public
Required
.false.
.false.
.false.
()
.false.
.false.
NotMethod
()
[]
),
mime_type:
(Variable
14
mime_type
[]
In
()
()
Default
(String 1 () AssumedLength DescriptorString)
()
ExternalUndefined
Public
Required
.false.
.false.
.false.
()
.false.
.false.
NotMethod
()
[]
)
})
display_data
(FunctionType
[(String 1 () AssumedLength DescriptorString)
(String 1 () AssumedLength DescriptorString)]
()
ExternalUndefined
Implementation
()
.false.
.false.
.false.
.false.
.false.
[]
.false.
)
[_lcompilers_len_trim_str
_lcompilers_trim_str
_lcompilers_len_trim_str1
_lcompilers_trim_str1
_lcompilers_stringconcat
_lcompilers_len_trim_str2
_lcompilers_trim_str2
_lcompilers_len_trim_str3
_lcompilers_trim_str3
_lcompilers_len_trim_str4
_lcompilers_trim_str4
_lcompilers_len_trim_str5
_lcompilers_trim_str5
_lcompilers_len_trim_str6
_lcompilers_trim_str6
_lcompilers_len_trim_str7
_lcompilers_trim_str7
lf_display_data]
[(Var 14 mime_type)
(Var 14 data)]
[(ExplicitDeallocate
[(Var 14 __libasr__created__var__0_return_slot)]
)
(Allocate
[((Var 14 __libasr__created__var__0_return_slot)
[]
(FunctionCall
1 _lcompilers_len_trim_str
1 _lcompilers_len_trim_str
[((Var 14 mime_type))]
(Integer 4)
()
()
)
()
())]
()
()
()
)
(SubroutineCall
1 _lcompilers_trim_str
()
[((Var 14 mime_type))
((Var 14 __libasr__created__var__0_return_slot))]
()
.true.
)
(ExplicitDeallocate
[(Var 14 __libasr__created__var__1_return_slot)]
)
(Allocate
[((Var 14 __libasr__created__var__1_return_slot)
[]
(FunctionCall
1 _lcompilers_len_trim_str1
1 _lcompilers_len_trim_str1
[((Var 14 mime_type))]
(Integer 4)
()
()
)
()
())]
()
()
()
)
(SubroutineCall
1 _lcompilers_trim_str1
()
[((Var 14 mime_type))
((Var 14 __libasr__created__var__1_return_slot))]
()
.true.
)
(ExplicitDeallocate
[(Var 14 __libasr__created__var__2_return_slot)]
)
(SubroutineCall
1 _lcompilers_stringconcat
()
[((Var 14 __libasr__created__var__0_return_slot))
((StringConstant
""
(String 1 (IntegerConstant 1 (Integer 4) Decimal) ExpressionLength DescriptorString)
))
((StringLen
(Var 14 __libasr__created__var__1_return_slot)
(Integer 4)
()
))
((Cast
(IntegerConstant 1 (Integer 4) Decimal)
IntegerToInteger
(Integer 4)
(IntegerConstant 1 (Integer 4) Decimal)
()
))
((Var 14 __libasr__created__var__2_return_slot))]
()
.true.
)
(ExplicitDeallocate
[(Var 14 __libasr__created__var__3_return_slot)]
)
(Allocate
[((Var 14 __libasr__created__var__3_return_slot)
[]
(FunctionCall
1 _lcompilers_len_trim_str2
1 _lcompilers_len_trim_str2
[((Var 14 mime_type))]
(Integer 4)
()
()
)
()
())]
()
()
()
)
(SubroutineCall
1 _lcompilers_trim_str2
()
[((Var 14 mime_type))
((Var 14 __libasr__created__var__3_return_slot))]
()
.true.
)
(ExplicitDeallocate
[(Var 14 __libasr__created__var__4_return_slot)]
)
(Allocate
[((Var 14 __libasr__created__var__4_return_slot)
[]
(FunctionCall
1 _lcompilers_len_trim_str3
1 _lcompilers_len_trim_str3
[((Var 14 mime_type))]
(Integer 4)
()
()
)
()
())]
()
()
()
)
(SubroutineCall
1 _lcompilers_trim_str3
()
[((Var 14 mime_type))
((Var 14 __libasr__created__var__4_return_slot))]
()
.true.
)
(ExplicitDeallocate
[(Var 14 __libasr__created__var__5_return_slot)]
)
(SubroutineCall
1 _lcompilers_stringconcat
()
[((Var 14 __libasr__created__var__3_return_slot))
((StringConstant
""
(String 1 (IntegerConstant 1 (Integer 4) Decimal) ExpressionLength DescriptorString)
))
((StringLen
(Var 14 __libasr__created__var__4_return_slot)
(Integer 4)
()
))
((Cast
(IntegerConstant 1 (Integer 4) Decimal)
IntegerToInteger
(Integer 4)
(IntegerConstant 1 (Integer 4) Decimal)
()
))
((Var 14 __libasr__created__var__5_return_slot))]
()
.true.
)
(ExplicitDeallocate
[(Var 14 __libasr__created__var__6_return_slot)]
)
(Allocate
[((Var 14 __libasr__created__var__6_return_slot)
[]
(FunctionCall
1 _lcompilers_len_trim_str4
1 _lcompilers_len_trim_str4
[((Var 14 data))]
(Integer 4)
()
()
)
()
())]
()
()
()
)
(SubroutineCall
1 _lcompilers_trim_str4
()
[((Var 14 data))
((Var 14 __libasr__created__var__6_return_slot))]
()
.true.
)
(ExplicitDeallocate
[(Var 14 __libasr__created__var__7_return_slot)]
)
(Allocate
[((Var 14 __libasr__created__var__7_return_slot)
[]
(FunctionCall
1 _lcompilers_len_trim_str5
1 _lcompilers_len_trim_str5
[((Var 14 data))]
(Integer 4)
()
()
)
()
())]
()
()
()
)
(SubroutineCall
1 _lcompilers_trim_str5
()
[((Var 14 data))
((Var 14 __libasr__created__var__7_return_slot))]
()
.true.
)
(ExplicitDeallocate
[(Var 14 __libasr__created__var__8_return_slot)]
)
(SubroutineCall
1 _lcompilers_stringconcat
()
[((Var 14 __libasr__created__var__6_return_slot))
((StringConstant
""
(String 1 (IntegerConstant 1 (Integer 4) Decimal) ExpressionLength DescriptorString)
))
((StringLen
(Var 14 __libasr__created__var__7_return_slot)
(Integer 4)
()
))
((Cast
(IntegerConstant 1 (Integer 4) Decimal)
IntegerToInteger
(Integer 4)
(IntegerConstant 1 (Integer 4) Decimal)
()
))
((Var 14 __libasr__created__var__8_return_slot))]
()
.true.
)
(ExplicitDeallocate
[(Var 14 __libasr__created__var__9_return_slot)]
)
(Allocate
[((Var 14 __libasr__created__var__9_return_slot)
[]
(FunctionCall
1 _lcompilers_len_trim_str6
1 _lcompilers_len_trim_str6
[((Var 14 data))]
(Integer 4)
()
()
)
()
())]
()
()
()
)
(SubroutineCall
1 _lcompilers_trim_str6
()
[((Var 14 data))
((Var 14 __libasr__created__var__9_return_slot))]
()
.true.
)
(ExplicitDeallocate
[(Var 14 __libasr__created__var__10_return_slot)]
)
(Allocate
[((Var 14 __libasr__created__var__10_return_slot)
[]
(FunctionCall
1 _lcompilers_len_trim_str7
1 _lcompilers_len_trim_str7
[((Var 14 data))]
(Integer 4)
()
()
)
()
())]
()
()
()
)
(SubroutineCall
1 _lcompilers_trim_str7
()
[((Var 14 data))
((Var 14 __libasr__created__var__10_return_slot))]
()
.true.
)
(ExplicitDeallocate
[(Var 14 __libasr__created__var__11_return_slot)]
)
(SubroutineCall
1 _lcompilers_stringconcat
()
[((Var 14 __libasr__created__var__9_return_slot))
((StringConstant
""
(String 1 (IntegerConstant 1 (Integer 4) Decimal) ExpressionLength DescriptorString)
))
((StringLen
(Var 14 __libasr__created__var__10_return_slot)
(Integer 4)
()
))
((Cast
(IntegerConstant 1 (Integer 4) Decimal)
IntegerToInteger
(Integer 4)
(IntegerConstant 1 (Integer 4) Decimal)
()
))
((Var 14 __libasr__created__var__11_return_slot))]
()
.true.
)
(SubroutineCall
2 lf_display_data
()
[((Cast
(Var 14 __libasr__created__var__2_return_slot)
StringToArray
(Array
(String 1 (IntegerConstant 1 (Integer 4) Decimal) ExpressionLength CChar)
[((IntegerConstant 1 (Integer 4) Decimal)
(IntegerBinOp
(StringLen
(Var 14 __libasr__created__var__5_return_slot)
(Integer 4)
()
)
Div
(IntegerConstant 1 (Integer 4) Decimal)
(Integer 4)
()
))]
StringArraySinglePointer
)
()
()
))
((Cast
(Var 14 __libasr__created__var__8_return_slot)
StringToArray
(Array
(String 1 (IntegerConstant 1 (Integer 4) Decimal) ExpressionLength CChar)
[((IntegerConstant 1 (Integer 4) Decimal)
(IntegerBinOp
(StringLen
(Var 14 __libasr__created__var__11_return_slot)
(Integer 4)
()
)
Div
(IntegerConstant 1 (Integer 4) Decimal)
(Integer 4)
()
))]
StringArraySinglePointer
)
()
()
))]
()
.false.
)]
()
Public
.false.
.false.
()
),
lf_display_data:
(Function
(SymbolTable
13
{
mime:
(Variable
13
mime
[]
In
()
()
Default
(Array
(String 1 (IntegerConstant 1 (Integer 4) Decimal) ExpressionLength CChar)
[(()
())]
StringArraySinglePointer
)
()
BindC
Public
Required
.false.
.false.
.false.
()
.false.
.false.
NotMethod
()
[]
),
payload:
(Variable
13
payload
[]
In
()
()
Default
(Array
(String 1 (IntegerConstant 1 (Integer 4) Decimal) ExpressionLength CChar)
[(()
())]
StringArraySinglePointer
)
()
BindC
Public
Required
.false.
.false.
.false.
()
.false.
.false.
NotMethod
()
[]
)
})
lf_display_data
(FunctionType
[(Array
(String 1 (IntegerConstant 1 (Integer 4) Decimal) ExpressionLength CChar)
[(()
())]
StringArraySinglePointer
)
(Array
(String 1 (IntegerConstant 1 (Integer 4) Decimal) ExpressionLength CChar)
[(()
())]
StringArraySinglePointer
)]
()
BindC
Interface
"lfortran_display_data"
.false.
.false.
.false.
.false.
.false.
[]
.false.
)
[]
[(Var 13 mime)
(Var 13 payload)]
[]
()
Public
.false.
.false.
()
)
})
lfortran_display
()
[iso_c_binding]
.false.
.false.
.false.
)
})
[]
)
ASR 有所有的语义信息(类型等),像 Function 这样的节点有一个符号表,没有任何声明节点。变量只是指向符号表的指针。
The ASR can also be exported in JSON, including source file name, line and column information: lfortran example.f90 --show-asr --json
讨论¶
上面是一个简单的例子。对于更复杂的示例,事情变得更加明显,例如:
integer function f2b(a) result(r)
use gfort_interop, only: c_desc1_int32
integer, intent(in) :: a(:)
interface
integer function f2b_c_wrapper(a) bind(c, name="__mod1_MOD_f2b")
use gfort_interop, only: c_desc1_t
type(c_desc1_t), intent(in) :: a
end function
end interface
r = f2b_c_wrapper(c_desc1_int32(a))
end function
AST 必须代表所有的 use 语句和 interface 块,并保持语义一致。
另一方面,ASR 跟踪符号表中的 c_desc1_int32、c_desc1_t 和 f2b_c_wrapper,并且知道它们是在 gfort_interop 模块中定义的,因此 ASR 没有任何这些声明节点。
从 ASR 转换为 AST 时,LFortran 将自动且正确地创建所有适当的 AST 声明节点。