From b8d293940be7a59f7ffbe8cd31fce54a3b3bd212 Mon Sep 17 00:00:00 2001 From: "Eric S. Raymond" Date: Fri, 11 Nov 1994 21:43:23 +0000 Subject: [PATCH] Initial revision --- nodetype.h | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) create mode 100644 nodetype.h diff --git a/nodetype.h b/nodetype.h new file mode 100644 index 0000000..17f967b --- /dev/null +++ b/nodetype.h @@ -0,0 +1,27 @@ +/* nodetype.h -- macros that describe the semantics of nodes */ + +#define car u.n.left +#define cdr u.n.right + +/* + * Define token classes for consistency checks here. The theory is + * that by separating this from the tree-traversal machinery below, we + * may be able to parametrize for different source languages someday. + */ +/* does the node represent an atom? */ +#define ATOMIC(n) ((n) == IDENTIFIER || (n) == NUMBER || (n) == STRING) +/* does the node reference a statement label? */ +#define SLABELREF(n) ((n) == GO || (n) == OG) +/* does the node reference a block label? */ +#define BLABELREF(n) ((n) == PERFORM) +/* does the node set a variable? */ +#define VARSET(n) ((n) == LET || (n) == READ || (n) == ITERATE) +/* does the (non-VARSET) node refer to its left operand as a variable? */ +#define LEFTREF(n) ((n) != FOR && (n) != GO && (n) != OG && (n) != LABEL \ + && (n) != ALLOCATE && (n) != WATCH \ + && (n) != ITERATE && (n) != FROM \ + && (n) != PERFORM) +/* does the (non-VARSET) node refer to its right operand? */ +#define RIGHTREF(n) ((n) != PERFORM) + +/* nodetype.h ends here */ -- 2.43.0