Check In tool source code based on Build tool project revision r1655.
git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@8964 6f19259b-4bc3-4df7-8a09-765794883524
This commit is contained in:
504
BaseTools/Source/C/VfrCompile/Pccts/h/dlgauto.h
Normal file
504
BaseTools/Source/C/VfrCompile/Pccts/h/dlgauto.h
Normal file
@@ -0,0 +1,504 @@
|
||||
/* dlgauto.h automaton
|
||||
*
|
||||
* 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.
|
||||
*
|
||||
* ANTLR 1.33
|
||||
* Will Cohen and Terence Parr
|
||||
* Parr Research Corporation
|
||||
* with Purdue University and AHPCRC, University of Minnesota
|
||||
* 1989-2000
|
||||
*/
|
||||
|
||||
#ifndef ZZDEFAUTO_H
|
||||
#define ZZDEFAUTO_H
|
||||
|
||||
/* 10-Apr-97 133MR1 Uses __USE_PROTOS show should #include pcctscfg.h */
|
||||
|
||||
#include "pcctscfg.h"
|
||||
|
||||
zzchar_t *zzlextext; /* text of most recently matched token */
|
||||
zzchar_t *zzbegexpr; /* beginning of last reg expr recogn. */
|
||||
zzchar_t *zzendexpr; /* beginning of last reg expr recogn. */
|
||||
int zzbufsize = 0; /* number of characters in zzlextext */ /* MR7 */
|
||||
int zzbegcol = 0; /* column that first character of token is in*/
|
||||
int zzendcol = 0; /* column that last character of token is in */
|
||||
int zzline = 1; /* line current token is on */
|
||||
int zzreal_line=1; /* line of 1st portion of token that is not skipped */
|
||||
int zzchar; /* character to determine next state */
|
||||
int zzbufovf; /* indicates that buffer too small for text */
|
||||
int zzcharfull = 0;
|
||||
static zzchar_t *zznextpos;/* points to next available position in zzlextext*/
|
||||
static int zzclass;
|
||||
|
||||
#ifdef __USE_PROTOS
|
||||
void zzerrstd(const char *);
|
||||
void (*zzerr)(const char *)=zzerrstd;/* pointer to error reporting function */
|
||||
extern int zzerr_in(void);
|
||||
static int (*zzfunc_in)(void) = zzerr_in; /* MR20 */
|
||||
#else
|
||||
void zzerrstd();
|
||||
void (*zzerr)()=zzerrstd; /* pointer to error reporting function */
|
||||
extern int zzerr_in();
|
||||
static int (*zzfunc_in)() = zzerr_in; /* MR20 */
|
||||
#endif
|
||||
|
||||
static FILE *zzstream_in=0;
|
||||
static zzchar_t *zzstr_in=0;
|
||||
|
||||
#ifdef USER_ZZMODE_STACK
|
||||
int zzauto = 0;
|
||||
#else
|
||||
static int zzauto = 0;
|
||||
#endif
|
||||
static int zzadd_erase;
|
||||
static char zzebuf[70];
|
||||
|
||||
#ifdef ZZCOL
|
||||
#define ZZINC (++zzendcol)
|
||||
#else
|
||||
#define ZZINC
|
||||
#endif
|
||||
|
||||
|
||||
#define ZZGETC_STREAM {zzchar = getc(zzstream_in); zzclass = ZZSHIFT(zzchar);}
|
||||
#define ZZGETC_FUNC {zzchar = (*zzfunc_in)(); zzclass = ZZSHIFT(zzchar);}
|
||||
#define ZZGETC_STR { \
|
||||
if (*zzstr_in){ \
|
||||
zzchar = *zzstr_in; \
|
||||
++zzstr_in; \
|
||||
}else{ \
|
||||
zzchar = EOF; \
|
||||
} \
|
||||
zzclass = ZZSHIFT(zzchar); \
|
||||
}
|
||||
|
||||
#define ZZNEWSTATE (newstate = dfa[state][zzclass])
|
||||
|
||||
#ifndef ZZCOPY
|
||||
#define ZZCOPY \
|
||||
/* Truncate matching buffer to size (not an error) */ \
|
||||
if (zznextpos < lastpos){ \
|
||||
*(zznextpos++) = zzchar; \
|
||||
}else{ \
|
||||
zzbufovf = 1; \
|
||||
}
|
||||
#endif
|
||||
|
||||
void
|
||||
#ifdef __USE_PROTOS
|
||||
zzrdstream( FILE *f )
|
||||
#else
|
||||
zzrdstream( f )
|
||||
FILE *f;
|
||||
#endif
|
||||
{
|
||||
/* make sure that it is really set to something, otherwise just
|
||||
leave it be.
|
||||
*/
|
||||
if (f){
|
||||
/* make sure that there is always someplace to get input
|
||||
before closing zzstream_in
|
||||
*/
|
||||
#if 0
|
||||
if (zzstream_in && zzstream_in!=stdin) fclose( zzstream_in );
|
||||
#endif
|
||||
zzline = 1;
|
||||
zzstream_in = f;
|
||||
zzfunc_in = NULL;
|
||||
zzstr_in = 0;
|
||||
zzcharfull = 0;
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
#ifdef __USE_PROTOS
|
||||
zzrdfunc( int (*f)(void) )
|
||||
#else
|
||||
zzrdfunc( f )
|
||||
int (*f)();
|
||||
#endif
|
||||
{
|
||||
/* make sure that it is really set to something, otherwise just
|
||||
leave it be.
|
||||
*/
|
||||
if (f){
|
||||
/* make sure that there is always someplace to get input
|
||||
before closing zzstream_in
|
||||
*/
|
||||
#if 0
|
||||
if (zzstream_in && zzstream_in!=stdin) fclose( zzstream_in );
|
||||
#endif
|
||||
zzline = 1;
|
||||
zzstream_in = NULL;
|
||||
zzfunc_in = f;
|
||||
zzstr_in = 0;
|
||||
zzcharfull = 0;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
#ifdef __USE_PROTOS
|
||||
zzrdstr( zzchar_t *s )
|
||||
#else
|
||||
zzrdstr( s )
|
||||
zzchar_t *s;
|
||||
#endif
|
||||
{
|
||||
/* make sure that it is really set to something, otherwise just
|
||||
leave it be.
|
||||
*/
|
||||
if (s){
|
||||
/* make sure that there is always someplace to get input
|
||||
before closing zzstream_in
|
||||
*/
|
||||
#if 0
|
||||
if (zzstream_in && zzstream_in!=stdin) fclose( zzstream_in );
|
||||
#endif
|
||||
zzline = 1;
|
||||
zzstream_in = NULL;
|
||||
zzfunc_in = 0;
|
||||
zzstr_in = s;
|
||||
zzcharfull = 0;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
#ifdef __USE_PROTOS
|
||||
void zzclose_stream(void)
|
||||
#else
|
||||
void zzclose_stream()
|
||||
#endif
|
||||
{
|
||||
#if 0
|
||||
fclose( zzstream_in );
|
||||
zzstream_in = NULL;
|
||||
zzfunc_in = NULL;
|
||||
#endif
|
||||
}
|
||||
|
||||
/* saves dlg state, but not what feeds dlg (such as file position) */
|
||||
void
|
||||
#ifdef __USE_PROTOS
|
||||
zzsave_dlg_state(struct zzdlg_state *state)
|
||||
#else
|
||||
zzsave_dlg_state(state)
|
||||
struct zzdlg_state *state;
|
||||
#endif
|
||||
{
|
||||
state->stream = zzstream_in;
|
||||
state->func_ptr = zzfunc_in;
|
||||
state->str = zzstr_in;
|
||||
state->auto_num = zzauto;
|
||||
state->add_erase = zzadd_erase;
|
||||
state->lookc = zzchar;
|
||||
state->char_full = zzcharfull;
|
||||
state->begcol = zzbegcol;
|
||||
state->endcol = zzendcol;
|
||||
state->line = zzline;
|
||||
state->lextext = zzlextext;
|
||||
state->begexpr = zzbegexpr;
|
||||
state->endexpr = zzendexpr;
|
||||
state->bufsize = zzbufsize;
|
||||
state->bufovf = zzbufovf;
|
||||
state->nextpos = zznextpos;
|
||||
state->class_num = zzclass;
|
||||
}
|
||||
|
||||
void
|
||||
#ifdef __USE_PROTOS
|
||||
zzrestore_dlg_state(struct zzdlg_state *state)
|
||||
#else
|
||||
zzrestore_dlg_state(state)
|
||||
struct zzdlg_state *state;
|
||||
#endif
|
||||
{
|
||||
zzstream_in = state->stream;
|
||||
zzfunc_in = state->func_ptr;
|
||||
zzstr_in = state->str;
|
||||
zzauto = state->auto_num;
|
||||
zzadd_erase = state->add_erase;
|
||||
zzchar = state->lookc;
|
||||
zzcharfull = state->char_full;
|
||||
zzbegcol = state->begcol;
|
||||
zzendcol = state->endcol;
|
||||
zzline = state->line;
|
||||
zzlextext = state->lextext;
|
||||
zzbegexpr = state->begexpr;
|
||||
zzendexpr = state->endexpr;
|
||||
zzbufsize = state->bufsize;
|
||||
zzbufovf = state->bufovf;
|
||||
zznextpos = state->nextpos;
|
||||
zzclass = state->class_num;
|
||||
}
|
||||
|
||||
void
|
||||
#ifdef __USE_PROTOS
|
||||
zzmode( int m )
|
||||
#else
|
||||
zzmode( m )
|
||||
int m;
|
||||
#endif
|
||||
{
|
||||
/* points to base of dfa table */
|
||||
if (m<MAX_MODE){
|
||||
zzauto = m;
|
||||
/* have to redo class since using different compression */
|
||||
zzclass = ZZSHIFT(zzchar);
|
||||
}else{
|
||||
sprintf(zzebuf,"Invalid automaton mode = %d ",m);
|
||||
zzerr(zzebuf);
|
||||
}
|
||||
}
|
||||
|
||||
/* erase what is currently in the buffer, and get a new reg. expr */
|
||||
|
||||
#ifdef __USE_PROTOS
|
||||
void zzskip(void)
|
||||
#else
|
||||
void zzskip()
|
||||
#endif
|
||||
{
|
||||
zzadd_erase = 1;
|
||||
}
|
||||
|
||||
/* don't erase what is in the zzlextext buffer, add on to it */
|
||||
#ifdef __USE_PROTOS
|
||||
void zzmore()
|
||||
#else
|
||||
void zzmore()
|
||||
#endif
|
||||
{
|
||||
zzadd_erase = 2;
|
||||
}
|
||||
|
||||
/* substitute c for the reg. expr last matched and is in the buffer */
|
||||
#ifdef __USE_PROTOS
|
||||
void
|
||||
zzreplchar(zzchar_t c)
|
||||
#else
|
||||
void
|
||||
zzreplchar(c)
|
||||
zzchar_t c;
|
||||
#endif
|
||||
{
|
||||
/* can't allow overwriting null at end of string */
|
||||
if (zzbegexpr < &zzlextext[zzbufsize-1]){
|
||||
*zzbegexpr = c;
|
||||
*(zzbegexpr+1) = '\0';
|
||||
}
|
||||
zzendexpr = zzbegexpr;
|
||||
if (c != '\0') {
|
||||
zznextpos = zzbegexpr + 1;
|
||||
}
|
||||
else {
|
||||
zznextpos = zzbegexpr; /* MR30 Zero terminates string. */
|
||||
}
|
||||
}
|
||||
|
||||
/* replace the string s for the reg. expr last matched and in the buffer */
|
||||
void
|
||||
#ifdef __USE_PROTOS
|
||||
zzreplstr(register zzchar_t *s)
|
||||
#else
|
||||
zzreplstr(s)
|
||||
register zzchar_t *s;
|
||||
#endif
|
||||
{
|
||||
register zzchar_t *l= &zzlextext[zzbufsize -1];
|
||||
|
||||
zznextpos = zzbegexpr;
|
||||
if (s){
|
||||
while ((zznextpos <= l) && (*(zznextpos++) = *(s++))!=0){
|
||||
/* empty */
|
||||
}
|
||||
/* correct for NULL at end of string */
|
||||
zznextpos--;
|
||||
}
|
||||
if ((zznextpos <= l) && (*(--s) == 0)){
|
||||
zzbufovf = 0;
|
||||
}else{
|
||||
zzbufovf = 1;
|
||||
}
|
||||
*(zznextpos) = '\0';
|
||||
zzendexpr = zznextpos - 1;
|
||||
}
|
||||
|
||||
#ifdef __USE_PROTOS
|
||||
void zzgettok(void)
|
||||
#else
|
||||
void zzgettok()
|
||||
#endif
|
||||
{
|
||||
register int state, newstate;
|
||||
/* last space reserved for the null char */
|
||||
zzchar_t *lastpos; /* MR27 Remove register since address operator used. */
|
||||
|
||||
skip:
|
||||
zzreal_line = zzline;
|
||||
zzbufovf = 0;
|
||||
lastpos = &zzlextext[zzbufsize-1];
|
||||
zznextpos = zzlextext;
|
||||
zzbegcol = zzendcol+1;
|
||||
more:
|
||||
zzbegexpr = zznextpos;
|
||||
#ifdef ZZINTERACTIVE
|
||||
/* interactive version of automaton */
|
||||
/* if there is something in zzchar, process it */
|
||||
state = newstate = dfa_base[zzauto];
|
||||
if (zzcharfull){
|
||||
ZZINC;
|
||||
ZZCOPY;
|
||||
ZZNEWSTATE;
|
||||
}
|
||||
if (zzstr_in)
|
||||
while (zzalternatives[newstate]){
|
||||
state = newstate;
|
||||
ZZGETC_STR;
|
||||
ZZINC;
|
||||
ZZCOPY;
|
||||
ZZNEWSTATE;
|
||||
}
|
||||
else if (zzstream_in)
|
||||
while (zzalternatives[newstate]){
|
||||
state = newstate;
|
||||
ZZGETC_STREAM;
|
||||
ZZINC;
|
||||
ZZCOPY;
|
||||
ZZNEWSTATE;
|
||||
}
|
||||
else if (zzfunc_in)
|
||||
while (zzalternatives[newstate]){
|
||||
state = newstate;
|
||||
ZZGETC_FUNC;
|
||||
ZZINC;
|
||||
ZZCOPY;
|
||||
ZZNEWSTATE;
|
||||
}
|
||||
/* figure out if last character really part of token */
|
||||
if ((state != dfa_base[zzauto]) && (newstate == DfaStates)){
|
||||
zzcharfull = 1;
|
||||
--zznextpos;
|
||||
}else{
|
||||
zzcharfull = 0;
|
||||
state = newstate;
|
||||
}
|
||||
*(zznextpos) = '\0';
|
||||
/* Able to transition out of start state to some non err state?*/
|
||||
if ( state == dfa_base[zzauto] ){
|
||||
/* make sure doesn't get stuck */
|
||||
zzadvance();
|
||||
}
|
||||
#else
|
||||
/* non-interactive version of automaton */
|
||||
if (!zzcharfull)
|
||||
zzadvance();
|
||||
else
|
||||
ZZINC;
|
||||
state = dfa_base[zzauto];
|
||||
if (zzstr_in)
|
||||
while (ZZNEWSTATE != DfaStates){
|
||||
state = newstate;
|
||||
ZZCOPY;
|
||||
ZZGETC_STR;
|
||||
ZZINC;
|
||||
}
|
||||
else if (zzstream_in)
|
||||
while (ZZNEWSTATE != DfaStates){
|
||||
state = newstate;
|
||||
ZZCOPY;
|
||||
ZZGETC_STREAM;
|
||||
ZZINC;
|
||||
}
|
||||
else if (zzfunc_in)
|
||||
while (ZZNEWSTATE != DfaStates){
|
||||
state = newstate;
|
||||
ZZCOPY;
|
||||
ZZGETC_FUNC;
|
||||
ZZINC;
|
||||
}
|
||||
zzcharfull = 1;
|
||||
if ( state == dfa_base[zzauto] ){
|
||||
if (zznextpos < lastpos){
|
||||
*(zznextpos++) = zzchar;
|
||||
}else{
|
||||
zzbufovf = 1;
|
||||
}
|
||||
*zznextpos = '\0';
|
||||
/* make sure doesn't get stuck */
|
||||
zzadvance();
|
||||
}else{
|
||||
*zznextpos = '\0';
|
||||
}
|
||||
#endif
|
||||
#ifdef ZZCOL
|
||||
zzendcol -= zzcharfull;
|
||||
#endif
|
||||
zzendexpr = zznextpos -1;
|
||||
zzadd_erase = 0;
|
||||
(*actions[accepts[state]])();
|
||||
switch (zzadd_erase) {
|
||||
case 1: goto skip;
|
||||
case 2: goto more;
|
||||
}
|
||||
}
|
||||
|
||||
#ifdef __USE_PROTOS
|
||||
void zzadvance(void)
|
||||
#else
|
||||
void zzadvance()
|
||||
#endif
|
||||
{
|
||||
if (zzstream_in) { ZZGETC_STREAM; zzcharfull = 1; ZZINC;}
|
||||
if (zzfunc_in) { ZZGETC_FUNC; zzcharfull = 1; ZZINC;}
|
||||
if (zzstr_in) { ZZGETC_STR; zzcharfull = 1; ZZINC;}
|
||||
if (!(zzstream_in || zzfunc_in || zzstr_in)){
|
||||
zzerr_in();
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
#ifdef __USE_PROTOS
|
||||
zzerrstd(const char *s)
|
||||
#else
|
||||
zzerrstd(s)
|
||||
char *s;
|
||||
#endif
|
||||
{
|
||||
zzLexErrCount++; /* MR11 */
|
||||
fprintf(stderr,
|
||||
"%s near line %d (text was '%s')\n",
|
||||
((s == NULL) ? "Lexical error" : s),
|
||||
zzline,zzlextext);
|
||||
}
|
||||
|
||||
#ifdef __USE_PROTOS
|
||||
int zzerr_in(void)
|
||||
#else
|
||||
int zzerr_in()
|
||||
#endif
|
||||
{
|
||||
fprintf(stderr,"No input stream, function, or string\n");
|
||||
/* return eof to get out gracefully */
|
||||
return EOF;
|
||||
}
|
||||
|
||||
#endif
|
Reference in New Issue
Block a user