diff options
Diffstat (limited to 'src/libnix/aterm.hh')
-rw-r--r-- | src/libnix/aterm.hh | 55 |
1 files changed, 55 insertions, 0 deletions
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 <aterm2.h> +} + +#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 */ |