From 3e5a019a070cbaac7d1248e208c66da9fdb23313 Mon Sep 17 00:00:00 2001 From: Eelco Dolstra Date: Sun, 16 Nov 2003 17:46:31 +0000 Subject: * Some utility functions for working with ATerms. --- src/libnix/aterm.hh | 55 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 55 insertions(+) create mode 100644 src/libnix/aterm.hh (limited to 'src/libnix/aterm.hh') diff --git a/src/libnix/aterm.hh b/src/libnix/aterm.hh new file mode 100644 index 0000000000..1e4ee80eea --- /dev/null +++ b/src/libnix/aterm.hh @@ -0,0 +1,55 @@ +#ifndef __ATERM_H +#define __ATERM_H + +extern "C" { +#include +} + +#include "util.hh" + + +/* Print an ATerm. */ +string atPrint(ATerm t); + +/* Write an ATerm to an output stream. */ +ostream & operator << (ostream & stream, ATerm e); + +/* Type-safe matching. */ + +struct ATMatcher +{ + ATerm t; + int pos; + const static int failPos = -2; + const static int funPos = -1; + + ATMatcher() : t(0), pos(failPos) + { + } + + operator bool() const + { + return pos != failPos; + } +}; + +/* Initiate matching of a term. */ +ATMatcher & atMatch(ATMatcher & pos, ATerm t); + +/* Get the next argument of an application. */ +ATMatcher & operator >> (ATMatcher & pos, ATerm & out); + +/* Get the name of the function symbol of an applicatin, or the next + argument of an application as a string. */ +ATMatcher & operator >> (ATMatcher & pos, string & out); + +/* Like the previous, but check that the string is equal to the given + string. */ +ATMatcher & operator >> (ATMatcher & pos, const string & s); + +/* Get the next argument of an application, and verify that it is a + list. */ +ATMatcher & operator >> (ATMatcher & pos, ATermList & out); + + +#endif /* !__ATERM_H */ -- cgit 1.4.1