Intermediate Representation

The IR is an Abstract Syntax Tree (AST) encapsulated in an ATerm (Annotated Term).

The ATerm data type is agnostic in respect to the meaning of a particular application term. For the IR it was developed a schema that could represent the program, in all its stages from near-Assembly language code to conventional C language code.

This is an excerpt of the IR schema in the Abstract Syntax Description Language (ASDL) -- a domain specific language for describing the abstract syntax of compiler intermediate representations and other tree-like data structures, developed for the Zephyr project:

stmt = Asm(string opcode, expr * operands) tmt
     | Assign(type, optExpr dest, expr src)
     | Label(string name)
     | GoTo(expr addr)
     |
     | Break
     | Continue
     | Block(stmt*)
     | If(expr cond, stmt, stmt)
     | While(expr cond, stmt)
     | DoWhile(expr cond, stmt)
     | Ret(type, optExpr value)
     | Var(type, string name, optExpr value)
     | Function(type, string name, arg*, stmt* body)
     | NoStmt

...