OpenADFortTk (basic)
src/lib/support/SexpTags.cxx
Go to the documentation of this file.
00001 // ##########################################################
00002 // # This file is part of OpenADFortTk.                     #
00003 // # The full COPYRIGHT notice can be found in the top      #
00004 // # level directory of the OpenADFortTk source tree.       #
00005 // # For more information visit                             #
00006 // # http://www.mcs.anl.gov/openad                          #
00007 // ##########################################################
00008 
00009 #include <string>
00010 
00011 #include "SexpTags.h"
00012 
00013 namespace SexpTags {
00014 
00015   const char* WHIRL       = "whirl";
00016   const char* PU_FOREST   = "pu_forest";
00017   const char* PU_TREE     = "pu_tree";
00018   const char* PU          = "pu";
00019   
00020   const char* GBL_SYMTAB  = "gbl_symtab";
00021   const char* PU_SYMTAB   = "pu_symtab";
00022   
00023   const char* FILE_INFO   = "file_info";
00024   const char* ST_TAB      = "st_tab";
00025   const char* TY_TAB      = "ty_tab";
00026   const char* PU_TAB      = "pu_tab";
00027   const char* FLD_TAB     = "fld_tab";
00028   const char* ARB_TAB     = "arb_tab";
00029   const char* TYLIST_TAB  = "tylist_tab";
00030   const char* TCON_TAB    = "tcon_tab";
00031   const char* TCON_STR_TAB = "tcon_str_tab";
00032   const char* INITO_TAB   = "inito_tab";
00033   const char* INITV_TAB   = "initv_tab";
00034   const char* BLK_TAB     = "blk_tab";
00035   const char* ST_ATTR_TAB = "st_attr_tab";
00036   const char* STR_TAB     = "str_tab";
00037   const char* PREG_TAB    = "preg_tab";
00038   const char* LABEL_TAB   = "label_tab";
00039   
00040   const char* ST          = "st";
00041   const char* TY          = "ty";
00042   const char* FLG         = "flg";
00043   const char* OFLG        = "oflg";
00044   
00045 };
00046 
00047 
00048 static const char* BLANK_LINE =
00049 ";;\n";
00050 
00051 static const char* GRAMMAR_SUMMARY =
00052 ";; *** Summary ***\n"
00053 ";; WHIRL      ::= (whirl GBL_SYMTAB PU_FOREST)\n"
00054 ";; GBL_SYMTAB ::= (gbl_symtab GBL_TAB1..GBL_TABn)        ; n is fixed\n"
00055 ";; PU_FOREST  ::= (pu_forest PU_TREE*)                   ; list of PU_TREEs\n"
00056 ";; PU_TREE    ::= (pu_tree PU PU_TREE*) | NULL\n"
00057 ";; PU         ::= (pu PU_SYM PU_SYMTAB WN_AST)\n"
00058 ";; PU_SYMTAB  ::= (pu_symtab PU_TAB1..PU_TABm)           ; m is fixed\n"
00059 ";; WN_AST     ::= (WN_OPR WN_ATTRS WN_AST*) | NULL\n";
00060 
00061 static const char* GRAMMAR_SYMTAB_DETAILS =
00062 ";; *** Symbol Table Details ***\n"
00063 ";; GBL_SYMTAB ::= (gbl_symtab\n"
00064 ";;                   FILE_INFO       ; file information\n"
00065 ";;                   ST_TAB          ; symbol table (global)\n"
00066 ";;                     ST_ATTR_TAB   ;   misc. attributes for ST_TAB\n"
00067 ";;                   PU_TAB          ; program-unit table\n"
00068 ";;                   TY_TAB          ; type table\n"
00069 ";;                     FLD_TAB       ;   field table (structured types)\n"
00070 ";;                     ARB_TAB       ;   array-bound table\n"
00071 ";;                     TYLIST_TAB    ;   function prototypes\n"
00072 ";;                   TCON_TAB        ; constant table\n"
00073 ";;                     TCON_STR_TAB  ;   string constant table\n"
00074 ";;                   INITO_TAB       ; initial values for init'd objects\n"
00075 ";;                     INITV_TAB     ;   values for scalar components\n"
00076 ";;                   BLK_TAB         ; layout info for block of data \n"
00077 ";;                   STR_TAB         ; string table\n"
00078 ";;                   )\n"
00079 ";; PU_SYMTAB  ::= (pu_symtab\n"
00080 ";;                   ST_TAB          ; symbol table (local)\n"
00081 ";;                     ST_ATTR_TAB   ;   misc. attributes for ST_TAB\n"
00082 ";;                   LABEL_TAB       ; label table\n"
00083 ";;                   PREG_TAB        ; psuedo-register table\n"
00084 ";;                   INITO_TAB       ; initial values for init'd objects\n"
00085 ";;                   )\n"
00086 ";;\n"
00087 ";; FILE_INFO   ::= (file_info GP_GROUP FLAGS)\n"
00088 ";;\n"
00089 ";; ST_TAB      ::= (st_tab ENTRY*)\n"
00090 ";; ENTRY       ::= (IDX SYM_CLASS STORAGE_CLASS EXPORT_CLASS\n"
00091 ";;                  NAME_IDX/TCON TYPE/PU/BLK BASE_IDX OFFSET\n"
00092 ";;                  FLAGS FLAGS_EXT ST)\n"
00093 ";;\n"
00094 ";; ST_ATTR_TAB ::= (st_attr_tab ENTRY*)\n"
00095 ";; ENTRY       ::= (IDX ST KIND REG_ID/SECTION_NAME)\n"
00096 ";;\n"
00097 ";; PU_TAB      ::= (pu_tab ENTRY*)\n"
00098 ";; ENTRY       ::= (IDX PROTOTYPE LEXICAL_LEVEL GP_GROUP SRC_LANG\n"
00099 ";;                  TARGET_IDX FLAGS)\n"
00100 ";;\n"
00101 ";; TY_TAB      ::= (ty_tab ENTRY*)\n"
00102 ";; ENTRY       ::= (IDX KIND NAME_IDX MTYPE SIZE FLAGS\n"
00103 ";;                  ARB/FLD/TYLIST ETYPE/POINTED/PU_FLAGS)\n"
00104 ";;\n"
00105 ";; FLD_TAB     ::= (fld_tab ENTRY*)\n"
00106 ";; ENTRY       ::= (IDX NAME_IDX TYPE OFST, BSIZE, BOFST FLAGS ST)\n"
00107 ";;\n"
00108 ";; ARB_TAB     ::= (arb_tab ENTRY*)\n"
00109 ";; ENTRY       ::= (IDX FLAGS DIMENSION CO_DIMENSION\n"
00110 ";;                  LBND_VAL/LBND_VAR UBND_VAL/UBND_VAR\n"
00111 ";;                  STRIDE_VAL/STRIDE_VAR)\n"
00112 ";;\n"
00113 ";; TYLIST_TAB  ::= (tylist_tab ENTRY*)\n" 
00114 ";; ENTRY       ::= (IDX TY)\n"
00115 ";;\n"
00116 ";; TCON_TAB    ::= (tcon_tab ENTRY*)\n"
00117 ";; ENTRY       ::= (IDX TY FLAGS VALS CMPLXVAL)\n"
00118 ";;\n"
00119 ";; TCON_STR_TAB ::= (tcon_str_tab ENTRY*)\n"
00120 ";; ENTRY       ::= (IDX CHAR_ARRAY)\n"
00121 ";;\n"
00122 ";; INITO_TAB   ::= (inito_tab ENTRY*)\n"
00123 ";; ENTRY       ::= (IDX ST VAL)\n"
00124 ";;\n"
00125 ";; INITV_TAB   ::= (initv_tab ENTRY*)\n"
00126 ";; ENTRY       ::= (IDX NEXT KIND REPEAT1\n"
00127 ";;                  ST/LAB/LAB1/MTYPE/TC/BLK/PAD OFST/ST2/REPEAT2/UNUSED)\n"
00128 ";;\n"
00129 ";; BLK_TAB     ::= (blk_tab ENTRY*)\n"
00130 ";; ENTRY       ::= (IDX SIZE ALIGN FLAGS SECTION_IDX SCNINFO_IDX)\n"
00131 ";;\n"
00132 ";; STR_TAB     ::= (str_tab ENTRY*)\n"
00133 ";; ENTRY       ::= (IDX STRING)\n"
00134 ";;\n"
00135 ";; LABEL_TAB   ::= (label_tab ENTRY*)\n"
00136 ";; ENTRY       ::= (IDX NAME_IDX KIND FLAGS)\n"
00137 ";;\n"
00138 ";; PREG_TAB    ::= (preg_tab ENTRY*)\n"
00139 ";; ENTRY       ::= (IDX NAME_IDX)\n"
00140 ";;\n"
00141 ";;\n"
00142 ";; ST  ::= (st HSTR SCOPE_IDX IDX)\n"
00143 ";; TY  ::= (ty HSTR IDX ALIGN)\n"
00144 ";;\n"
00145 ";; HSTR (helper string) is a (possibly empty) quoted string.\n";
00146 
00147 // Other notes:
00148 // - indices aways begin with 1 (never 0)
00149 // - 'entry' above is duplicated to make names easier to read
00150 // - tylist-tab lists are null-terminated
00151 // - strtab indices are special
00152 
00153 
00154 static const char* GRAMMAR_AST_DETAILS =
00155 ";; *** AST Details ***\n"
00156 ";; WN_OPR     ::= OPERATOR RTYPE DTYPE\n"
00157 ";; WN_ATTRS   ::= ((ATTR1 ...) (ATTR2 ...) (ATTR3 ...) ...)\n";
00158 
00159 
00160 const char* 
00161 SexpTags::get_grammar_summary()
00162 {
00163   return GRAMMAR_SUMMARY;
00164 }
00165 
00166 
00167 const char* 
00168 SexpTags::get_grammar()
00169 {
00170   static std::string str;
00171   if (str.size() == 0) {
00172     str += GRAMMAR_SUMMARY;
00173     str += BLANK_LINE;
00174     str += GRAMMAR_SYMTAB_DETAILS;
00175     str += BLANK_LINE;
00176     str += GRAMMAR_AST_DETAILS;
00177   }
00178   
00179   return str.c_str();
00180 }
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines