1<< 2/* parser.dlg -- DLG Description of scanner 3 * 4 * Generated from: dlg_p.g 5 * 6 * Terence Parr, Will Cohen, and Hank Dietz: 1989-2001 7 * Purdue University Electrical Engineering 8 * With AHPCRC, University of Minnesota 9 * ANTLR Version 1.33MR33 10 */ 11 12#define ANTLR_VERSION 13333 13#include "pcctscfg.h" 14#include "pccts_stdio.h" 15 16#include <ctype.h> 17#include "dlg.h" 18#include "antlr.h" 19#include "tokens.h" 20#include "dlgdef.h" 21LOOKAHEAD 22 23void 24#ifdef __USE_PROTOS 25zzerraction(void) 26#else 27zzerraction() 28#endif 29{ 30 (*zzerr)("invalid token"); 31 zzadvance(); 32 zzskip(); 33} 34>> 35 36<<%%lexaction 37 38int func_action; /* should actions be turned into functions?*/ 39int lex_mode_counter = 0; /* keeps track of the number of %%names */ 40/* MR1 */ 41/* MR1 11-Apr-97 Provide mechanism for inserting code into DLG class */ 42/* MR1 via <<%%lexmember...>> */ 43/* MR1 */ 44int lexMember = 0; /* <<%%lexmemeber ...>> MR1 */ 45int lexAction = 0; /* <<%%lexaction ...>> MR1 */ 46int parserClass = 0; /* <<%%parserclass ...>> MR1 */ 47int lexPrefix = 0; /* <<%%lexprefix ...>> MR1 */ 48char theClassName[100]; /* MR11 */ 49char *pClassName=theClassName; /* MR11 */ 50int firstLexMember=1; /* MR1 */ 51 52#ifdef __USE_PROTOS 53void xxputc(int c) { /* MR1 */ 54#else 55 void xxputc(c) /* MR1 */ 56 int c; /* MR1 */ 57 { /* MR1 */ 58#endif 59 if (parserClass) { /* MR1 */ 60 *pClassName++=c; /* MR1 */ 61 *pClassName=0; /* MR1 */ 62 } else if (lexMember || lexPrefix) { /* MR1 */ 63 if (class_stream != NULL) fputc(c,class_stream); /* MR1 */ 64 } else { /* MR1 */ 65 fputc(c,OUT); /* MR1 */ 66 }; /* MR1 */ 67 } /* MR1 */ 68 69#ifdef __USE_PROTOS 70 void xxprintf(char *format,char *string) { /* MR1 */ 71#else 72 void xxprintf(format,string) /* MR1 */ 73 char *format; /* MR1 */ 74 char *string; /* MR1 */ 75 { /* MR1 */ 76#endif 77 if (lexMember || lexPrefix || parserClass) { /* MR1 */ 78 if (class_stream != NULL) /* MR1 */ 79 fprintf(class_stream,format,string); /* MR1 */ 80 } else { /* MR1 */ 81 fprintf(OUT,format,string); /* MR1 */ 82 }; /* MR1 */ 83 } /* MR1 */ 84>> 85 86 87%%START 88 89@ 90 << 91 NLA = 1; 92 >> 93 94[\r\t\ ]+ 95 << 96 NLA = 2; 97 zzskip(); 98 >> 99 100\n 101 << 102 NLA = 3; 103 zzline++; zzskip(); DAWDLE; 104 >> 105 106\@ 107 << 108 NLA = L_EOF; 109 >> 110 111\%\% 112 << 113 NLA = PER_PER; 114 >> 115 116\%\%[a-zA-Z_][a-zA-Z0-9_]* 117 << 118 NLA = NAME_PER_PER; 119 p_mode_def(&zzlextext[2],lex_mode_counter++); 120 >> 121 122\<\<\%\%lexmember 123 << 124 NLA = LEXMEMBER; 125 lexMember=1; /* MR1 */ 126 if (firstLexMember != 0) { /* MR1 */ 127 firstLexMember=0; /* MR1 */ 128 p_class_def1(); /* MR1 */ 129 }; /* MR1 */ 130 zzmode(ACT); /* MR1 */ 131 >> 132 133\<\<\%\%lexaction 134 << 135 NLA = LEXACTION; 136 lexAction=1;zzmode(ACT); 137 >> 138 139\<\<\%\%parserclass 140 << 141 NLA = PARSERCLASS; 142 parserClass=1; /* MR1 */ 143 zzmode(ACT); /* MR1 */ 144 >> 145 146\<\<\%\%lexprefix 147 << 148 NLA = LEXPREFIX; 149 lexPrefix=1;zzmode(ACT); 150 >> 151 152\<\< 153 << 154 NLA = ACTION; 155 if (func_action) 156 fprintf(OUT,"\n%s %sact%d()\n{ ", 157 gen_cpp?"ANTLRTokenType":"static void", 158 gen_cpp?ClassName("::"):"", ++action_no); 159 zzmode(ACT); zzskip(); 160 >> 161 162\>\> 163 << 164 NLA = GREAT_GREAT; 165 >> 166 167\{ 168 << 169 NLA = L_BRACE; 170 >> 171 172\} 173 << 174 NLA = R_BRACE; 175 >> 176 177\( 178 << 179 NLA = L_PAR; 180 >> 181 182\) 183 << 184 NLA = R_PAR; 185 >> 186 187\[ 188 << 189 NLA = L_BRACK; 190 >> 191 192\] 193 << 194 NLA = R_BRACK; 195 >> 196 197\* 198 << 199 NLA = ZERO_MORE; 200 >> 201 202\+ 203 << 204 NLA = ONE_MORE; 205 >> 206 207\| 208 << 209 NLA = OR; 210 >> 211 212\- 213 << 214 NLA = RANGE; 215 >> 216 217\~ 218 << 219 NLA = NOT; 220 >> 221 222\\0[0-7]* 223 << 224 NLA = OCTAL_VALUE; 225 {int t; sscanf(&zzlextext[1],"%o",&t); zzlextext[0] = t;} 226 >> 227 228\\0[Xx][0-9a-fA-F]+ 229 << 230 NLA = HEX_VALUE; 231 {int t; sscanf(&zzlextext[3],"%x",&t); zzlextext[0] = t;} 232 >> 233 234\\[1-9][0-9]* 235 << 236 NLA = DEC_VALUE; 237 {int t; sscanf(&zzlextext[1],"%d",&t); zzlextext[0] = t;} 238 >> 239 240\\t 241 << 242 NLA = TAB; 243 zzlextext[0] = '\t'; 244 >> 245 246\\n 247 << 248 NLA = NL; 249 zzlextext[0] = '\n'; 250 >> 251 252\\r 253 << 254 NLA = CR; 255 zzlextext[0] = '\r'; 256 >> 257 258\\b 259 << 260 NLA = BS; 261 zzlextext[0] = '\b'; 262 >> 263 264\\ \n 265 << 266 NLA = CONTINUATION; 267 zzline++; zzskip(); 268 >> 269 270\\~[tnrb] 271 << 272 NLA = LIT; 273 zzlextext[0] = zzlextext[1]; 274 >> 275 276~[\\] 277 << 278 NLA = REGCHAR; 279 >> 280 281 282%%ACT 283 284@ 285 << 286 NLA = 1; 287 error("unterminated action", zzline); zzmode(START); 288 >> 289 290\>\> 291 << 292 NLA = ACTION; 293 if (func_action) fprintf(OUT,"}\n\n"); 294 zzmode(START); 295 /* MR1 */ 296 /* MR1 11-Apr-97 Provide mechanism for inserting code into DLG class */ 297 /* MR1 via <<%%lexmember ...>> */ 298 /* MR1 This is a consequence of not saving actions */ 299 /* MR1 */ 300 /* MR1 */ parserClass=0; 301 /* MR1 */ lexPrefix=0; 302 /* MR1 */ lexAction=0; 303 /* MR1 */ lexMember=0; 304 >> 305 306\> 307 << 308 NLA = 34; 309 xxputc(zzlextext[0]); zzskip(); 310 >> 311 312\\\> 313 << 314 NLA = 35; 315 xxputc('>'); zzskip(); 316 >> 317 318\\ 319 << 320 NLA = 36; 321 xxputc('\\'); zzskip(); 322 >> 323 324\n 325 << 326 NLA = 37; 327 xxputc(zzlextext[0]); ++zzline; zzskip(); 328 >> 329 330/\* 331 << 332 NLA = 38; 333 zzmode(ACTION_COMMENTS); /* MR1 */ 334 xxprintf("%s", &(zzlextext[0])); zzskip(); /* MR1 */ 335 >> 336 337// 338 << 339 NLA = 39; 340 zzmode(ACTION_CPP_COMMENTS); /* MR1 */ 341 xxprintf("%s", &(zzlextext[0])); zzskip(); /* MR1 */ 342 >> 343 344~[] 345 << 346 NLA = 40; 347 xxputc(zzlextext[0]); zzskip(); 348 >> 349 350 351%%ACTION_COMMENTS 352 353@ 354 << 355 NLA = 1; 356 >> 357 358\*/ 359 << 360 NLA = 41; 361 zzmode(ACT); /* MR1 */ 362 xxprintf("%s", &(zzlextext[0])); zzskip(); /* MR1 */ 363 >> 364 365[\n\r] 366 << 367 NLA = 42; 368 zzline++; xxputc(zzlextext[0]); zzskip(); 369 >> 370 371~[] 372 << 373 NLA = 43; 374 xxputc(zzlextext[0]); zzskip(); 375 >> 376 377 378%%ACTION_CPP_COMMENTS 379 380@ 381 << 382 NLA = 1; 383 >> 384 385[\n\r] 386 << 387 NLA = 44; 388 zzmode(ACT); zzline++; /* MR1 */ 389 xxprintf("%s", &(zzlextext[0])); zzskip(); /* MR1 */ 390 >> 391 392~[] 393 << 394 NLA = 45; 395 xxputc(zzlextext[0]); zzskip(); 396 >> 397 398%% 399