 
     body: [
       ast: 'subroutine call'
-      name:
-        ast: 'identifier'
-        val: 'writeln'
+      name: 'writeln'
+      type: 'integer'
       args: [
         ast: 'subroutine call'
-        name:
-          ast: 'identifier'
-          val: 'factorial'
+        type: 'integer'
+        name: 'factorial'
         args: [
           ast: 'integer'
           val: 6
+          type: 'integer'
         ]
       ]
     ]
 
+module.exports = AST

          ast: 'if'
          condition:
            ast: '<='
            left:
              ast: 'identifier'
              val: 'n'
            right:
              ast: 'integer'
              val: 1
          consequent: [
            ast: 'assignment'
            left:
              ast: 'identifier'
              val: 'fatorial'
            right:
              ast: 'integer'
              val: 1
          ]
          alternative: [
            ast: 'assignment'
            left:
              ast: 'identifier'
              val: 'fatorial'
            right:
              ast: '*'
              left:
                ast: 'identifier'
                val: 'n'
              right:
                ast: 'subroutine call'
                name:
                  ast: 'identifier'
                  val: 'fatorial'
                args: [
                  ast: '-'
                  left:
                    ast: 'identifier'
                    val: 'n'
                  right:
                    ast: 'integer'
                    val: 1
                ]
          ]
        ]


  head:
    ast: 'program head'
    name: 'factorial'
    files:
      ast: 'files'
      input: 'input'
      output: 'output'

  declarations:
    ast: 'declarations'
