aterm

Crates.ioaterm
lib.rsaterm
version0.20.0
sourcesrc
created_at2017-04-15 09:32:24.104305
updated_at2017-09-03 08:31:50.440717
descriptionImplementation of the Annotated Terms data structure
homepage
repositoryhttps://gitlab.com/Apanatshka/aterm
max_upload_size
id10640
size1,239,246
Jeff Smits (Apanatshka)

documentation

README

This repository holds an implementation of the Annotated Term (ATerm) format in Rust.

Annotated Terms

I suspect that originally ATerms were a big thing because of the convenience of a garbage collected C implementation of arbitrary trees, with maximal sharing. Now it seems to be more of a legacy format. You can still find the old ATerm guide online but I'll briefly recap the format.

Format recap

This format encodes trees. The leaves of the trees can be:

  • Integers (i32)
  • Longs (i64, optional in the spec)
  • Strings (String1)
  • Reals (f32)
  • Blobs (Vec<u8>, though when you need this, are ATerms really what you need?)
  • Placeholders (TermPlaceholder, typed holes, for the legacy pattern interface)

The trees are built up with applications of constructors. A constructor is just an alphanumeric name or a quoted string. The application of the constructor has zero or more children.

There are also specialised lists, mostly because they have their own syntax.

Tuples are applications of the empty constructor.

Oh right, and they're annotated: every term can have a list of annotations, which are also terms. Lists and constructor applications are also counted as terms, so basically everything can have annotations.

Features

The Rust implementation has the follow features / todos:

  • Longs
  • Reading/writing ASCII (textual aterms)
  • Utility functions? (Some todos: #7)
  • Maximal sharing (Some todos: #3)
  • Reading/writing TAF #4
  • Reading/writing BAF #5
  • Reading/writing SAF #6

Footnotes

  1. actually they're just quoted constructors with zero children

Commit count: 150

cargo fmt