|
OpenADFortTk (basic)
|
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 }