antlr.h
上传用户:itx_2006
上传日期:2007-01-06
资源大小:493k
文件大小:21k
源码类别:

编译器/解释器

开发平台:

Others

  1. /* antlr.h
  2.  *
  3.  * SOFTWARE RIGHTS
  4.  *
  5.  * We reserve no LEGAL rights to the Purdue Compiler Construction Tool
  6.  * Set (PCCTS) -- PCCTS is in the public domain.  An individual or
  7.  * company may do whatever they wish with source code distributed with
  8.  * PCCTS or the code generated by PCCTS, including the incorporation of
  9.  * PCCTS, or its output, into commerical software.
  10.  *
  11.  * We encourage users to develop software with PCCTS.  However, we do ask
  12.  * that credit is given to us for developing PCCTS.  By "credit",
  13.  * we mean that if you incorporate our source code into one of your
  14.  * programs (commercial product, research project, or otherwise) that you
  15.  * acknowledge this fact somewhere in the documentation, research report,
  16.  * etc...  If you like PCCTS and have developed a nice tool with the
  17.  * output, please mention that you developed it using PCCTS.  In
  18.  * addition, we ask that this header remain intact in our source code.
  19.  * As long as these guidelines are kept, we expect to continue enhancing
  20.  * this system and expect to make other tools available as they are
  21.  * completed.
  22.  *
  23.  * ANTLR 1.33
  24.  * Terence Parr
  25.  * Parr Research Corporation
  26.  * with Purdue University and AHPCRC, University of Minnesota
  27.  * 1989-1998
  28.  */
  29. #ifndef ANTLR_H
  30. #define ANTLR_H
  31. #include "pcctscfg.h"
  32. #include PCCTS_STDIO_H
  33. /*
  34.  * Define all of the stack setup and manipulation of $i, #i variables.
  35.  *
  36.  * Notes:
  37.  * The type 'Attrib' must be defined before entry into this .h file.
  38.  */
  39. #ifdef __USE_PROTOS
  40. #include PCCTS_STDLIB_H
  41. #else
  42. #ifdef VAXC
  43. #include <stdlib.h>
  44. #else
  45. #include <malloc.h>
  46. #endif
  47. #endif
  48. #include PCCTS_STRING_H
  49. typedef int ANTLRTokenType;
  50. typedef unsigned char SetWordType;
  51. typedef char ANTLRChar;
  52. /* G u e s s  S t u f f */
  53. #ifdef ZZCAN_GUESS
  54. #ifndef ZZINF_LOOK
  55. #define ZZINF_LOOK
  56. #endif
  57. #endif
  58. #ifdef ZZCAN_GUESS
  59. typedef struct _zzjmp_buf {
  60. jmp_buf state;
  61. } zzjmp_buf;
  62. #endif
  63. /* can make this a power of 2 for more efficient lookup */
  64. #ifndef ZZLEXBUFSIZE
  65. #define ZZLEXBUFSIZE 2000
  66. #endif
  67. #define zzOvfChk
  68.             if ( zzasp <= 0 )                                           
  69.             {                                                           
  70.                 fprintf(stderr, zzStackOvfMsg, __FILE__, __LINE__);
  71.                 exit(PCCTS_EXIT_FAILURE);                                               
  72.             }
  73. #ifndef ZZA_STACKSIZE
  74. #define ZZA_STACKSIZE 400
  75. #endif
  76. #ifndef ZZAST_STACKSIZE
  77. #define ZZAST_STACKSIZE 400
  78. #endif
  79. #ifndef zzfailed_pred
  80. #ifdef ZZCAN_GUESS
  81. #define zzfailed_pred(_p) 
  82.   if (zzguessing) { 
  83.     zzGUESS_FAIL; 
  84.   } else { 
  85.     fprintf(stderr, "semantic error; failed predicate: '%s'n",_p); 
  86.   }
  87. #else
  88. #define zzfailed_pred(_p)
  89. fprintf(stderr, "semantic error; failed predicate: '%s'n",_p)
  90. #endif
  91. #endif
  92. #ifdef LL_K
  93. #define LOOKAHEAD
  94. int zztokenLA[LL_K];
  95. char zztextLA[LL_K][ZZLEXBUFSIZE];
  96. int zzlap = 0, zzlabase=0; /* labase only used for DEMAND_LOOK */
  97. #else
  98. #define LOOKAHEAD
  99. int zztoken;
  100. #endif
  101. #ifndef zzcr_ast
  102. #define zzcr_ast(ast,attr,tok,text)
  103. #endif
  104. #ifdef DEMAND_LOOK
  105. #define DemandLookData  int zzdirty=1;
  106. #else
  107. #define DemandLookData
  108. #endif
  109. #ifndef zzUSER_GUESS_HOOK
  110. #define zzUSER_GUESS_HOOK(seqFrozen,zzrv)
  111. #endif
  112. #ifndef zzUSER_GUESS_DONE_HOOK
  113. #define zzUSER_GUESS_DONE_HOOK(seqFrozen)
  114. #endif
  115. /* S t a t e  S t u f f */
  116. #ifdef ZZCAN_GUESS
  117. #define zzGUESS_BLOCK zzantlr_state zzst; int zzrv; int zzGuessSeqFrozen;
  118. /* MR10 change zzGUESS: do zzGUESS_DONE when zzrv==1 after longjmp as in C++ mode */
  119. #define zzGUESS zzsave_antlr_state(&zzst); 
  120. zzguessing = 1; 
  121.                             zzGuessSeqFrozen=++zzGuessSeq; 
  122. zzrv = setjmp(zzguess_start.state); 
  123.                             zzUSER_GUESS_HOOK(zzGuessSeqFrozen,zzrv) 
  124.                             if (zzrv) zzGUESS_DONE;
  125. #ifdef zzTRACE_RULES
  126. #define zzGUESS_FAIL { zzTraceGuessFail(); longjmp(zzguess_start.state, 1); }
  127. #else
  128. #define zzGUESS_FAIL longjmp(zzguess_start.state, 1)
  129. #endif
  130. /* MR10 change zzGUESS_DONE: zzrv=1 to simulate longjmp() return value as in C++ mode */
  131. #define zzGUESS_DONE { zzrestore_antlr_state(&zzst); zzrv=1; zzUSER_GUESS_DONE_HOOK(zzGuessSeqFrozen) }
  132. #define zzNON_GUESS_MODE if ( !zzguessing )
  133. #define zzGuessData                                     
  134.             zzjmp_buf zzguess_start;                    
  135.             int zzguessing;
  136. #else
  137. #define zzGUESS_BLOCK
  138. #define zzGUESS
  139. #define zzGUESS_FAIL
  140. #define zzGUESS_DONE
  141. #define zzNON_GUESS_MODE
  142. #define zzGuessData
  143. #endif
  144. typedef struct _zzantlr_state {
  145. #ifdef ZZCAN_GUESS
  146. zzjmp_buf guess_start;
  147. int guessing;
  148. #endif
  149. int asp;
  150. int ast_sp;
  151. #ifdef ZZINF_LOOK
  152. int inf_lap; /* not sure we need to save this one */
  153. int inf_labase;
  154. int inf_last;
  155. /* MR6  Gunnar Rxnning (gunnar@candleweb.no)                                */
  156. /* MR6   Additional state needs to be saved/restored                       */
  157. /* MR6    Matching changes in err.h                                         */
  158. int *inf_tokens;                                      /* MR6 */
  159. char **inf_text;                                      /* MR6 */
  160. char *inf_text_buffer;                              /* MR6 */
  161. int *inf_line;                                      /* MR6 */
  162. #endif
  163. #ifdef DEMAND_LOOK
  164. int dirty;
  165. #endif
  166. #ifdef LL_K
  167. int tokenLA[LL_K];
  168. char textLA[LL_K][ZZLEXBUFSIZE];
  169. int lap;
  170. int labase;
  171. #else
  172. int token;
  173. char text[ZZLEXBUFSIZE];
  174. #endif
  175. #ifdef zzTRACE_RULES
  176.             int     traceOptionValue;       /* MR10 */
  177.             int     traceGuessOptionValue;  /* MR10 */
  178.             char    *traceCurrentRuleName;  /* MR10 */
  179.             int     traceDepth;             /* MR10 */
  180. #endif
  181. } zzantlr_state;
  182. #ifdef zzTRACE_RULES
  183. extern int  zzTraceOptionValueDefault;
  184. extern int  zzTraceOptionValue;
  185. extern int  zzTraceGuessOptionValue;
  186. extern char *zzTraceCurrentRuleName;
  187. extern int  zzTraceDepth;
  188. #endif
  189. extern int zzGuessSeq;                      /* MR10 */
  190. extern int zzSyntaxErrCount;                /* MR11 */
  191. extern int zzLexErrCount;                   /* MR11 */
  192.                  /* I n f i n i t e  L o o k a h e a d */
  193. #ifdef ZZINF_LOOK
  194. #define InfLookData
  195. int *zzinf_tokens;
  196. char **zzinf_text;
  197. char *zzinf_text_buffer;
  198. int *zzinf_line;        
  199. int zzinf_labase;
  200. int zzinf_last;
  201. #else
  202. #define InfLookData
  203. #endif
  204. #ifdef ZZINF_LOOK
  205. #ifndef ZZINF_DEF_TEXT_BUFFER_SIZE
  206. #define ZZINF_DEF_TEXT_BUFFER_SIZE     20000
  207. #endif
  208. #ifndef ZZINF_DEF_TOKEN_BUFFER_SIZE
  209. #define ZZINF_DEF_TOKEN_BUFFER_SIZE     2000
  210. #endif
  211. /* WARNING!!!!!!
  212.  * ZZINF_BUFFER_TEXT_CHUNK_SIZE must be > sizeof(text) largest possible token.
  213.  */
  214. #ifndef ZZINF_BUFFER_TEXT_CHUNK_SIZE
  215. #define ZZINF_BUFFER_TEXT_CHUNK_SIZE 5000
  216. #endif
  217. #ifndef ZZINF_BUFFER_TOKEN_CHUNK_SIZE
  218. #define ZZINF_BUFFER_TOKEN_CHUNK_SIZE 1000
  219. #endif
  220. #if ZZLEXBUFSIZE > ZZINF_BUFFER_TEXT_CHUNK_SIZE
  221. #define ZZINF_BUFFER_TEXT_CHUNK_SIZE ZZLEXBUFSIZE+5
  222. #endif
  223. /* make inf_look user-access macros */
  224. #ifdef LL_K
  225. #define ZZINF_LA_VALID(i) (((zzinf_labase+i-1)-LL_K+1) <= zzinf_last)
  226. #define ZZINF_LA(i) zzinf_tokens[(zzinf_labase+i-1)-LL_K+1]
  227. #define ZZINF_LATEXT(i) zzinf_text[(zzinf_labase+i-1)-LL_K+1]
  228. /* MR6 In 1.33 vanilla the #define ZZINF_LINE(i) is was commented out */
  229. #define ZZINF_LINE(i)       zzinf_line[(zzinf_labase+i-1)-LL_K+1]
  230. #else
  231. #define ZZINF_LA_VALID(i) (((zzinf_labase+i-1)) <= zzinf_last)
  232. #define ZZINF_LA(i) zzinf_tokens[(zzinf_labase+i-1)]
  233. #define ZZINF_LATEXT(i) zzinf_text[(zzinf_labase+i-1)]
  234. #endif
  235. #define inf_zzgettok _inf_zzgettok()
  236. extern void _inf_zzgettok();
  237. #endif /* ZZINF_LOOK */
  238. #ifdef LL_K
  239. #ifdef __USE_PROTOS
  240. #define ANTLR_INFO
  241. Attrib zzempty_attr() {static Attrib a; return a;}    
  242. Attrib zzconstr_attr(int _tok, char *_text)    
  243. {Attrib a; zzcr_attr((&a),_tok,_text); return a;}    
  244. int zzasp=ZZA_STACKSIZE;    
  245. char zzStackOvfMsg[]="fatal: attrib/AST stack overflow %s(%d)!n"; 
  246. Attrib zzaStack[ZZA_STACKSIZE]; DemandLookData    
  247. InfLookData                                                        
  248.     zzGuessData
  249. #else
  250. #define ANTLR_INFO
  251. Attrib zzempty_attr() {static Attrib a; return a;}     
  252. Attrib zzconstr_attr(_tok, _text) int _tok; char *_text;            
  253. {Attrib a; zzcr_attr((&a),_tok,_text); return a;}     
  254. int zzasp=ZZA_STACKSIZE;     
  255. char zzStackOvfMsg[]="fatal: attrib/AST stack overflow %s(%d)!n";  
  256. Attrib zzaStack[ZZA_STACKSIZE]; DemandLookData     
  257. InfLookData                                                         
  258.     zzGuessData
  259. #endif
  260. #else
  261. #ifdef __USE_PROTOS
  262. #define ANTLR_INFO
  263. Attrib zzempty_attr() {static Attrib a; return a;}
  264. Attrib zzconstr_attr(int _tok, char *_text)
  265. {Attrib a; zzcr_attr((&a),_tok,_text); return a;}
  266. int zzasp=ZZA_STACKSIZE;
  267. char zzStackOvfMsg[]="fatal: attrib/AST stack overflow %s(%d)!n";      
  268. Attrib zzaStack[ZZA_STACKSIZE]; DemandLookData
  269. InfLookData                                                             
  270.     zzGuessData
  271. #else
  272. #define ANTLR_INFO
  273. Attrib zzempty_attr() {static Attrib a; return a;}
  274. Attrib zzconstr_attr(_tok, _text) int _tok; char *_text;                
  275. {Attrib a; zzcr_attr((&a),_tok,_text); return a;}
  276. int zzasp=ZZA_STACKSIZE;
  277. char zzStackOvfMsg[]="fatal: attrib/AST stack overflow %s(%d)!n";      
  278. Attrib zzaStack[ZZA_STACKSIZE]; DemandLookData
  279. InfLookData                                                             
  280.     zzGuessData
  281. #endif
  282. #endif /* LL_k */
  283. #ifdef ZZINF_LOOK
  284. #ifdef LL_K
  285. #ifdef DEMAND_LOOK
  286. #define zzPrimeLookAhead  {zzdirty=LL_K; zzlap = zzlabase = 0;}
  287. #else
  288. #define zzPrimeLookAhead  {zzlap = zzlabase = 0; zzfill_inf_look();
  289.   {int _i;  for(_i=1;_i<=LL_K; _i++)
  290. {zzCONSUME;} zzlap = zzlabase = 0;}}
  291. #endif
  292. #else /* LL_K */
  293. #ifdef DEMAND_LOOK
  294. #define zzPrimeLookAhead  zzfill_inf_look(); zzdirty=1
  295. #else
  296. #define zzPrimeLookAhead  zzfill_inf_look(); inf_zzgettok
  297. #endif
  298. #endif /* LL_K */
  299. #else /* ZZINF_LOOK */
  300. #ifdef LL_K
  301. #ifdef DEMAND_LOOK
  302. #define zzPrimeLookAhead  {zzdirty=LL_K; zzlap = zzlabase = 0;}
  303. #else
  304. #define zzPrimeLookAhead  {int _i; zzlap = 0; for(_i=1;_i<=LL_K; _i++)
  305. {zzCONSUME;} zzlap = 0;}
  306. #endif
  307. #else
  308. #ifdef DEMAND_LOOK
  309. #define zzPrimeLookAhead  zzdirty=1
  310. #else
  311. #define zzPrimeLookAhead  zzgettok()
  312. #endif
  313. #endif /* LL_K */
  314. #endif /* ZZINF_LOOK */
  315. #ifdef LL_K
  316. #define zzenterANTLRs(s)                            
  317.         zzlextext = &(zztextLA[0][0]); zzrdstr( s ); zzPrimeLookAhead;
  318. #define zzenterANTLRf(f)
  319. zzlextext = &(zztextLA[0][0]); zzrdfunc( f ); zzPrimeLookAhead;
  320. #define zzenterANTLR(f)
  321. zzlextext = &(zztextLA[0][0]); zzrdstream( f ); zzPrimeLookAhead;
  322. #ifdef ZZINF_LOOK
  323. #define zzleaveANTLR(f) free(zzinf_text_buffer); free(zzinf_text); free(zzinf_tokens); free(zzinf_line);
  324. #define zzleaveANTLRf(f)     free(zzinf_text_buffer); free(zzinf_text); free(zzinf_tokens); free(zzinf_line);
  325. #define zzleaveANTLRs(f) free(zzinf_text_buffer); free(zzinf_text); free(zzinf_tokens); free(zzinf_line);
  326. #else
  327. #define zzleaveANTLR(f)
  328. #define zzleaveANTLRf(f)
  329. #define zzleaveANTLRs(f)
  330. #endif
  331. #else
  332. #define zzenterANTLRs(s)                            
  333.         {static char zztoktext[ZZLEXBUFSIZE];   
  334.         zzlextext = zztoktext; zzrdstr( s ); zzPrimeLookAhead;}
  335. #define zzenterANTLRf(f)
  336. {static char zztoktext[ZZLEXBUFSIZE];
  337. zzlextext = zztoktext; zzrdfunc( f ); zzPrimeLookAhead;}
  338. #define zzenterANTLR(f)
  339. {static char zztoktext[ZZLEXBUFSIZE];
  340. zzlextext = zztoktext; zzrdstream( f ); zzPrimeLookAhead;}
  341. #ifdef ZZINF_LOOK
  342. #define zzleaveANTLR(f) free(zzinf_text_buffer); free(zzinf_text); free(zzinf_tokens); free(zzinf_line);
  343. #define zzleaveANTLRf(f)     free(zzinf_text_buffer); free(zzinf_text); free(zzinf_tokens); free(zzinf_line);
  344. #define zzleaveANTLRs(f) free(zzinf_text_buffer); free(zzinf_text); free(zzinf_tokens); free(zzinf_line);
  345. #else
  346. #define zzleaveANTLR(f)
  347. #define zzleaveANTLRf(f)
  348. #define zzleaveANTLRs(f)
  349. #endif
  350. #endif
  351. #define ANTLR(st, f) zzbufsize = ZZLEXBUFSIZE;
  352. zzenterANTLR(f);
  353. st; ++zzasp;
  354. zzleaveANTLR(f);
  355. #define ANTLRm(st, f, _m) zzbufsize = ZZLEXBUFSIZE;
  356. zzmode(_m);
  357. zzenterANTLR(f);
  358. st; ++zzasp;
  359. zzleaveANTLR(f);
  360. #define ANTLRf(st, f) zzbufsize = ZZLEXBUFSIZE;
  361. zzenterANTLRf(f);
  362. st; ++zzasp;
  363. zzleaveANTLRf(f);
  364. #define ANTLRs(st, s)   zzbufsize = ZZLEXBUFSIZE;
  365.                         zzenterANTLRs(s);           
  366.                         st; ++zzasp;
  367.                         zzleaveANTLRs(s);
  368. #ifdef LL_K
  369. #define zztext (&(zztextLA[zzlap][0]))
  370. #else
  371. #define zztext zzlextext
  372. #endif
  373. /* A r g u m e n t  A c c e s s */
  374. #define zzaCur (zzaStack[zzasp])
  375. #define zzaRet (*zzaRetPtr)
  376. #define zzaArg(v,n) zzaStack[v-n]
  377. #define zzMakeAttr { zzNON_GUESS_MODE {zzOvfChk; --zzasp; zzcr_attr(&(zzaStack[zzasp]),LA(1),LATEXT(1));}}
  378. #ifdef zzdef0
  379. #define zzMake0 { zzOvfChk; --zzasp; zzdef0(&(zzaStack[zzasp]));}
  380. #else
  381. #define zzMake0 { zzOvfChk; --zzasp;}
  382. #endif
  383. #define zzaPush(_v) { zzOvfChk; zzaStack[--zzasp] = _v;}
  384. #ifndef zzd_attr
  385. #define zzREL(t) zzasp=(t); /* Restore state of stack */
  386. #else
  387. #define zzREL(t) for (; zzasp<(t); zzasp++)
  388. { zzd_attr(&(zzaStack[zzasp])); }
  389. #endif
  390. #define zzsetmatch(_es)
  391. if ( !_zzsetmatch(_es, &zzBadText, &zzMissText, &zzMissTok, &zzBadTok, &zzMissSet) ) goto fail;
  392. #ifdef ZZCAN_GUESS
  393. #define zzsetmatch_wsig(_es, handler)
  394. if ( !_zzsetmatch_wsig(_es) ) if (zzguessing) { zzGUESS_FAIL; } else {_signal=MismatchedToken; goto handler;}
  395. #else
  396. #define zzsetmatch_wsig(_es, handler)
  397. if ( !_zzsetmatch_wsig(_es) ) {_signal=MismatchedToken; goto handler;}
  398. #endif
  399. #ifdef __USE_PROTOS
  400. extern int _zzsetmatch(SetWordType *, char **, char **, int *, int *, SetWordType **);
  401. extern int _zzsetmatch_wsig(SetWordType *);
  402. #else
  403. extern int _zzsetmatch();
  404. extern int _zzsetmatch_wsig();
  405. #endif
  406. #define zzmatch(_t)
  407. if ( !_zzmatch(_t, &zzBadText, &zzMissText, &zzMissTok, &zzBadTok, &zzMissSet) ) goto fail;
  408. #ifdef ZZCAN_GUESS
  409. #define zzmatch_wsig(_t,handler)
  410. if ( !_zzmatch_wsig(_t) ) if (zzguessing) { zzGUESS_FAIL; } else {_signal=MismatchedToken; goto handler;}
  411. #else
  412. #define zzmatch_wsig(_t,handler)
  413. if ( !_zzmatch_wsig(_t) ) {_signal=MismatchedToken; goto handler;}
  414. #endif
  415. #ifdef __USE_PROTOS
  416. extern int _zzmatch(int, char **, char **, int *, int *, SetWordType **);
  417. extern int _zzmatch_wsig(int);
  418. #else
  419. extern int _zzmatch();
  420. extern int _zzmatch_wsig();
  421. #endif
  422. #define zzmatch_wdfltsig(_t,_f)
  423. if ( !_zzmatch_wdfltsig(_t,_f) ) _signal=MismatchedToken;
  424. #define zzsetmatch_wdfltsig(tw,tt,wf)
  425. if ( !_zzsetmatch_wdfltsig(tw,tt,wf) ) _signal=MismatchedToken;
  426. #ifdef __USE_PROTOS
  427. extern int _zzmatch_wdfltsig(int, SetWordType *);
  428. extern int _zzsetmatch_wdfltsig(SetWordType *tokensWanted,
  429. int tokenTypeOfSet,
  430. SetWordType *whatFollows);
  431. #else
  432. extern int _zzmatch_wdfltsig();
  433. extern int _zzsetmatch_wdfltsig();
  434. #endif
  435. #ifdef GENAST
  436. #define zzRULE Attrib *zzaRetPtr = &(zzaStack[zzasp-1]);
  437. SetWordType *zzMissSet=NULL; int zzMissTok=0;
  438. int zzBadTok=0; char *zzBadText="";
  439. int zzErrk=1,zzpf=0;
  440.                     zzTRACEdata 
  441. char *zzMissText=""; zzASTVars
  442. #else
  443. #define zzRULE Attrib *zzaRetPtr = &(zzaStack[zzasp-1]);
  444. int zzBadTok=0; char *zzBadText="";
  445. int zzErrk=1,zzpf=0;
  446.                     zzTRACEdata 
  447. SetWordType *zzMissSet=NULL; int zzMissTok=0; char *zzMissText=""
  448. #endif
  449. #ifdef GENAST
  450. #define zzBLOCK(i) int i = zzasp - 1; int zztsp = zzast_sp
  451. #define zzEXIT(i) zzREL(i); zzastREL; zzNON_GUESS_MODE { zzastPush(*_root); }
  452. #define zzLOOP(i) zzREL(i); zzastREL
  453. #else
  454. #define zzBLOCK(i) int i = zzasp - 1
  455. #define zzEXIT(i) zzREL(i)
  456. #define zzLOOP(i) zzREL(i)
  457. #endif
  458. #ifdef LL_K
  459. #ifdef DEMAND_LOOK
  460. #define LOOK(_k) {int i,stop=_k-(LL_K-zzdirty); for (i=1; i<=stop; i++)
  461. zzCONSUME;}
  462. #define zzCONSUME {zzgettok(); zzdirty--;
  463. zzlap = (zzlap+1)&(LL_K-1);
  464. zzlextext = &(zztextLA[zzlap][0]);}
  465. #else
  466. #ifdef ZZINF_LOOK
  467. #define zzCONSUME {inf_zzgettok; 
  468. zzlap = (zzlap+1)&(LL_K-1);
  469. zzlextext = &(zztextLA[zzlap][0]);
  470. }
  471. #else
  472. #define zzCONSUME {zzgettok(); 
  473. zzlap = (zzlap+1)&(LL_K-1);
  474. zzlextext = &(zztextLA[zzlap][0]);}
  475. #endif /* ZZINF_LOOK */
  476. #endif /* DEMAND_LOOK */
  477. #else /* LL_K */
  478. #ifdef DEMAND_LOOK
  479. #define LOOK(_k) if ( zzdirty) zzCONSUME;
  480. #ifdef ZZINF_LOOK
  481. #define zzCONSUME inf_zzgettok; zzdirty=0;
  482. #else
  483. #define zzCONSUME zzgettok(); zzdirty=0;
  484. #endif /* ZZINF_LOOK */
  485. #else  /* DEMAND_LOOK */
  486. #ifdef ZZINF_LOOK
  487. #define zzCONSUME inf_zzgettok
  488. #else
  489. #define zzCONSUME zzgettok();
  490. #endif
  491. #endif /* DEMAND_LOOK */
  492. #endif /* LL_K */
  493. #ifdef LL_K
  494. #define NLA zztokenLA[zzlap&(LL_K-1)] /* --> next LA */
  495. #define NLATEXT zztextLA[zzlap&(LL_K-1)] /* --> next text of LA */
  496. #ifdef DEMAND_LOOK
  497. #define LA(i)       zztokenLA[(zzlabase+(i)-1)&(LL_K-1)]
  498. #define LATEXT(i)   (&(zztextLA[(zzlabase+(i)-1)&(LL_K-1)][0]))
  499. #else
  500. #define LA(i)       zztokenLA[(zzlap+(i)-1)&(LL_K-1)]
  501. #define LATEXT(i)   (&(zztextLA[(zzlap+(i)-1)&(LL_K-1)][0]))
  502. #endif
  503. #else
  504. #define NLA zztoken
  505. #define NLATEXT zztext
  506. #define LA(i)       zztoken
  507. #define LATEXT(i)   zztext
  508. #endif
  509.            /* S t a n d a r d  S i g n a l s */
  510. #define NoSignal 0
  511. #define MismatchedToken 1
  512. #define NoViableAlt 2
  513. #define NoSemViableAlt 3
  514. /* MR7  Allow more control over signalling                                  */
  515. /*        by adding "Unwind" and "zzsetSignal"                              */
  516. #define Unwind              4
  517. #define zzsetSignal(newValue) *_retsignal=_signal=(newValue)
  518. #define zzsuppressSignal *_retsignal=_signal=0
  519. #define zzexportSignal    *_retsignal=_signal
  520.            /* F u n c t i o n  T r a c i n g */
  521. #ifndef zzTRACE_RULES
  522. #define zzTRACEdata
  523. #else
  524. #ifndef zzTRACEdata
  525. #define zzTRACEdata     ANTLRChar *zzTracePrevRuleName;
  526. #endif
  527. #endif
  528. #ifndef zzTRACEIN
  529. #define zzTRACEIN(r) zzTracePrevRuleName=zzTraceCurrentRuleName;zzTraceIn(r);
  530. #endif
  531. #ifndef zzTRACEOUT
  532. #define zzTRACEOUT(r) zzTraceOut(r);zzTraceCurrentRuleName=zzTracePrevRuleName;
  533. #endif
  534. #ifdef ZZWCHAR_T
  535. #define zzchar_t wchar_t
  536. #else
  537. #define zzchar_t char
  538. #endif
  539. /* E x t e r n  D e f s */
  540. #ifdef __USE_PROTOS
  541. extern Attrib zzempty_attr();
  542. extern Attrib zzconstr_attr(int, char *);
  543. extern void zzsyn(char *, int, char *, SetWordType *, int, int, char *);
  544. extern int zzset_el(unsigned, SetWordType *);
  545. extern int zzset_deg(SetWordType *);
  546. extern void zzedecode(SetWordType *);
  547. extern void zzFAIL(int k, ...);
  548. extern void zzresynch(SetWordType *, SetWordType);
  549. extern void zzsave_antlr_state(zzantlr_state *);
  550. extern void zzrestore_antlr_state(zzantlr_state *);
  551. extern void zzfill_inf_look(void);
  552. extern void zzconsumeUntil(SetWordType *st);                         /* MR7 */
  553. extern void zzconsumeUntilToken(int t);                              /* MR7 */
  554. extern void zzTraceIn(char * ruleName);                              /* MR10 */
  555. extern void zzTraceOut(char * ruleName);                             /* MR10 */
  556. extern int  zzTraceOption(int delta);                                /* MR10 */
  557. extern int  zzTraceGuessOption(int delta);                           /* MR10 */
  558. extern void zzTraceReset();                                          /* MR10 */
  559. extern void zzTraceGuessFail();                                      /* MR10 */
  560. #ifdef EXCEPTION_HANDLING
  561. extern void zzdflthandlers(int, int *);
  562. #endif
  563. #else
  564. extern Attrib zzempty_attr();
  565. extern Attrib zzconstr_attr();
  566. extern void zzsyn();
  567. extern int zzset_el();
  568. extern int zzset_deg();
  569. extern void zzedecode();
  570. extern void zzFAIL();
  571. extern void zzresynch();
  572. extern void zzsave_antlr_state();
  573. extern void zzrestore_antlr_state();
  574. extern void zzfill_inf_look();
  575. extern void zzconsumeUntil();                                        /* MR7 */
  576. extern void zzconsumeUntilToken();                                   /* MR7 */
  577. extern void zzTraceIn();                                             /* MR10 */
  578. extern void zzTraceOut();                                            /* MR10 */
  579. extern int  zzTraceOption();                                         /* MR10 */
  580. extern int  zzTraceGuessOption();                                    /* MR10 */
  581. extern void zzTraceReset();                                          /* MR10 */
  582. extern void zzTraceGuessFail();                                      /* MR10 */
  583. #ifdef EXCEPTION_HANDLING
  584. extern void zzdflthandlers();
  585. #endif
  586. #endif
  587. /* G l o b a l  V a r i a b l e s */
  588. /* Define a parser; user should do a "#parser myname" in their grammar file */
  589. /*extern struct pccts_parser zzparser;*/
  590. extern char *zztokens[];
  591. #ifdef LL_K
  592. extern int zztokenLA[];
  593. extern char zztextLA[][ZZLEXBUFSIZE];
  594. extern int zzlap;
  595. extern int zzlabase;
  596. #else
  597. extern int zztoken;
  598. #endif
  599. extern char zzStackOvfMsg[];
  600. extern int zzasp;
  601. extern Attrib zzaStack[];
  602. #ifdef ZZINF_LOOK
  603. extern int *zzinf_tokens;
  604. extern char **zzinf_text;
  605. extern char *zzinf_text_buffer;
  606. extern int *zzinf_line;
  607. extern int zzinf_labase;
  608. extern int zzinf_last;
  609. #endif
  610. #ifdef DEMAND_LOOK
  611. extern int zzdirty;
  612. #endif
  613. #ifdef ZZCAN_GUESS
  614. extern int zzguessing;
  615. extern zzjmp_buf zzguess_start;
  616. #endif
  617. /* Define global veriables that refer to values exported by the scanner.
  618.  * These declarations duplicate those in dlgdef.h, but are needed
  619.  * if ANTLR is not to generate a .dlg file (-gx); PS, this is a hack.
  620.  */
  621. extern zzchar_t *zzlextext;     /* text of most recently matched token */
  622. extern int      zzbufsize;      /* how long zzlextext is */
  623. #endif