Created
May 7, 2019 22:06
-
-
Save certik/058dd145a0d0b83ce8086ab47d405445 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
{ | |
"cells": [ | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"# What is the difference between an AST and ASR?\n", | |
"\n", | |
"Let us take a simple Fortran code:\n", | |
"```fortran\n", | |
"integer function f(a, b) result(r)\n", | |
"integer, intent(in) :: a, b\n", | |
"r = a + b\n", | |
"end function\n", | |
"```\n", | |
"and look at how the AST and ASR looks like.\n", | |
"\n", | |
"## AST" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 1, | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"name": "stdout", | |
"output_type": "stream", | |
"text": [ | |
"\u001b[0m\u001b[?7h\u001b[0;34;1mprogram_unit.Function\u001b[0m\u001b[0m\n", | |
"\u001b[0m\u001b[?7h\u001b[0;32;1m├─\u001b[0m\u001b[0mname=\u001b[0m\u001b[?7h\u001b[0;32m'f'\u001b[0m\u001b[0m\n", | |
"\u001b[0m\u001b[?7h\u001b[0;32;1m├─\u001b[0m\u001b[0margs=↓\n", | |
"\u001b[0m\u001b[?7h\u001b[0;32;1m│ \u001b[0m\u001b[0m\u001b[0m\u001b[?7h\u001b[0;32;1m├─\u001b[0m\u001b[0m\u001b[0m\u001b[?7h\u001b[0;34;1mAST.arg\u001b[0m\u001b[0m\n", | |
"\u001b[0m\u001b[?7h\u001b[0;32;1m│ \u001b[0m\u001b[0m\u001b[0m\u001b[?7h\u001b[0;32;1m│ \u001b[0m\u001b[0m\u001b[0m\u001b[?7h\u001b[0;32;1m╰─\u001b[0m\u001b[0marg=\u001b[0m\u001b[?7h\u001b[0;32m'a'\u001b[0m\u001b[0m\n", | |
"\u001b[0m\u001b[?7h\u001b[0;32;1m│ \u001b[0m\u001b[0m\u001b[0m\u001b[?7h\u001b[0;32;1m╰─\u001b[0m\u001b[0m\u001b[0m\u001b[?7h\u001b[0;34;1mAST.arg\u001b[0m\u001b[0m\n", | |
"\u001b[0m\u001b[?7h\u001b[0;32;1m│ \u001b[0m\u001b[0m\u001b[0m\u001b[?7h\u001b[0;32;1m \u001b[0m\u001b[0m\u001b[0m\u001b[?7h\u001b[0;32;1m╰─\u001b[0m\u001b[0marg=\u001b[0m\u001b[?7h\u001b[0;32m'b'\u001b[0m\u001b[0m\n", | |
"\u001b[0m\u001b[?7h\u001b[0;32;1m├─\u001b[0m\u001b[0mreturn_type=\u001b[0m\u001b[?7h\u001b[0;32mNone\u001b[0m\u001b[0m\n", | |
"\u001b[0m\u001b[?7h\u001b[0;32;1m├─\u001b[0m\u001b[0mreturn_var=\u001b[0m\u001b[?7h\u001b[0;34;1mexpr.Name\u001b[0m\u001b[0m\n", | |
"\u001b[0m\u001b[?7h\u001b[0;32;1m│ \u001b[0m\u001b[0m\u001b[0m\u001b[?7h\u001b[0;32;1m╰─\u001b[0m\u001b[0mid=\u001b[0m\u001b[?7h\u001b[0;32m'r'\u001b[0m\u001b[0m\n", | |
"\u001b[0m\u001b[?7h\u001b[0;32;1m├─\u001b[0m\u001b[0mbind=\u001b[0m\u001b[?7h\u001b[0;32mNone\u001b[0m\u001b[0m\n", | |
"\u001b[0m\u001b[?7h\u001b[0;32;1m├─\u001b[0m\u001b[0muse=[]\n", | |
"\u001b[0m\u001b[?7h\u001b[0;32;1m├─\u001b[0m\u001b[0mdecl=↓\n", | |
"\u001b[0m\u001b[?7h\u001b[0;32;1m│ \u001b[0m\u001b[0m\u001b[0m\u001b[?7h\u001b[0;32;1m╰─\u001b[0m\u001b[0m\u001b[0m\u001b[?7h\u001b[0;34;1munit_decl2.Declaration\u001b[0m\u001b[0m\n", | |
"\u001b[0m\u001b[?7h\u001b[0;32;1m│ \u001b[0m\u001b[0m\u001b[0m\u001b[?7h\u001b[0;32;1m \u001b[0m\u001b[0m\u001b[0m\u001b[?7h\u001b[0;32;1m╰─\u001b[0m\u001b[0mvars=↓\n", | |
"\u001b[0m\u001b[?7h\u001b[0;32;1m│ \u001b[0m\u001b[0m\u001b[0m\u001b[?7h\u001b[0;32;1m \u001b[0m\u001b[0m\u001b[0m\u001b[?7h\u001b[0;32;1m \u001b[0m\u001b[0m\u001b[0m\u001b[?7h\u001b[0;32;1m├─\u001b[0m\u001b[0m\u001b[0m\u001b[?7h\u001b[0;34;1mAST.decl\u001b[0m\u001b[0m\n", | |
"\u001b[0m\u001b[?7h\u001b[0;32;1m│ \u001b[0m\u001b[0m\u001b[0m\u001b[?7h\u001b[0;32;1m \u001b[0m\u001b[0m\u001b[0m\u001b[?7h\u001b[0;32;1m \u001b[0m\u001b[0m\u001b[0m\u001b[?7h\u001b[0;32;1m│ \u001b[0m\u001b[0m\u001b[0m\u001b[?7h\u001b[0;32;1m├─\u001b[0m\u001b[0msym=\u001b[0m\u001b[?7h\u001b[0;32m'a'\u001b[0m\u001b[0m\n", | |
"\u001b[0m\u001b[?7h\u001b[0;32;1m│ \u001b[0m\u001b[0m\u001b[0m\u001b[?7h\u001b[0;32;1m \u001b[0m\u001b[0m\u001b[0m\u001b[?7h\u001b[0;32;1m \u001b[0m\u001b[0m\u001b[0m\u001b[?7h\u001b[0;32;1m│ \u001b[0m\u001b[0m\u001b[0m\u001b[?7h\u001b[0;32;1m├─\u001b[0m\u001b[0msym_type=\u001b[0m\u001b[?7h\u001b[0;32m'integer'\u001b[0m\u001b[0m\n", | |
"\u001b[0m\u001b[?7h\u001b[0;32;1m│ \u001b[0m\u001b[0m\u001b[0m\u001b[?7h\u001b[0;32;1m \u001b[0m\u001b[0m\u001b[0m\u001b[?7h\u001b[0;32;1m \u001b[0m\u001b[0m\u001b[0m\u001b[?7h\u001b[0;32;1m│ \u001b[0m\u001b[0m\u001b[0m\u001b[?7h\u001b[0;32;1m├─\u001b[0m\u001b[0mdims=[]\n", | |
"\u001b[0m\u001b[?7h\u001b[0;32;1m│ \u001b[0m\u001b[0m\u001b[0m\u001b[?7h\u001b[0;32;1m \u001b[0m\u001b[0m\u001b[0m\u001b[?7h\u001b[0;32;1m \u001b[0m\u001b[0m\u001b[0m\u001b[?7h\u001b[0;32;1m│ \u001b[0m\u001b[0m\u001b[0m\u001b[?7h\u001b[0;32;1m╰─\u001b[0m\u001b[0mattrs=↓\n", | |
"\u001b[0m\u001b[?7h\u001b[0;32;1m│ \u001b[0m\u001b[0m\u001b[0m\u001b[?7h\u001b[0;32;1m \u001b[0m\u001b[0m\u001b[0m\u001b[?7h\u001b[0;32;1m \u001b[0m\u001b[0m\u001b[0m\u001b[?7h\u001b[0;32;1m│ \u001b[0m\u001b[0m\u001b[0m\u001b[?7h\u001b[0;32;1m \u001b[0m\u001b[0m\u001b[0m\u001b[?7h\u001b[0;32;1m╰─\u001b[0m\u001b[0m\u001b[0m\u001b[?7h\u001b[0;34;1mattribute.Attribute\u001b[0m\u001b[0m\n", | |
"\u001b[0m\u001b[?7h\u001b[0;32;1m│ \u001b[0m\u001b[0m\u001b[0m\u001b[?7h\u001b[0;32;1m \u001b[0m\u001b[0m\u001b[0m\u001b[?7h\u001b[0;32;1m \u001b[0m\u001b[0m\u001b[0m\u001b[?7h\u001b[0;32;1m│ \u001b[0m\u001b[0m\u001b[0m\u001b[?7h\u001b[0;32;1m \u001b[0m\u001b[0m\u001b[0m\u001b[?7h\u001b[0;32;1m \u001b[0m\u001b[0m\u001b[0m\u001b[?7h\u001b[0;32;1m├─\u001b[0m\u001b[0mname=\u001b[0m\u001b[?7h\u001b[0;32m'intent'\u001b[0m\u001b[0m\n", | |
"\u001b[0m\u001b[?7h\u001b[0;32;1m│ \u001b[0m\u001b[0m\u001b[0m\u001b[?7h\u001b[0;32;1m \u001b[0m\u001b[0m\u001b[0m\u001b[?7h\u001b[0;32;1m \u001b[0m\u001b[0m\u001b[0m\u001b[?7h\u001b[0;32;1m│ \u001b[0m\u001b[0m\u001b[0m\u001b[?7h\u001b[0;32;1m \u001b[0m\u001b[0m\u001b[0m\u001b[?7h\u001b[0;32;1m \u001b[0m\u001b[0m\u001b[0m\u001b[?7h\u001b[0;32;1m╰─\u001b[0m\u001b[0margs=↓\n", | |
"\u001b[0m\u001b[?7h\u001b[0;32;1m│ \u001b[0m\u001b[0m\u001b[0m\u001b[?7h\u001b[0;32;1m \u001b[0m\u001b[0m\u001b[0m\u001b[?7h\u001b[0;32;1m \u001b[0m\u001b[0m\u001b[0m\u001b[?7h\u001b[0;32;1m│ \u001b[0m\u001b[0m\u001b[0m\u001b[?7h\u001b[0;32;1m \u001b[0m\u001b[0m\u001b[0m\u001b[?7h\u001b[0;32;1m \u001b[0m\u001b[0m\u001b[0m\u001b[?7h\u001b[0;32;1m \u001b[0m\u001b[0m\u001b[0m\u001b[?7h\u001b[0;32;1m╰─\u001b[0m\u001b[0m\u001b[0m\u001b[?7h\u001b[0;34;1mAST.attribute_arg\u001b[0m\u001b[0m\n", | |
"\u001b[0m\u001b[?7h\u001b[0;32;1m│ \u001b[0m\u001b[0m\u001b[0m\u001b[?7h\u001b[0;32;1m \u001b[0m\u001b[0m\u001b[0m\u001b[?7h\u001b[0;32;1m \u001b[0m\u001b[0m\u001b[0m\u001b[?7h\u001b[0;32;1m│ \u001b[0m\u001b[0m\u001b[0m\u001b[?7h\u001b[0;32;1m \u001b[0m\u001b[0m\u001b[0m\u001b[?7h\u001b[0;32;1m \u001b[0m\u001b[0m\u001b[0m\u001b[?7h\u001b[0;32;1m \u001b[0m\u001b[0m\u001b[0m\u001b[?7h\u001b[0;32;1m \u001b[0m\u001b[0m\u001b[0m\u001b[?7h\u001b[0;32;1m╰─\u001b[0m\u001b[0marg=\u001b[0m\u001b[?7h\u001b[0;32m'in'\u001b[0m\u001b[0m\n", | |
"\u001b[0m\u001b[?7h\u001b[0;32;1m│ \u001b[0m\u001b[0m\u001b[0m\u001b[?7h\u001b[0;32;1m \u001b[0m\u001b[0m\u001b[0m\u001b[?7h\u001b[0;32;1m \u001b[0m\u001b[0m\u001b[0m\u001b[?7h\u001b[0;32;1m╰─\u001b[0m\u001b[0m\u001b[0m\u001b[?7h\u001b[0;34;1mAST.decl\u001b[0m\u001b[0m\n", | |
"\u001b[0m\u001b[?7h\u001b[0;32;1m│ \u001b[0m\u001b[0m\u001b[0m\u001b[?7h\u001b[0;32;1m \u001b[0m\u001b[0m\u001b[0m\u001b[?7h\u001b[0;32;1m \u001b[0m\u001b[0m\u001b[0m\u001b[?7h\u001b[0;32;1m \u001b[0m\u001b[0m\u001b[0m\u001b[?7h\u001b[0;32;1m├─\u001b[0m\u001b[0msym=\u001b[0m\u001b[?7h\u001b[0;32m'b'\u001b[0m\u001b[0m\n", | |
"\u001b[0m\u001b[?7h\u001b[0;32;1m│ \u001b[0m\u001b[0m\u001b[0m\u001b[?7h\u001b[0;32;1m \u001b[0m\u001b[0m\u001b[0m\u001b[?7h\u001b[0;32;1m \u001b[0m\u001b[0m\u001b[0m\u001b[?7h\u001b[0;32;1m \u001b[0m\u001b[0m\u001b[0m\u001b[?7h\u001b[0;32;1m├─\u001b[0m\u001b[0msym_type=\u001b[0m\u001b[?7h\u001b[0;32m'integer'\u001b[0m\u001b[0m\n", | |
"\u001b[0m\u001b[?7h\u001b[0;32;1m│ \u001b[0m\u001b[0m\u001b[0m\u001b[?7h\u001b[0;32;1m \u001b[0m\u001b[0m\u001b[0m\u001b[?7h\u001b[0;32;1m \u001b[0m\u001b[0m\u001b[0m\u001b[?7h\u001b[0;32;1m \u001b[0m\u001b[0m\u001b[0m\u001b[?7h\u001b[0;32;1m├─\u001b[0m\u001b[0mdims=[]\n", | |
"\u001b[0m\u001b[?7h\u001b[0;32;1m│ \u001b[0m\u001b[0m\u001b[0m\u001b[?7h\u001b[0;32;1m \u001b[0m\u001b[0m\u001b[0m\u001b[?7h\u001b[0;32;1m \u001b[0m\u001b[0m\u001b[0m\u001b[?7h\u001b[0;32;1m \u001b[0m\u001b[0m\u001b[0m\u001b[?7h\u001b[0;32;1m╰─\u001b[0m\u001b[0mattrs=↓\n", | |
"\u001b[0m\u001b[?7h\u001b[0;32;1m│ \u001b[0m\u001b[0m\u001b[0m\u001b[?7h\u001b[0;32;1m \u001b[0m\u001b[0m\u001b[0m\u001b[?7h\u001b[0;32;1m \u001b[0m\u001b[0m\u001b[0m\u001b[?7h\u001b[0;32;1m \u001b[0m\u001b[0m\u001b[0m\u001b[?7h\u001b[0;32;1m \u001b[0m\u001b[0m\u001b[0m\u001b[?7h\u001b[0;32;1m╰─\u001b[0m\u001b[0m\u001b[0m\u001b[?7h\u001b[0;34;1mattribute.Attribute\u001b[0m\u001b[0m\n", | |
"\u001b[0m\u001b[?7h\u001b[0;32;1m│ \u001b[0m\u001b[0m\u001b[0m\u001b[?7h\u001b[0;32;1m \u001b[0m\u001b[0m\u001b[0m\u001b[?7h\u001b[0;32;1m \u001b[0m\u001b[0m\u001b[0m\u001b[?7h\u001b[0;32;1m \u001b[0m\u001b[0m\u001b[0m\u001b[?7h\u001b[0;32;1m \u001b[0m\u001b[0m\u001b[0m\u001b[?7h\u001b[0;32;1m \u001b[0m\u001b[0m\u001b[0m\u001b[?7h\u001b[0;32;1m├─\u001b[0m\u001b[0mname=\u001b[0m\u001b[?7h\u001b[0;32m'intent'\u001b[0m\u001b[0m\n", | |
"\u001b[0m\u001b[?7h\u001b[0;32;1m│ \u001b[0m\u001b[0m\u001b[0m\u001b[?7h\u001b[0;32;1m \u001b[0m\u001b[0m\u001b[0m\u001b[?7h\u001b[0;32;1m \u001b[0m\u001b[0m\u001b[0m\u001b[?7h\u001b[0;32;1m \u001b[0m\u001b[0m\u001b[0m\u001b[?7h\u001b[0;32;1m \u001b[0m\u001b[0m\u001b[0m\u001b[?7h\u001b[0;32;1m \u001b[0m\u001b[0m\u001b[0m\u001b[?7h\u001b[0;32;1m╰─\u001b[0m\u001b[0margs=↓\n", | |
"\u001b[0m\u001b[?7h\u001b[0;32;1m│ \u001b[0m\u001b[0m\u001b[0m\u001b[?7h\u001b[0;32;1m \u001b[0m\u001b[0m\u001b[0m\u001b[?7h\u001b[0;32;1m \u001b[0m\u001b[0m\u001b[0m\u001b[?7h\u001b[0;32;1m \u001b[0m\u001b[0m\u001b[0m\u001b[?7h\u001b[0;32;1m \u001b[0m\u001b[0m\u001b[0m\u001b[?7h\u001b[0;32;1m \u001b[0m\u001b[0m\u001b[0m\u001b[?7h\u001b[0;32;1m \u001b[0m\u001b[0m\u001b[0m\u001b[?7h\u001b[0;32;1m╰─\u001b[0m\u001b[0m\u001b[0m\u001b[?7h\u001b[0;34;1mAST.attribute_arg\u001b[0m\u001b[0m\n", | |
"\u001b[0m\u001b[?7h\u001b[0;32;1m│ \u001b[0m\u001b[0m\u001b[0m\u001b[?7h\u001b[0;32;1m \u001b[0m\u001b[0m\u001b[0m\u001b[?7h\u001b[0;32;1m \u001b[0m\u001b[0m\u001b[0m\u001b[?7h\u001b[0;32;1m \u001b[0m\u001b[0m\u001b[0m\u001b[?7h\u001b[0;32;1m \u001b[0m\u001b[0m\u001b[0m\u001b[?7h\u001b[0;32;1m \u001b[0m\u001b[0m\u001b[0m\u001b[?7h\u001b[0;32;1m \u001b[0m\u001b[0m\u001b[0m\u001b[?7h\u001b[0;32;1m \u001b[0m\u001b[0m\u001b[0m\u001b[?7h\u001b[0;32;1m╰─\u001b[0m\u001b[0marg=\u001b[0m\u001b[?7h\u001b[0;32m'in'\u001b[0m\u001b[0m\n", | |
"\u001b[0m\u001b[?7h\u001b[0;32;1m├─\u001b[0m\u001b[0mbody=↓\n", | |
"\u001b[0m\u001b[?7h\u001b[0;32;1m│ \u001b[0m\u001b[0m\u001b[0m\u001b[?7h\u001b[0;32;1m╰─\u001b[0m\u001b[0m\u001b[0m\u001b[?7h\u001b[0;34;1mstmt.Assignment\u001b[0m\u001b[0m\n", | |
"\u001b[0m\u001b[?7h\u001b[0;32;1m│ \u001b[0m\u001b[0m\u001b[0m\u001b[?7h\u001b[0;32;1m \u001b[0m\u001b[0m\u001b[0m\u001b[?7h\u001b[0;32;1m├─\u001b[0m\u001b[0mtarget=\u001b[0m\u001b[?7h\u001b[0;34;1mexpr.Name\u001b[0m\u001b[0m\n", | |
"\u001b[0m\u001b[?7h\u001b[0;32;1m│ \u001b[0m\u001b[0m\u001b[0m\u001b[?7h\u001b[0;32;1m \u001b[0m\u001b[0m\u001b[0m\u001b[?7h\u001b[0;32;1m│ \u001b[0m\u001b[0m\u001b[0m\u001b[?7h\u001b[0;32;1m╰─\u001b[0m\u001b[0mid=\u001b[0m\u001b[?7h\u001b[0;32m'r'\u001b[0m\u001b[0m\n", | |
"\u001b[0m\u001b[?7h\u001b[0;32;1m│ \u001b[0m\u001b[0m\u001b[0m\u001b[?7h\u001b[0;32;1m \u001b[0m\u001b[0m\u001b[0m\u001b[?7h\u001b[0;32;1m╰─\u001b[0m\u001b[0mvalue=\u001b[0m\u001b[?7h\u001b[0;34;1mexpr.BinOp\u001b[0m\u001b[0m\n", | |
"\u001b[0m\u001b[?7h\u001b[0;32;1m│ \u001b[0m\u001b[0m\u001b[0m\u001b[?7h\u001b[0;32;1m \u001b[0m\u001b[0m\u001b[0m\u001b[?7h\u001b[0;32;1m \u001b[0m\u001b[0m\u001b[0m\u001b[?7h\u001b[0;32;1m├─\u001b[0m\u001b[0mleft=\u001b[0m\u001b[?7h\u001b[0;34;1mexpr.Name\u001b[0m\u001b[0m\n", | |
"\u001b[0m\u001b[?7h\u001b[0;32;1m│ \u001b[0m\u001b[0m\u001b[0m\u001b[?7h\u001b[0;32;1m \u001b[0m\u001b[0m\u001b[0m\u001b[?7h\u001b[0;32;1m \u001b[0m\u001b[0m\u001b[0m\u001b[?7h\u001b[0;32;1m│ \u001b[0m\u001b[0m\u001b[0m\u001b[?7h\u001b[0;32;1m╰─\u001b[0m\u001b[0mid=\u001b[0m\u001b[?7h\u001b[0;32m'a'\u001b[0m\u001b[0m\n", | |
"\u001b[0m\u001b[?7h\u001b[0;32;1m│ \u001b[0m\u001b[0m\u001b[0m\u001b[?7h\u001b[0;32;1m \u001b[0m\u001b[0m\u001b[0m\u001b[?7h\u001b[0;32;1m \u001b[0m\u001b[0m\u001b[0m\u001b[?7h\u001b[0;32;1m├─\u001b[0m\u001b[0mop=\u001b[0m\u001b[?7h\u001b[0;34;1moperator.Add\u001b[0m\u001b[0m\n", | |
"\u001b[0m\u001b[?7h\u001b[0;32;1m│ \u001b[0m\u001b[0m\u001b[0m\u001b[?7h\u001b[0;32;1m \u001b[0m\u001b[0m\u001b[0m\u001b[?7h\u001b[0;32;1m \u001b[0m\u001b[0m\u001b[0m\u001b[?7h\u001b[0;32;1m╰─\u001b[0m\u001b[0mright=\u001b[0m\u001b[?7h\u001b[0;34;1mexpr.Name\u001b[0m\u001b[0m\n", | |
"\u001b[0m\u001b[?7h\u001b[0;32;1m│ \u001b[0m\u001b[0m\u001b[0m\u001b[?7h\u001b[0;32;1m \u001b[0m\u001b[0m\u001b[0m\u001b[?7h\u001b[0;32;1m \u001b[0m\u001b[0m\u001b[0m\u001b[?7h\u001b[0;32;1m \u001b[0m\u001b[0m\u001b[0m\u001b[?7h\u001b[0;32;1m╰─\u001b[0m\u001b[0mid=\u001b[0m\u001b[?7h\u001b[0;32m'b'\u001b[0m\u001b[0m\n", | |
"\u001b[0m\u001b[?7h\u001b[0;32;1m╰─\u001b[0m\u001b[0mcontains=[]\n" | |
] | |
} | |
], | |
"source": [ | |
"from lfortran.ast import src_to_ast, print_tree\n", | |
"from lfortran.ast.ast_to_src import ast_to_src\n", | |
"src = \"\"\"\\\n", | |
"integer function f(a, b) result(r)\n", | |
"integer, intent(in) :: a, b\n", | |
"r = a + b\n", | |
"end function\n", | |
"\"\"\"\n", | |
"ast = src_to_ast(src, translation_unit=False)\n", | |
"print_tree(ast)" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"The AST does not have any semantic information, but has nodes to represent declarations such as `integer, intent(in) :: a`. Variables such as `a` are represented by a `Name` node, and are not connected to their declarations yet." | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"# ASR" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 2, | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"name": "stdout", | |
"output_type": "stream", | |
"text": [ | |
"\u001b[0m\u001b[?7h\u001b[0;34;1munit.TranslationUnit\u001b[0m\u001b[0m\n", | |
"\u001b[0m\u001b[?7h\u001b[0;32;1m├─\u001b[0m\u001b[0mglobal_scope=Scope\n", | |
"\u001b[0m\u001b[?7h\u001b[0;32;1m│ \u001b[0m\u001b[0m\u001b[0m\u001b[?7h\u001b[0;32;1m╰─\u001b[0m\u001b[0mf = \u001b[0m\u001b[?7h\u001b[0;34;1mfn.Function\u001b[0m\u001b[0m\n", | |
"\u001b[0m\u001b[?7h\u001b[0;32;1m│ \u001b[0m\u001b[0m\u001b[0m\u001b[?7h\u001b[0;32;1m \u001b[0m\u001b[0m\u001b[0m\u001b[?7h\u001b[0;32;1m├─\u001b[0m\u001b[0mname=\u001b[0m\u001b[?7h\u001b[0;32m'f'\u001b[0m\u001b[0m\n", | |
"\u001b[0m\u001b[?7h\u001b[0;32;1m│ \u001b[0m\u001b[0m\u001b[0m\u001b[?7h\u001b[0;32;1m \u001b[0m\u001b[0m\u001b[0m\u001b[?7h\u001b[0;32;1m├─\u001b[0m\u001b[0margs=↓\n", | |
"\u001b[0m\u001b[?7h\u001b[0;32;1m│ \u001b[0m\u001b[0m\u001b[0m\u001b[?7h\u001b[0;32;1m \u001b[0m\u001b[0m\u001b[0m\u001b[?7h\u001b[0;32;1m│ \u001b[0m\u001b[0m\u001b[0m\u001b[?7h\u001b[0;32;1m├─\u001b[0m\u001b[0m\u001b[0m\u001b[?7h\u001b[0;33ma\u001b[0m\u001b[0m\n", | |
"\u001b[0m\u001b[?7h\u001b[0;32;1m│ \u001b[0m\u001b[0m\u001b[0m\u001b[?7h\u001b[0;32;1m \u001b[0m\u001b[0m\u001b[0m\u001b[?7h\u001b[0;32;1m│ \u001b[0m\u001b[0m\u001b[0m\u001b[?7h\u001b[0;32;1m╰─\u001b[0m\u001b[0m\u001b[0m\u001b[?7h\u001b[0;33mb\u001b[0m\u001b[0m\n", | |
"\u001b[0m\u001b[?7h\u001b[0;32;1m│ \u001b[0m\u001b[0m\u001b[0m\u001b[?7h\u001b[0;32;1m \u001b[0m\u001b[0m\u001b[0m\u001b[?7h\u001b[0;32;1m├─\u001b[0m\u001b[0mbody=↓\n", | |
"\u001b[0m\u001b[?7h\u001b[0;32;1m│ \u001b[0m\u001b[0m\u001b[0m\u001b[?7h\u001b[0;32;1m \u001b[0m\u001b[0m\u001b[0m\u001b[?7h\u001b[0;32;1m│ \u001b[0m\u001b[0m\u001b[0m\u001b[?7h\u001b[0;32;1m╰─\u001b[0m\u001b[0m\u001b[0m\u001b[?7h\u001b[0;34;1mstmt.Assignment\u001b[0m\u001b[0m\n", | |
"\u001b[0m\u001b[?7h\u001b[0;32;1m│ \u001b[0m\u001b[0m\u001b[0m\u001b[?7h\u001b[0;32;1m \u001b[0m\u001b[0m\u001b[0m\u001b[?7h\u001b[0;32;1m│ \u001b[0m\u001b[0m\u001b[0m\u001b[?7h\u001b[0;32;1m \u001b[0m\u001b[0m\u001b[0m\u001b[?7h\u001b[0;32;1m├─\u001b[0m\u001b[0mtarget=\u001b[0m\u001b[?7h\u001b[0;33mr\u001b[0m\u001b[0m\n", | |
"\u001b[0m\u001b[?7h\u001b[0;32;1m│ \u001b[0m\u001b[0m\u001b[0m\u001b[?7h\u001b[0;32;1m \u001b[0m\u001b[0m\u001b[0m\u001b[?7h\u001b[0;32;1m│ \u001b[0m\u001b[0m\u001b[0m\u001b[?7h\u001b[0;32;1m \u001b[0m\u001b[0m\u001b[0m\u001b[?7h\u001b[0;32;1m╰─\u001b[0m\u001b[0mvalue=\u001b[0m\u001b[?7h\u001b[0;34;1mexpr.BinOp\u001b[0m\u001b[0m\n", | |
"\u001b[0m\u001b[?7h\u001b[0;32;1m│ \u001b[0m\u001b[0m\u001b[0m\u001b[?7h\u001b[0;32;1m \u001b[0m\u001b[0m\u001b[0m\u001b[?7h\u001b[0;32;1m│ \u001b[0m\u001b[0m\u001b[0m\u001b[?7h\u001b[0;32;1m \u001b[0m\u001b[0m\u001b[0m\u001b[?7h\u001b[0;32;1m \u001b[0m\u001b[0m\u001b[0m\u001b[?7h\u001b[0;32;1m├─\u001b[0m\u001b[0mleft=\u001b[0m\u001b[?7h\u001b[0;33ma\u001b[0m\u001b[0m\n", | |
"\u001b[0m\u001b[?7h\u001b[0;32;1m│ \u001b[0m\u001b[0m\u001b[0m\u001b[?7h\u001b[0;32;1m \u001b[0m\u001b[0m\u001b[0m\u001b[?7h\u001b[0;32;1m│ \u001b[0m\u001b[0m\u001b[0m\u001b[?7h\u001b[0;32;1m \u001b[0m\u001b[0m\u001b[0m\u001b[?7h\u001b[0;32;1m \u001b[0m\u001b[0m\u001b[0m\u001b[?7h\u001b[0;32;1m├─\u001b[0m\u001b[0mop=\u001b[0m\u001b[?7h\u001b[0;34;1moperator.Add\u001b[0m\u001b[0m\n", | |
"\u001b[0m\u001b[?7h\u001b[0;32;1m│ \u001b[0m\u001b[0m\u001b[0m\u001b[?7h\u001b[0;32;1m \u001b[0m\u001b[0m\u001b[0m\u001b[?7h\u001b[0;32;1m│ \u001b[0m\u001b[0m\u001b[0m\u001b[?7h\u001b[0;32;1m \u001b[0m\u001b[0m\u001b[0m\u001b[?7h\u001b[0;32;1m \u001b[0m\u001b[0m\u001b[0m\u001b[?7h\u001b[0;32;1m├─\u001b[0m\u001b[0mright=\u001b[0m\u001b[?7h\u001b[0;33mb\u001b[0m\u001b[0m\n", | |
"\u001b[0m\u001b[?7h\u001b[0;32;1m│ \u001b[0m\u001b[0m\u001b[0m\u001b[?7h\u001b[0;32;1m \u001b[0m\u001b[0m\u001b[0m\u001b[?7h\u001b[0;32;1m│ \u001b[0m\u001b[0m\u001b[0m\u001b[?7h\u001b[0;32;1m \u001b[0m\u001b[0m\u001b[0m\u001b[?7h\u001b[0;32;1m \u001b[0m\u001b[0m\u001b[0m\u001b[?7h\u001b[0;32;1m╰─\u001b[0m\u001b[0mtype=\u001b[0m\u001b[?7h\u001b[0;34;1mttype.Integer\u001b[0m\u001b[0m\n", | |
"\u001b[0m\u001b[?7h\u001b[0;32;1m│ \u001b[0m\u001b[0m\u001b[0m\u001b[?7h\u001b[0;32;1m \u001b[0m\u001b[0m\u001b[0m\u001b[?7h\u001b[0;32;1m│ \u001b[0m\u001b[0m\u001b[0m\u001b[?7h\u001b[0;32;1m \u001b[0m\u001b[0m\u001b[0m\u001b[?7h\u001b[0;32;1m \u001b[0m\u001b[0m\u001b[0m\u001b[?7h\u001b[0;32;1m \u001b[0m\u001b[0m\u001b[0m\u001b[?7h\u001b[0;32;1m├─\u001b[0m\u001b[0mkind=\u001b[0m\u001b[?7h\u001b[0;32m4\u001b[0m\u001b[0m\n", | |
"\u001b[0m\u001b[?7h\u001b[0;32;1m│ \u001b[0m\u001b[0m\u001b[0m\u001b[?7h\u001b[0;32;1m \u001b[0m\u001b[0m\u001b[0m\u001b[?7h\u001b[0;32;1m│ \u001b[0m\u001b[0m\u001b[0m\u001b[?7h\u001b[0;32;1m \u001b[0m\u001b[0m\u001b[0m\u001b[?7h\u001b[0;32;1m \u001b[0m\u001b[0m\u001b[0m\u001b[?7h\u001b[0;32;1m \u001b[0m\u001b[0m\u001b[0m\u001b[?7h\u001b[0;32;1m╰─\u001b[0m\u001b[0mdims=[]\n", | |
"\u001b[0m\u001b[?7h\u001b[0;32;1m│ \u001b[0m\u001b[0m\u001b[0m\u001b[?7h\u001b[0;32;1m \u001b[0m\u001b[0m\u001b[0m\u001b[?7h\u001b[0;32;1m├─\u001b[0m\u001b[0mbind=\u001b[0m\u001b[?7h\u001b[0;32mNone\u001b[0m\u001b[0m\n", | |
"\u001b[0m\u001b[?7h\u001b[0;32;1m│ \u001b[0m\u001b[0m\u001b[0m\u001b[?7h\u001b[0;32;1m \u001b[0m\u001b[0m\u001b[0m\u001b[?7h\u001b[0;32;1m├─\u001b[0m\u001b[0mreturn_var=\u001b[0m\u001b[?7h\u001b[0;33mr\u001b[0m\u001b[0m\n", | |
"\u001b[0m\u001b[?7h\u001b[0;32;1m│ \u001b[0m\u001b[0m\u001b[0m\u001b[?7h\u001b[0;32;1m \u001b[0m\u001b[0m\u001b[0m\u001b[?7h\u001b[0;32;1m├─\u001b[0m\u001b[0mmodule=\u001b[0m\u001b[?7h\u001b[0;32mNone\u001b[0m\u001b[0m\n", | |
"\u001b[0m\u001b[?7h\u001b[0;32;1m│ \u001b[0m\u001b[0m\u001b[0m\u001b[?7h\u001b[0;32;1m \u001b[0m\u001b[0m\u001b[0m\u001b[?7h\u001b[0;32;1m╰─\u001b[0m\u001b[0msymtab=Scope\n", | |
"\u001b[0m\u001b[?7h\u001b[0;32;1m│ \u001b[0m\u001b[0m\u001b[0m\u001b[?7h\u001b[0;32;1m \u001b[0m\u001b[0m\u001b[0m\u001b[?7h\u001b[0;32;1m \u001b[0m\u001b[0m\u001b[0m\u001b[?7h\u001b[0;32;1m├─\u001b[0m\u001b[0ma = \u001b[0m\u001b[?7h\u001b[0;34;1mexpr.Variable\u001b[0m\u001b[0m\n", | |
"\u001b[0m\u001b[?7h\u001b[0;32;1m│ \u001b[0m\u001b[0m\u001b[0m\u001b[?7h\u001b[0;32;1m \u001b[0m\u001b[0m\u001b[0m\u001b[?7h\u001b[0;32;1m \u001b[0m\u001b[0m\u001b[0m\u001b[?7h\u001b[0;32;1m│ \u001b[0m\u001b[0m\u001b[0m\u001b[?7h\u001b[0;32;1m├─\u001b[0m\u001b[0mname=\u001b[0m\u001b[?7h\u001b[0;32m'a'\u001b[0m\u001b[0m\n", | |
"\u001b[0m\u001b[?7h\u001b[0;32;1m│ \u001b[0m\u001b[0m\u001b[0m\u001b[?7h\u001b[0;32;1m \u001b[0m\u001b[0m\u001b[0m\u001b[?7h\u001b[0;32;1m \u001b[0m\u001b[0m\u001b[0m\u001b[?7h\u001b[0;32;1m│ \u001b[0m\u001b[0m\u001b[0m\u001b[?7h\u001b[0;32;1m├─\u001b[0m\u001b[0mintent=\u001b[0m\u001b[?7h\u001b[0;32m'in'\u001b[0m\u001b[0m\n", | |
"\u001b[0m\u001b[?7h\u001b[0;32;1m│ \u001b[0m\u001b[0m\u001b[0m\u001b[?7h\u001b[0;32;1m \u001b[0m\u001b[0m\u001b[0m\u001b[?7h\u001b[0;32;1m \u001b[0m\u001b[0m\u001b[0m\u001b[?7h\u001b[0;32;1m│ \u001b[0m\u001b[0m\u001b[0m\u001b[?7h\u001b[0;32;1m├─\u001b[0m\u001b[0mdummy=\u001b[0m\u001b[?7h\u001b[0;32mTrue\u001b[0m\u001b[0m\n", | |
"\u001b[0m\u001b[?7h\u001b[0;32;1m│ \u001b[0m\u001b[0m\u001b[0m\u001b[?7h\u001b[0;32;1m \u001b[0m\u001b[0m\u001b[0m\u001b[?7h\u001b[0;32;1m \u001b[0m\u001b[0m\u001b[0m\u001b[?7h\u001b[0;32;1m│ \u001b[0m\u001b[0m\u001b[0m\u001b[?7h\u001b[0;32;1m╰─\u001b[0m\u001b[0mtype=\u001b[0m\u001b[?7h\u001b[0;34;1mttype.Integer\u001b[0m\u001b[0m\n", | |
"\u001b[0m\u001b[?7h\u001b[0;32;1m│ \u001b[0m\u001b[0m\u001b[0m\u001b[?7h\u001b[0;32;1m \u001b[0m\u001b[0m\u001b[0m\u001b[?7h\u001b[0;32;1m \u001b[0m\u001b[0m\u001b[0m\u001b[?7h\u001b[0;32;1m│ \u001b[0m\u001b[0m\u001b[0m\u001b[?7h\u001b[0;32;1m \u001b[0m\u001b[0m\u001b[0m\u001b[?7h\u001b[0;32;1m├─\u001b[0m\u001b[0mkind=\u001b[0m\u001b[?7h\u001b[0;32m4\u001b[0m\u001b[0m\n", | |
"\u001b[0m\u001b[?7h\u001b[0;32;1m│ \u001b[0m\u001b[0m\u001b[0m\u001b[?7h\u001b[0;32;1m \u001b[0m\u001b[0m\u001b[0m\u001b[?7h\u001b[0;32;1m \u001b[0m\u001b[0m\u001b[0m\u001b[?7h\u001b[0;32;1m│ \u001b[0m\u001b[0m\u001b[0m\u001b[?7h\u001b[0;32;1m \u001b[0m\u001b[0m\u001b[0m\u001b[?7h\u001b[0;32;1m╰─\u001b[0m\u001b[0mdims=[]\n", | |
"\u001b[0m\u001b[?7h\u001b[0;32;1m│ \u001b[0m\u001b[0m\u001b[0m\u001b[?7h\u001b[0;32;1m \u001b[0m\u001b[0m\u001b[0m\u001b[?7h\u001b[0;32;1m \u001b[0m\u001b[0m\u001b[0m\u001b[?7h\u001b[0;32;1m├─\u001b[0m\u001b[0mb = \u001b[0m\u001b[?7h\u001b[0;34;1mexpr.Variable\u001b[0m\u001b[0m\n", | |
"\u001b[0m\u001b[?7h\u001b[0;32;1m│ \u001b[0m\u001b[0m\u001b[0m\u001b[?7h\u001b[0;32;1m \u001b[0m\u001b[0m\u001b[0m\u001b[?7h\u001b[0;32;1m \u001b[0m\u001b[0m\u001b[0m\u001b[?7h\u001b[0;32;1m│ \u001b[0m\u001b[0m\u001b[0m\u001b[?7h\u001b[0;32;1m├─\u001b[0m\u001b[0mname=\u001b[0m\u001b[?7h\u001b[0;32m'b'\u001b[0m\u001b[0m\n", | |
"\u001b[0m\u001b[?7h\u001b[0;32;1m│ \u001b[0m\u001b[0m\u001b[0m\u001b[?7h\u001b[0;32;1m \u001b[0m\u001b[0m\u001b[0m\u001b[?7h\u001b[0;32;1m \u001b[0m\u001b[0m\u001b[0m\u001b[?7h\u001b[0;32;1m│ \u001b[0m\u001b[0m\u001b[0m\u001b[?7h\u001b[0;32;1m├─\u001b[0m\u001b[0mintent=\u001b[0m\u001b[?7h\u001b[0;32m'in'\u001b[0m\u001b[0m\n", | |
"\u001b[0m\u001b[?7h\u001b[0;32;1m│ \u001b[0m\u001b[0m\u001b[0m\u001b[?7h\u001b[0;32;1m \u001b[0m\u001b[0m\u001b[0m\u001b[?7h\u001b[0;32;1m \u001b[0m\u001b[0m\u001b[0m\u001b[?7h\u001b[0;32;1m│ \u001b[0m\u001b[0m\u001b[0m\u001b[?7h\u001b[0;32;1m├─\u001b[0m\u001b[0mdummy=\u001b[0m\u001b[?7h\u001b[0;32mTrue\u001b[0m\u001b[0m\n", | |
"\u001b[0m\u001b[?7h\u001b[0;32;1m│ \u001b[0m\u001b[0m\u001b[0m\u001b[?7h\u001b[0;32;1m \u001b[0m\u001b[0m\u001b[0m\u001b[?7h\u001b[0;32;1m \u001b[0m\u001b[0m\u001b[0m\u001b[?7h\u001b[0;32;1m│ \u001b[0m\u001b[0m\u001b[0m\u001b[?7h\u001b[0;32;1m╰─\u001b[0m\u001b[0mtype=\u001b[0m\u001b[?7h\u001b[0;34;1mttype.Integer\u001b[0m\u001b[0m\n", | |
"\u001b[0m\u001b[?7h\u001b[0;32;1m│ \u001b[0m\u001b[0m\u001b[0m\u001b[?7h\u001b[0;32;1m \u001b[0m\u001b[0m\u001b[0m\u001b[?7h\u001b[0;32;1m \u001b[0m\u001b[0m\u001b[0m\u001b[?7h\u001b[0;32;1m│ \u001b[0m\u001b[0m\u001b[0m\u001b[?7h\u001b[0;32;1m \u001b[0m\u001b[0m\u001b[0m\u001b[?7h\u001b[0;32;1m├─\u001b[0m\u001b[0mkind=\u001b[0m\u001b[?7h\u001b[0;32m4\u001b[0m\u001b[0m\n", | |
"\u001b[0m\u001b[?7h\u001b[0;32;1m│ \u001b[0m\u001b[0m\u001b[0m\u001b[?7h\u001b[0;32;1m \u001b[0m\u001b[0m\u001b[0m\u001b[?7h\u001b[0;32;1m \u001b[0m\u001b[0m\u001b[0m\u001b[?7h\u001b[0;32;1m│ \u001b[0m\u001b[0m\u001b[0m\u001b[?7h\u001b[0;32;1m \u001b[0m\u001b[0m\u001b[0m\u001b[?7h\u001b[0;32;1m╰─\u001b[0m\u001b[0mdims=[]\n", | |
"\u001b[0m\u001b[?7h\u001b[0;32;1m│ \u001b[0m\u001b[0m\u001b[0m\u001b[?7h\u001b[0;32;1m \u001b[0m\u001b[0m\u001b[0m\u001b[?7h\u001b[0;32;1m \u001b[0m\u001b[0m\u001b[0m\u001b[?7h\u001b[0;32;1m╰─\u001b[0m\u001b[0mr = \u001b[0m\u001b[?7h\u001b[0;34;1mexpr.Variable\u001b[0m\u001b[0m\n", | |
"\u001b[0m\u001b[?7h\u001b[0;32;1m│ \u001b[0m\u001b[0m\u001b[0m\u001b[?7h\u001b[0;32;1m \u001b[0m\u001b[0m\u001b[0m\u001b[?7h\u001b[0;32;1m \u001b[0m\u001b[0m\u001b[0m\u001b[?7h\u001b[0;32;1m \u001b[0m\u001b[0m\u001b[0m\u001b[?7h\u001b[0;32;1m├─\u001b[0m\u001b[0mname=\u001b[0m\u001b[?7h\u001b[0;32m'r'\u001b[0m\u001b[0m\n", | |
"\u001b[0m\u001b[?7h\u001b[0;32;1m│ \u001b[0m\u001b[0m\u001b[0m\u001b[?7h\u001b[0;32;1m \u001b[0m\u001b[0m\u001b[0m\u001b[?7h\u001b[0;32;1m \u001b[0m\u001b[0m\u001b[0m\u001b[?7h\u001b[0;32;1m \u001b[0m\u001b[0m\u001b[0m\u001b[?7h\u001b[0;32;1m├─\u001b[0m\u001b[0mintent=\u001b[0m\u001b[?7h\u001b[0;32mNone\u001b[0m\u001b[0m\n", | |
"\u001b[0m\u001b[?7h\u001b[0;32;1m│ \u001b[0m\u001b[0m\u001b[0m\u001b[?7h\u001b[0;32;1m \u001b[0m\u001b[0m\u001b[0m\u001b[?7h\u001b[0;32;1m \u001b[0m\u001b[0m\u001b[0m\u001b[?7h\u001b[0;32;1m \u001b[0m\u001b[0m\u001b[0m\u001b[?7h\u001b[0;32;1m├─\u001b[0m\u001b[0mdummy=\u001b[0m\u001b[?7h\u001b[0;32mTrue\u001b[0m\u001b[0m\n", | |
"\u001b[0m\u001b[?7h\u001b[0;32;1m│ \u001b[0m\u001b[0m\u001b[0m\u001b[?7h\u001b[0;32;1m \u001b[0m\u001b[0m\u001b[0m\u001b[?7h\u001b[0;32;1m \u001b[0m\u001b[0m\u001b[0m\u001b[?7h\u001b[0;32;1m \u001b[0m\u001b[0m\u001b[0m\u001b[?7h\u001b[0;32;1m╰─\u001b[0m\u001b[0mtype=\u001b[0m\u001b[?7h\u001b[0;34;1mttype.Integer\u001b[0m\u001b[0m\n", | |
"\u001b[0m\u001b[?7h\u001b[0;32;1m│ \u001b[0m\u001b[0m\u001b[0m\u001b[?7h\u001b[0;32;1m \u001b[0m\u001b[0m\u001b[0m\u001b[?7h\u001b[0;32;1m \u001b[0m\u001b[0m\u001b[0m\u001b[?7h\u001b[0;32;1m \u001b[0m\u001b[0m\u001b[0m\u001b[?7h\u001b[0;32;1m \u001b[0m\u001b[0m\u001b[0m\u001b[?7h\u001b[0;32;1m├─\u001b[0m\u001b[0mkind=\u001b[0m\u001b[?7h\u001b[0;32m4\u001b[0m\u001b[0m\n", | |
"\u001b[0m\u001b[?7h\u001b[0;32;1m│ \u001b[0m\u001b[0m\u001b[0m\u001b[?7h\u001b[0;32;1m \u001b[0m\u001b[0m\u001b[0m\u001b[?7h\u001b[0;32;1m \u001b[0m\u001b[0m\u001b[0m\u001b[?7h\u001b[0;32;1m \u001b[0m\u001b[0m\u001b[0m\u001b[?7h\u001b[0;32;1m \u001b[0m\u001b[0m\u001b[0m\u001b[?7h\u001b[0;32;1m╰─\u001b[0m\u001b[0mdims=[]\n", | |
"\u001b[0m\u001b[?7h\u001b[0;32;1m╰─\u001b[0m\u001b[0mitems=[]\n" | |
] | |
} | |
], | |
"source": [ | |
"from lfortran.semantic.ast_to_asr import ast_to_asr\n", | |
"from lfortran.asr.pprint import pprint_asr\n", | |
"asr = ast_to_asr(ast)\n", | |
"pprint_asr(asr)" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"The ASR has all the semantic information (types, etc.), nodes like `Function` have a symbol table and do not have any declaration nodes. Variables are simply pointers to the symbol table.\n", | |
"\n", | |
"## Discussion\n", | |
"\n", | |
"The above was a simple example. Things get more apparent for more complicated examples, such as:\n", | |
"```fortran\n", | |
"integer function f2b(a) result(r)\n", | |
"use gfort_interop, only: c_desc1_int32\n", | |
"integer, intent(in) :: a(:)\n", | |
"interface\n", | |
" integer function f2b_c_wrapper(a) bind(c, name=\"__mod1_MOD_f2b\")\n", | |
" use gfort_interop, only: c_desc1_t\n", | |
" type(c_desc1_t), intent(in) :: a\n", | |
" end function\n", | |
"end interface\n", | |
"r = f2b_c_wrapper(c_desc1_int32(a))\n", | |
"end function\n", | |
"```\n", | |
"AST must represent all the `use` statements and the `interface` block, and keep things semantically consistent.\n", | |
"\n", | |
"ASR, on the other hand, keeps track of the `c_desc1_int32`, `c_desc1_t` and `f2b_c_wrapper` in the symbol table and it knows they are defined in the `gfort_interop` module, and so ASR does not have any of these declaration nodes.\n", | |
"\n", | |
"When converting from ASR to AST, LFortran will create all the appropriate AST declaration nodes automatically and correctly." | |
] | |
} | |
], | |
"metadata": { | |
"kernelspec": { | |
"display_name": "Python 3", | |
"language": "python", | |
"name": "python3" | |
}, | |
"language_info": { | |
"codemirror_mode": { | |
"name": "ipython", | |
"version": 3 | |
}, | |
"file_extension": ".py", | |
"mimetype": "text/x-python", | |
"name": "python", | |
"nbconvert_exporter": "python", | |
"pygments_lexer": "ipython3", | |
"version": "3.7.3" | |
} | |
}, | |
"nbformat": 4, | |
"nbformat_minor": 2 | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment