err.h
来自「EFI BIOS是Intel提出的下一代的BIOS标准。这里上传的Edk源代码是」· C头文件 代码 · 共 1,169 行 · 第 1/2 页
H
1,169 行
/*
* err.h
*
* Standard error handling mechanism
*
* SOFTWARE RIGHTS
*
* We reserve no LEGAL rights to the Purdue Compiler Construction Tool
* Set (PCCTS) -- PCCTS is in the public domain. An individual or
* company may do whatever they wish with source code distributed with
* PCCTS or the code generated by PCCTS, including the incorporation of
* PCCTS, or its output, into commerical software.
*
* We encourage users to develop software with PCCTS. However, we do ask
* that credit is given to us for developing PCCTS. By "credit",
* we mean that if you incorporate our source code into one of your
* programs (commercial product, research project, or otherwise) that you
* acknowledge this fact somewhere in the documentation, research report,
* etc... If you like PCCTS and have developed a nice tool with the
* output, please mention that you developed it using PCCTS. In
* addition, we ask that this header remain intact in our source code.
* As long as these guidelines are kept, we expect to continue enhancing
* this system and expect to make other tools available as they are
* completed.
*
* Has grown to hold all kinds of stuff (err.h is increasingly misnamed)
*
* ANTLR 1.33
* Terence Parr
* Parr Research Corporation
* with Purdue University and AHPCRC, University of Minnesota
* 1989-1998
*/
#ifndef ERR_H
#define ERR_H
#include "pcctscfg.h"
#include <stdlib.h>
#include <assert.h>
/* */
/* 7-Apr-97 133MR1 */
/* Proper choice of STDC and cplusplus pre-processor symbols (?) */
/* */
#include "pccts_string.h"
#ifdef PCCTS_USE_STDARG
#include "pccts_stdarg.h"
#else
#include <varargs.h>
#endif
#ifdef DUM
/* Define usable bits per unsigned int word (used for set stuff) */
#ifdef PC
#define BSETWORDSIZE 16
#define BSETLOGWORDSIZE 4
#else
#define BSETWORDSIZE 32
#define BSETLOGWORDSIZE 5
#endif
#endif
#define BSETWORDSIZE 8
#define BSETLOGWORDSIZE 3 /* SetWordType is 8bits */
#define BSETMODWORD(x) ((x) & (BSETWORDSIZE-1)) /* x % BSETWORDSIZE */
#define BSETDIVWORD(x) ((x) >> BSETLOGWORDSIZE) /* x / BSETWORDSIZE */
/* This is not put into the global pccts_parser structure because it is
* hidden and does not need to be saved during a "save state" operation
*/
/* maximum of 32 bits/unsigned int and must be 8 bits/byte */
static SetWordType bitmask[] = {
0x00000001, 0x00000002, 0x00000004, 0x00000008,
0x00000010, 0x00000020, 0x00000040, 0x00000080
};
#ifdef zzTRACE_RULES
int zzTraceOptionValueDefault=1;
int zzTraceOptionValue=1;
int zzTraceGuessOptionValue=1;
char *zzTraceCurrentRuleName=NULL;
int zzTraceDepth=0;
#endif
int zzGuessSeq=0; /* MR10 */
int zzSyntaxErrCount=0; /* MR11 */
int zzLexErrCount=0; /* MR11 */
void
#ifdef __USE_PROTOS
zzresynch(SetWordType *wd,SetWordType mask)
#else
zzresynch(wd,mask)
SetWordType *wd, mask;
#endif
{
static int consumed = 1;
/* if you enter here without having consumed a token from last resynch
* force a token consumption.
*/
if ( !consumed ) {zzCONSUME; consumed=1; return;} /* MR10 */
/* if current token is in resynch set, we've got what we wanted */
if ( wd[LA(1)]&mask || LA(1) == zzEOF_TOKEN ) {consumed=0; return;}
/* scan until we find something in the resynch set */
while ( !(wd[LA(1)]&mask) && LA(1) != zzEOF_TOKEN ) {zzCONSUME;}
consumed=1;
}
/* */
/* 7-Apr-97 133MR1 for C++ and MR7 for C */
/* Change suggested by Eli Sternheim (eli@interhdl.com) */
/* */
void
#ifdef __USE_PROTOS
zzconsumeUntil(SetWordType *st)
#else
zzconsumeUntil(st)
SetWordType *st;
#endif
{
int tmp; /* MR7 */
while ( !zzset_el( (tmp=LA(1)), st) && tmp!=1 /* Eof */) { /* MR7 */
zzCONSUME; } /* MR7 */
}
/* */
/* 7-Apr-97 133MR1 for C++ and MR7 for C */
/* Change suggested by Eli Sternheim (eli@interhdl.com) */
/* */
void
#ifdef __USE_PROTOS
zzconsumeUntilToken(int t)
#else
zzconsumeUntilToken(t)
int t;
#endif
{
int tmp; /* MR7 */
while ( (tmp=LA(1)) !=t && tmp!=1 /* Eof */) { zzCONSUME; } /* MR7 */
}
/* input looks like:
* zzFAIL(k, e1, e2, ...,&zzMissSet,&zzMissText,&zzBadTok,&zzBadText)
* where the zzMiss stuff is set here to the token that did not match
* (and which set wasn't it a member of).
*/
#ifdef PCCTS_USE_STDARG
void zzFAIL(int k, ...)
#else
void zzFAIL(va_alist)
va_dcl
#endif
{
#ifdef LL_K
static char text[LL_K*ZZLEXBUFSIZE+1];
SetWordType *f[LL_K];
#else
static char text[ZZLEXBUFSIZE+1];
SetWordType *f[1];
#endif
SetWordType **miss_set;
char **miss_text;
int *bad_tok;
char **bad_text;
int *err_k;
int i;
va_list ap;
#ifndef PCCTS_USE_STDARG /* MR20 */
int k;
#endif
#ifdef PCCTS_USE_STDARG /* MR20 */
va_start(ap, k);
#else
va_start(ap);
k = va_arg(ap, int); /* how many lookahead sets? */
#endif
assert(k <= sizeof(f)/sizeof(f[0])); /* MR20 G. Hobbelt */
text[0] = '\0';
for (i=1; i<=k; i++) /* collect all lookahead sets */
{
f[i-1] = va_arg(ap, SetWordType *);
}
for (i=1; i<=k; i++) /* look for offending token */
{
if ( i>1 ) strcat(text, " ");
strcat(text, LATEXT(i));
if ( !zzset_el((unsigned)LA(i), f[i-1]) ) break;
}
miss_set = va_arg(ap, SetWordType **);
miss_text = va_arg(ap, char **);
bad_tok = va_arg(ap, int *);
bad_text = va_arg(ap, char **);
err_k = va_arg(ap, int *);
if ( i>k )
{
/* bad; lookahead is permutation that cannot be matched,
* but, the ith token of lookahead is valid at the ith position
* (The old LL sub 1 (k) versus LL(k) parsing technique)
*/
*miss_set = NULL;
*miss_text = zzlextext;
*bad_tok = LA(1);
*bad_text = LATEXT(1);
*err_k = k;
return;
}
/* fprintf(stderr, "%s not in %dth set\n", zztokens[LA(i)], i);*/
*miss_set = f[i-1];
*miss_text = text;
*bad_tok = LA(i);
*bad_text = LATEXT(i);
if ( i==1 ) *err_k = 1;
else *err_k = k;
}
#ifdef __USE_PROTOS
void zzTraceGuessDone(zzantlr_state *state)
#else
void zzTraceGuessDone(state)
zzantlr_state *state;
#endif
{
#ifdef zzTRACE_RULES
#ifdef ZZCAN_GUESS
int doIt=0;
if (zzTraceCurrentRuleName == NULL) return;
if (zzTraceOptionValue <= 0) {
doIt=0;
} else if (zzTraceGuessOptionValue <= 0) {
doIt=0;
} else {
doIt=1;
};
if (doIt) {
fprintf(stderr,"guess done - returning to rule %s {\"%s\"} at depth %d",
state->traceCurrentRuleName,
LATEXT(1),
state->traceDepth);
if (state->guessing != 0) {
fprintf(stderr," (guess mode continues - an enclosing guess is still active)");
} else {
fprintf(stderr," (guess mode ends)");
};
fprintf(stderr,"\n");
};
#endif
#endif
}
void
#ifdef __USE_PROTOS
zzsave_antlr_state(zzantlr_state *buf)
#else
zzsave_antlr_state(buf)
zzantlr_state *buf;
#endif
{
#ifdef LL_K
int i;
#endif
#ifdef ZZCAN_GUESS
buf->guess_start = zzguess_start;
buf->guessing = zzguessing;
#endif
buf->asp = zzasp;
#ifdef GENAST
buf->ast_sp = zzast_sp;
#endif
#ifdef ZZINF_LOOK
buf->inf_labase = zzinf_labase;
buf->inf_last = zzinf_last;
/* MR6 Gunnar Rxnning (gunnar@candleweb.no) */
/* MR6 Additional state needs to be saved/restored */
buf->inf_tokens = zzinf_tokens; /* MR6 */
buf->inf_text = zzinf_text; /* MR6 */
buf->inf_text_buffer = zzinf_text_buffer; /* MR6 */
buf->inf_line = zzinf_line; /* MR6 */
#endif
#ifdef DEMAND_LOOK
buf->dirty = zzdirty;
#endif
#ifdef LL_K
for (i=0; i<LL_K; i++) buf->tokenLA[i] = zztokenLA[i];
for (i=0; i<LL_K; i++) strcpy(buf->textLA[i], zztextLA[i]);
buf->lap = zzlap;
buf->labase = zzlabase;
#else
buf->token = zztoken;
strcpy(buf->text, zzlextext);
#endif
#ifdef zzTRACE_RULES
/* MR10 */
buf->traceOptionValue=zzTraceOptionValue;
buf->traceGuessOptionValue=zzTraceGuessOptionValue;
buf->traceCurrentRuleName=zzTraceCurrentRuleName;
buf->traceDepth=zzTraceDepth;
#endif
}
void
#ifdef __USE_PROTOS
zzrestore_antlr_state(zzantlr_state *buf)
#else
zzrestore_antlr_state(buf)
zzantlr_state *buf;
#endif
{
#ifdef zzTRACE_RULES
int prevTraceOptionValue;
#endif
#ifdef LL_K
int i;
#endif
#ifdef ZZCAN_GUESS
zzguess_start = buf->guess_start;
zzguessing = buf->guessing;
#endif
zzasp = buf->asp;
#ifdef GENAST
zzast_sp = buf->ast_sp;
#endif
#ifdef ZZINF_LOOK
zzinf_labase = buf->inf_labase;
zzinf_last = buf->inf_last;
/* MR6 Gunnar Rxnning (gunnar@candleweb.no) */
/* MR6 Additional state needs to be saved/restored */
zzinf_tokens = buf->inf_tokens; /* MR6 */
zzinf_text = buf->inf_text; /* MR6 */
zzinf_text_buffer = buf->inf_text_buffer; /* MR6 */
zzinf_line = buf->inf_line; /* MR6 */
#endif
#ifdef DEMAND_LOOK
zzdirty = buf->dirty;
#endif
#ifdef LL_K
for (i=0; i<LL_K; i++) zztokenLA[i] = buf->tokenLA[i];
for (i=0; i<LL_K; i++) strcpy(zztextLA[i], buf->textLA[i]);
zzlap = buf->lap;
zzlabase = buf->labase;
#else
zztoken = buf->token;
strcpy(zzlextext, buf->text);
#endif
#ifdef zzTRACE_RULES
prevTraceOptionValue=zzTraceOptionValue;
zzTraceOptionValue=buf->traceOptionValue;
if ( (prevTraceOptionValue > 0) !=
(zzTraceOptionValue > 0)) {
if (zzTraceOptionValue > 0) {
fprintf(stderr,"trace enable restored in rule %s depth %d\n",
zzTraceCurrentRuleName,zzTraceDepth);
};
if (zzTraceOptionValue <= 0) {
fprintf(stderr,"trace disable restored in rule %s depth %d\n",
zzTraceCurrentRuleName,zzTraceDepth);
};
};
zzTraceOptionValue=buf->traceOptionValue; /* MR10 */
zzTraceGuessOptionValue=buf->traceGuessOptionValue; /* MR10 */
zzTraceCurrentRuleName=buf->traceCurrentRuleName; /* MR10 */
zzTraceDepth=buf->traceDepth; /* MR10 */
zzTraceGuessDone(buf); /* MR10 */
#endif
}
void
#ifdef __USE_PROTOS
zzedecode(SetWordType *a)
#else
zzedecode(a)
SetWordType *a;
#endif
{
register SetWordType *p = a;
register SetWordType *endp = &(p[zzSET_SIZE]);
register unsigned e = 0;
if ( zzset_deg(a)>1 ) fprintf(stderr, " {");
do {
register SetWordType t = *p;
register SetWordType *b = &(bitmask[0]);
do {
if ( t & *b ) fprintf(stderr, " %s", zztokens[e]);
e++;
} while (++b < &(bitmask[sizeof(SetWordType)*8]));
} while (++p < endp);
if ( zzset_deg(a)>1 ) fprintf(stderr, " }");
}
#ifndef USER_ZZSYN
/* standard error reporting function */
void
#ifdef __USE_PROTOS
zzsyn(char *text, int tok, char *egroup, SetWordType *eset, int etok, int k, char *bad_text)
#else
zzsyn(text, tok, egroup, eset, etok, k, bad_text)
char *text, *egroup, *bad_text;
int tok;
int etok;
int k;
SetWordType *eset;
#endif
{
zzSyntaxErrCount++; /* MR11 */
fprintf(stderr, "line %d: syntax error at \"%s\"", zzline, (tok==zzEOF_TOKEN)?"EOF":bad_text);
if ( !etok && !eset ) {fprintf(stderr, "\n"); return;}
if ( k==1 ) fprintf(stderr, " missing");
else
{
fprintf(stderr, "; \"%s\" not", bad_text);
if ( zzset_deg(eset)>1 ) fprintf(stderr, " in");
}
if ( zzset_deg(eset)>0 ) zzedecode(eset);
else fprintf(stderr, " %s", zztokens[etok]);
if ( strlen(egroup) > 0 ) fprintf(stderr, " in %s", egroup);
fprintf(stderr, "\n");
}
#endif
/* is b an element of set p? */
int
#ifdef __USE_PROTOS
zzset_el(unsigned b, SetWordType *p)
#else
zzset_el(b,p)
unsigned b;
SetWordType *p;
#endif
{
return( p[BSETDIVWORD(b)] & bitmask[BSETMODWORD(b)] );
}
int
#ifdef __USE_PROTOS
zzset_deg(SetWordType *a)
#else
zzset_deg(a)
SetWordType *a;
#endif
{
/* Fast compute degree of a set... the number
of elements present in the set. Assumes
that all word bits are used in the set
*/
register SetWordType *p = a;
register SetWordType *endp = &(a[zzSET_SIZE]);
register int degree = 0;
if ( a == NULL ) return 0;
while ( p < endp )
{
register SetWordType t = *p;
register SetWordType *b = &(bitmask[0]);
do {
if (t & *b) ++degree;
} while (++b < &(bitmask[sizeof(SetWordType)*8]));
p++;
}
return(degree);
}
#ifdef DEMAND_LOOK
#ifdef LL_K
int
#ifdef __USE_PROTOS
_zzmatch(int _t, char **zzBadText, char **zzMissText,
int *zzMissTok, int *zzBadTok,
SetWordType **zzMissSet)
#else
_zzmatch(_t, zzBadText, zzMissText, zzMissTok, zzBadTok, zzMissSet)
int _t;
char **zzBadText;
char **zzMissText;
int *zzMissTok, *zzBadTok;
SetWordType **zzMissSet;
#endif
{
if ( zzdirty==LL_K ) {
zzCONSUME;
}
if ( LA(1)!=_t ) {
*zzBadText = *zzMissText=LATEXT(1);
*zzMissTok= _t; *zzBadTok=LA(1);
*zzMissSet=NULL;
return 0;
}
zzMakeAttr
zzdirty++;
zzlabase++;
return 1;
}
int
#ifdef __USE_PROTOS
_zzmatch_wsig(int _t)
#else
_zzmatch_wsig(_t)
int _t;
#endif
{
if ( zzdirty==LL_K ) {
zzCONSUME;
}
if ( LA(1)!=_t ) {
return 0;
}
zzMakeAttr
zzdirty++;
zzlabase++;
return 1;
}
#else
int
#ifdef __USE_PROTOS
_zzmatch(int _t, char **zzBadText, char **zzMissText,
int *zzMissTok, int *zzBadTok, SetWordType **zzMissSet)
#else
_zzmatch(_t, zzBadText, zzMissText, zzMissTok, zzBadTok, zzMissSet)
int _t;
char **zzBadText;
char **zzMissText;
int *zzMissTok, *zzBadTok;
SetWordType **zzMissSet;
#endif
{
if ( zzdirty ) {zzCONSUME;}
if ( LA(1)!=_t ) {
*zzBadText = *zzMissText=LATEXT(1);
*zzMissTok= _t; *zzBadTok=LA(1);
*zzMissSet=NULL;
return 0;
}
zzdirty = 1;
zzMakeAttr
return 1;
}
int
#ifdef __USE_PROTOS
_zzmatch_wsig(int _t)
#else
_zzmatch_wsig(_t)
int _t;
#endif
{
if ( zzdirty ) {zzCONSUME;}
if ( LA(1)!=_t ) {
return 0;
}
zzdirty = 1;
zzMakeAttr
return 1;
}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?