Skip to content

Instantly share code, notes, and snippets.

@certik
Created May 7, 2019 22:06
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save certik/058dd145a0d0b83ce8086ab47d405445 to your computer and use it in GitHub Desktop.
Save certik/058dd145a0d0b83ce8086ab47d405445 to your computer and use it in GitHub Desktop.
{
"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