The Meta-Environment - ATerms

Skip to main content.



ATerm (short for Annotated Term) is an abstract data type designed for the exchange of tree-like data structures between distributed applications.

The ATerm library forms a comprehensive procedural interface which enables creation and manipulation of ATerms in C and Java. The ATerm implementation is based on maximal subterm sharing and automatic garbage collection.

A binary exchange format for the concise representation of ATerms (sharing preserved) allows the fast exchange of ATerms between applications. In a typical application---parse trees which contain considerable redundant information---less than 2 bytes are needed to represent a node in memory, and less than 2 bits are needed to represent it in binary format. The implementation of ATerms scales up to the manipulation of ATerms in the giga-byte range.

The ATerm library provides a comprehensive interface in C and Java to handle the annotated term data-type in an efficient manner. If the terms you handle are limited to a specific signature, you can use ApiGen to generate typed interfaces to the same ATerms.

Online Documentation

API Documentation

C version and Java version



@article{BJKO2000, author = {Brand, {M.G.J. van den} and Jong, H.A. de and Klint, P. and Olivier, P.A.}, title = {{E}fficient {A}nnotated {T}erms}, year = {2000}, journal = {Software -- Practice \& Experience}, volume = {30}, pages = {259--291}, url = {} }

@article{vdBrandKlint07, author = {Brand, {M.G.J. van den} and P. Klint}, title = {ATerms for manipulation and exchange of structured data: It's all about sharing}, journal = {Information and Software Technology}, year = {2007}, volume = {49}, number = {1}, pages = {55--64}, url = {} }