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