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