summaryrefslogtreecommitdiff
path: root/EdkCompatibilityPkg/Other/Maintained/Tools/Pccts/sorcerer/h/STreeParser.h
diff options
context:
space:
mode:
Diffstat (limited to 'EdkCompatibilityPkg/Other/Maintained/Tools/Pccts/sorcerer/h/STreeParser.h')
-rw-r--r--EdkCompatibilityPkg/Other/Maintained/Tools/Pccts/sorcerer/h/STreeParser.h110
1 files changed, 110 insertions, 0 deletions
diff --git a/EdkCompatibilityPkg/Other/Maintained/Tools/Pccts/sorcerer/h/STreeParser.h b/EdkCompatibilityPkg/Other/Maintained/Tools/Pccts/sorcerer/h/STreeParser.h
new file mode 100644
index 0000000000..558f6a572b
--- /dev/null
+++ b/EdkCompatibilityPkg/Other/Maintained/Tools/Pccts/sorcerer/h/STreeParser.h
@@ -0,0 +1,110 @@
+#ifndef STreeParser_h
+#define STreeParser_h
+
+/*
+ * STreeParser.h
+ *
+ * SOFTWARE RIGHTS
+ *
+ * We reserve no LEGAL rights to SORCERER -- SORCERER is in the public
+ * domain. An individual or company may do whatever they wish with
+ * source code distributed with SORCERER or the code generated by
+ * SORCERER, including the incorporation of SORCERER, or its output, into
+ * commerical software.
+ *
+ * We encourage users to develop software with SORCERER. However, we do
+ * ask that credit is given to us for developing SORCERER. By "credit",
+ * we mean that if you incorporate our source code into one of your
+ * programs (commercial product, research project, or otherwise) that you
+ * acknowledge this fact somewhere in the documentation, research report,
+ * etc... If you like SORCERER and have developed a nice tool with the
+ * output, please mention that you developed it using SORCERER. In
+ * addition, we ask that this header remain intact in our source code.
+ * As long as these guidelines are kept, we expect to continue enhancing
+ * this system and expect to make other tools available as they are
+ * completed.
+ *
+ * SORCERER 1.00B
+ * Parr Research Corporation
+ * with Purdue University and AHPCRC, University of Minnesota
+ * 1992-1994
+ */
+
+/* The programmer should derive a class from SORASTBase; SORASTBase defines
+ * the minimum public interface that a tree node must follow for SORCERER to
+ * be able to walk the trees.
+ */
+
+/* The @-vars are added by the subclass created by SORCERER; the constructor
+ * is used to init the @-vars.
+ */
+
+#include <stdio.h>
+#include <setjmp.h>
+#include <stdlib.h>
+#include "SASTBase.h"
+
+#define _DOWN _t=(SORASTBase *)_t->down()
+#define _RIGHT _t=(SORASTBase *)_t->right()
+
+#define _SAVE SORASTBase *_save=_t
+#define _RESTORE _t = _save
+#define _GUESS_BLOCK STreeParser _st; int _gv; SORASTBase *_savet=NULL;
+#define _GUESS {save_state(&_st); \
+ _savet = _t; \
+ guessing = 1; \
+ _gv = setjmp(startofguess.state);}
+#define _GUESS_FAIL longjmp(startofguess.state, 1)
+#define _GUESS_DONE {restore_state(&_st); _t = _savet;}
+#define _MATCH(tok) MATCH(_t,tok)
+#define _MATCHRANGE(t1,t2) MATCHRANGE(_t,t1,t2)
+#define _WILDCARD WILDCARD(_t)
+
+#define ast_return(t) *_result = (SORASTBase *)t;
+
+#define STreeTry(r,p,t) \
+ (p)->try_result = NULL; \
+ (p)->sjrv = setjmp((p)->startofguess); \
+ if ( !(p)->sjrv ) { \
+ rule(p,t,&try_result); \
+ (p)->try_ok = 1; \
+ } \
+ else { \
+ (p)->try_ok = 0; \
+ } \
+ if ( (p)->try_ok )
+
+
+/* Used only during TRANSFORM mode */
+#define TREE_CONSTR_PTRS SORASTBase *_r=NULL,*_s=NULL,*_e=NULL
+
+typedef struct _Sjmp_buf {
+ jmp_buf state;
+ } Sjmp_buf;
+
+class STreeParser {
+protected:
+ int try_ok, sjrv; /* used by STreeTry macro */
+ SORASTBase *try_result; /* tree coming back from try */
+ int guessing;
+ Sjmp_buf startofguess;
+// SORASTBase *t;
+
+ void _mkroot(SORASTBase **, SORASTBase **, SORASTBase **, SORASTBase *);
+ void _mkchild(SORASTBase **, SORASTBase **, SORASTBase **, SORASTBase *);
+ virtual void mismatched_range(int looking_for, int upper_token, SORASTBase *found);
+ virtual void missing_wildcard();
+ virtual void mismatched_token(int looking_for, SORASTBase *found);
+ virtual void no_viable_alt(char *rulename, SORASTBase *root);
+ virtual void MATCH(SORASTBase *_t, int tok);
+ virtual void MATCHRANGE(SORASTBase *_t, int tok, int tok2);
+ virtual void WILDCARD(SORASTBase *_t);
+
+public:
+ STreeParser() { guessing = 0; }
+ virtual void panic(char *err);
+ void save_state(STreeParser *);
+ void restore_state(STreeParser *);
+};
+
+#endif