diff options
author | Eelco Dolstra <e.dolstra@tudelft.nl> | 2003-11-18T10·47+0000 |
---|---|---|
committer | Eelco Dolstra <e.dolstra@tudelft.nl> | 2003-11-18T10·47+0000 |
commit | 8798fae30450a88c339c8f23d7e0c75f5df2ef1c (patch) | |
tree | 53d271e89ee3d04490a94a7ea82cf2dc3bbc3c30 /src/libutil/aterm.hh | |
parent | 45610ae675f6f8d6ecbd48c495cb7012b143d531 (diff) |
* Source tree refactoring.
Diffstat (limited to 'src/libutil/aterm.hh')
-rw-r--r-- | src/libutil/aterm.hh | 77 |
1 files changed, 77 insertions, 0 deletions
diff --git a/src/libutil/aterm.hh b/src/libutil/aterm.hh new file mode 100644 index 000000000000..16d8d6bb6dfd --- /dev/null +++ b/src/libutil/aterm.hh @@ -0,0 +1,77 @@ +#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); + +class ATermIterator +{ + ATermList t; + +public: + ATermIterator(ATermList _t) : t(_t) { } + ATermIterator & operator ++ () + { + t = ATgetNext(t); + return *this; + } + ATerm operator * () + { + return ATgetFirst(t); + } + operator bool () + { + return t != ATempty; + } +}; + + +/* 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 */ |