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:
484
BaseTools/Source/C/VfrCompile/Pccts/antlr/globals.c
Normal file
484
BaseTools/Source/C/VfrCompile/Pccts/antlr/globals.c
Normal file
@@ -0,0 +1,484 @@
|
||||
/*
|
||||
* globals.c -- File containing all variables/tables visible to all files.
|
||||
*
|
||||
* 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
|
||||
* Terence Parr
|
||||
* Parr Research Corporation
|
||||
* with Purdue University and AHPCRC, University of Minnesota
|
||||
* 1989-2001
|
||||
*/
|
||||
|
||||
#include <stdio.h>
|
||||
|
||||
#include "pcctscfg.h"
|
||||
|
||||
#include "set.h"
|
||||
#include "syn.h"
|
||||
#include "hash.h"
|
||||
#include "generic.h"
|
||||
|
||||
char Version[] = "1.33MR33" ; /* PCCTS version number */ /* MRXXX */
|
||||
char VersionDef[] = "13333"; /* same (except int equiv for preproc symbol) */ /* MRXXX */
|
||||
|
||||
char LexStartSymbol[] = "START";/* Name of starting lexical class/automaton */
|
||||
char *RemapFileName = "remap.h";
|
||||
char *DlgFileName = "parser.dlg";
|
||||
char *DefFileName = "tokens.h";
|
||||
char *ErrFileName = "err.c";
|
||||
char *ModeFileName = "mode.h";
|
||||
char *StdMsgName = NULL;
|
||||
|
||||
char *ParserName = DefaultParserName;
|
||||
|
||||
/* list of PCCTS supplied support symbols; these are renamed when more than
|
||||
* one ANTLR-generated parsers are linked together to avoid name conflicts.
|
||||
* Can't use '##' ANSIC preprocessor concat operator with K&R and:
|
||||
* #define zzskip zzparser ## skip
|
||||
* will not work for ANSI/C++ as 'zzparserskip' is created w/o zzparser
|
||||
* being substituted--ack!!!
|
||||
*/
|
||||
char *StandardSymbols[] = {
|
||||
/* ANTLR stuff */
|
||||
"zzStackOvfMsg",
|
||||
"zzasp",
|
||||
"zzaStack",
|
||||
"inf_tokens",
|
||||
"inf_text",
|
||||
"inf_text_buffer",
|
||||
"inf_text_buffer_ptr",
|
||||
"inf_text_buffer_size",
|
||||
"inf_labase",
|
||||
"inf_last",
|
||||
"inf_lap",
|
||||
"zztokenLA",
|
||||
"zztextLA",
|
||||
"zzlap",
|
||||
"zzlabase",
|
||||
"zztoktext",
|
||||
"zztoken",
|
||||
"zzdirty",
|
||||
"zzguessing",
|
||||
"zzguess_start",
|
||||
"zzresynch",
|
||||
"zzinf_tokens",
|
||||
"zzinf_text",
|
||||
"zzinf_text_buffer",
|
||||
"zzinf_labase",
|
||||
"zzinf_last",
|
||||
"zzfill_inf_look",
|
||||
"zzFAIL",
|
||||
"zzsave_antlr_state",
|
||||
"zzrestore_antlr_state",
|
||||
"zzsyn",
|
||||
"zzset_el",
|
||||
"zzset_deg",
|
||||
"zzedecode",
|
||||
"_zzsetmatch",
|
||||
"_zzmatch",
|
||||
"_inf_zzgettok",
|
||||
"zzconsumeUntil",
|
||||
"zzconsumeUntilToken",
|
||||
"_zzmatch_wsig",
|
||||
"_zzsetmatch_wsig",
|
||||
"_zzmatch_wdfltsig",
|
||||
"_zzsetmatch_wdfltsig",
|
||||
"zzdflthandlers",
|
||||
/* DLG stuff */
|
||||
"zzreal_line",
|
||||
"zzcharfull",
|
||||
"zzerr",
|
||||
"zzlextext",
|
||||
"zzbegexpr",
|
||||
"zzendexpr",
|
||||
"zzbufsize",
|
||||
"zzbegcol",
|
||||
"zzendcol",
|
||||
"zzline",
|
||||
"zzchar",
|
||||
"zzbufovf",
|
||||
"zzrdstream",
|
||||
"zzrdfunc",
|
||||
"zzrdstr",
|
||||
"zzclose_stream",
|
||||
"zzsave_dlg_state",
|
||||
"zzrestore_dlg_state",
|
||||
"zzmode",
|
||||
"zzskip",
|
||||
"zzmore",
|
||||
"zzreplchar",
|
||||
"zzreplstr",
|
||||
"zzgettok",
|
||||
"zzadvance",
|
||||
"zzerrstd",
|
||||
"zzerr_in",
|
||||
"zzconstr_attr",
|
||||
"zzempty_attr",
|
||||
"zzerraction",
|
||||
"zztokens", /* list of token regular expressions */
|
||||
"dfa",
|
||||
"accepts",
|
||||
"actions",
|
||||
"zzTraceOptionValue", /* MR10 */
|
||||
"zzTraceGuessOptionValue", /* MR10 */
|
||||
"zzTraceCurrentRuleName", /* MR10 */
|
||||
"zzTraceDepth", /* MR10 */
|
||||
"zzGuessSeq", /* MR10 */
|
||||
"zzSyntaxErrCount", /* MR11 */
|
||||
"zzLexErrCount", /* MR11 */
|
||||
"zzTraceGuessDone", /* MR13 - BJS */
|
||||
"zzTraceGuessFail", /* MR13 - BJS */
|
||||
"zzTraceGuessOption", /* MR13 - BJS */
|
||||
"zzTraceIn", /* MR13 - BJS */
|
||||
"zzTraceOption", /* MR13 - BJS */
|
||||
"zzTraceOut", /* MR13 - BJS */
|
||||
"zzTraceReset", /* MR13 - BJS */
|
||||
NULL /* must be present */
|
||||
};
|
||||
|
||||
/* list of PCCTS supplied support functions; these are renamed when more than
|
||||
* one ANTLR-generated parsers are linked together to avoid name conflicts.
|
||||
*/
|
||||
char *ASTSymbols[] = {
|
||||
"AST",
|
||||
"zzast_sp",
|
||||
"zzastStack",
|
||||
"zzlink",
|
||||
"zzastnew",
|
||||
"zzsubchild",
|
||||
"zzsubroot",
|
||||
"zzpre_ast",
|
||||
"zzfree_ast",
|
||||
"zztmake",
|
||||
"zzdup_ast",
|
||||
"zztfree",
|
||||
"zzdouble_link",
|
||||
NULL /* must be present */
|
||||
};
|
||||
|
||||
/* Current ambiguity examination information */
|
||||
int CurAmbigAlt1, CurAmbigAlt2, CurAmbigline, CurAmbigfile;
|
||||
char *CurAmbigbtype;
|
||||
|
||||
|
||||
/* M e t h o d T a b l e s */
|
||||
/*
|
||||
* The following tables are used to fill syntax diagram nodes with the correct
|
||||
* function pointers for computing FIRST sets and printing themselves.
|
||||
*/
|
||||
|
||||
/* fpTraverse[node type] == pointer to function that calculates trees
|
||||
* representing the FIRST sets for that node (maintains spatial info).
|
||||
* We use 'struct _tree' not 'tree' due to a g++ 2.4.3 bug.
|
||||
*/
|
||||
#ifdef __cplusplus
|
||||
struct _tree *(*fpTraverse[NumNodeTypes+1])(... /* Node *, int, set * */) = {
|
||||
NULL,
|
||||
(struct _tree *(*)(...)) tJunc,
|
||||
(struct _tree *(*)(...)) tRuleRef,
|
||||
(struct _tree *(*)(...)) tToken,
|
||||
(struct _tree *(*)(...)) tAction
|
||||
};
|
||||
#else
|
||||
Tree *(*fpTraverse[NumNodeTypes+1])() = {
|
||||
NULL,
|
||||
tJunc,
|
||||
tRuleRef,
|
||||
tToken,
|
||||
tAction
|
||||
};
|
||||
#endif
|
||||
|
||||
/* fpReach[node type] == pointer to function that calculates FIRST set for
|
||||
* that node. (r stands for reach). We use 'struct _set' not 'set'
|
||||
* due to a g++ 2.4.3 bug.
|
||||
*/
|
||||
#ifdef __cplusplus
|
||||
struct _set (*fpReach[NumNodeTypes+1])(... /* Node *, int, set * */) = {
|
||||
NULL,
|
||||
(struct _set (*)(...)) rJunc,
|
||||
(struct _set (*)(...)) rRuleRef,
|
||||
(struct _set (*)(...)) rToken,
|
||||
(struct _set (*)(...)) rAction
|
||||
};
|
||||
#else
|
||||
set (*fpReach[NumNodeTypes+1])() = {
|
||||
NULL,
|
||||
rJunc,
|
||||
rRuleRef,
|
||||
rToken,
|
||||
rAction
|
||||
};
|
||||
#endif
|
||||
|
||||
/* fpPrint[node type] == pointer to function that knows how to print that node. */
|
||||
#ifdef __cplusplus
|
||||
void (*fpPrint[NumNodeTypes+1])(... /* Node * */) = {
|
||||
NULL,
|
||||
(void (*)(...)) pJunc,
|
||||
(void (*)(...)) pRuleRef,
|
||||
(void (*)(...)) pToken,
|
||||
(void (*)(...)) pAction
|
||||
};
|
||||
#else
|
||||
void (*fpPrint[NumNodeTypes+1])() = {
|
||||
NULL,
|
||||
pJunc,
|
||||
pRuleRef,
|
||||
pToken,
|
||||
pAction
|
||||
};
|
||||
#endif
|
||||
|
||||
char *decodeJType[] = {
|
||||
"invalid",
|
||||
"aSubBlk",
|
||||
"aOptBlk",
|
||||
"aLoopBlk",
|
||||
"EndBlk",
|
||||
"RuleBlk",
|
||||
"Generic",
|
||||
"EndRule",
|
||||
"aPlusBlk",
|
||||
"aLoopBegin"
|
||||
};
|
||||
|
||||
|
||||
/* H a s h T a b l e s */
|
||||
|
||||
Entry **Tname, /* Table of all token names (maps name to tok num)*/
|
||||
**Texpr, /* Table of all token expressions
|
||||
(maps expr to tok num) */
|
||||
**Rname, /* Table of all Rules (has ptr to start of rule) */
|
||||
**Fcache, /* Cache of First/Follow Computations */
|
||||
**Tcache; /* Tree cache; First/Follow for permute trees */
|
||||
Entry **Elabel; /* Table of all element label names */
|
||||
Entry **Sname; /* Signal names */
|
||||
Entry **Pname; /* symbolic predicate names MR11 */
|
||||
|
||||
|
||||
/* V a r i a b l e s */
|
||||
|
||||
int Save_argc; /* MR10 */
|
||||
char **Save_argv; /* MR10 */
|
||||
int EpToken=0; /* Imaginary Epsilon token number */
|
||||
int WildCardToken=0;
|
||||
int CurFile= -1; /* Index into FileStr table */
|
||||
char *CurPredName=NULL; /* MR11 */
|
||||
char *CurRule=NULL; /* Pointer to current rule name */
|
||||
int CurRuleDebug=0; /* MR13 debug flag */
|
||||
RuleEntry *CurRuleNode=NULL;/* Pointer to current rule node in syntax tree */
|
||||
char *CurRetDef=NULL; /* Pointer to current return type definition */
|
||||
char *CurParmDef=NULL; /* Pointer to current parameter definition */
|
||||
Junction *CurRuleBlk=NULL; /* Pointer to current block node for enclosing block */
|
||||
ListNode *CurExGroups=NULL; /* Current list of exception groups for rule/alts */
|
||||
ListNode *CurElementLabels=NULL;
|
||||
ListNode *CurAstLabelsInActions=NULL; /* MR27 */
|
||||
|
||||
/* MR10 used by <<>>? to set "label_used_in_semantic_pred" */
|
||||
/* MR10 this will force LT(i) assignment even in guess mode */
|
||||
|
||||
ListNode *CurActionLabels=NULL; /* MR10 Element Labels appearing in last action */
|
||||
int numericActionLabel=0 ; /* MR10 << ... $1 ... >> or << ... $1 ... >>? */
|
||||
ListNode *NumericPredLabels=NULL; /* MR10 << ... $1 ... >>? ONLY */
|
||||
ListNode *ContextGuardPredicateList=NULL; /* MR13 for re-evaluating predicates
|
||||
after meta tokens are defined */
|
||||
|
||||
int CurBlockID=0; /* Unique int for each block */
|
||||
int CurAltNum=0;
|
||||
Junction *CurAltStart = NULL; /* Junction node that starts the alt */
|
||||
Junction *OuterAltStart = NULL; /* For chaining exception groups MR7 */
|
||||
int NumRules=0; /* Rules are from 1 to n */
|
||||
FILE *output=NULL; /* current parser output file */
|
||||
FILE *input=NULL; /* current grammar input file */
|
||||
char *FileStr[MaxNumFiles];/* Ptr to array of file names on command-line */
|
||||
int NumFiles=0; /* current grammar file number */
|
||||
#ifdef __cplusplus
|
||||
void (**fpTrans)(...), /* array of ptrs to funcs that translate nodes */
|
||||
(**fpJTrans)(...); /* ... that translate junctions */
|
||||
#else
|
||||
void (**fpTrans)(), /* array of ptrs to funcs that translate nodes */
|
||||
(**fpJTrans)(); /* ... that translate junctions */
|
||||
#endif
|
||||
int **FoStack; /* Array of LL_k ptrs to stacks of rule numbers */
|
||||
int **FoTOS; /* FOLLOW stack top-of-stack pointers */
|
||||
Junction *SynDiag = NULL; /* Pointer to start of syntax diagram */
|
||||
int BlkLevel=1; /* Current block level. Set by antlr.g, used by
|
||||
* scanner to translate $i.j attributes */
|
||||
set reserved_positions; /* set of token positions reserved by '#token T=i' cmds */
|
||||
set all_tokens; /* set of all token types */
|
||||
set imag_tokens; /* set of all imaginary token types (EpToken, errclasses...) */
|
||||
set tokclasses; /* set of all token class token types */
|
||||
ListNode *ForcedTokens = 0; /* list of token_id/token_num pairs to remap */
|
||||
ListNode *MetaTokenNodes=NULL; /* list of meta token refs such as token classes etc... */
|
||||
int *TokenInd=NULL; /* an indirection level between token num and position
|
||||
* of that token def in TokenStr and ExprStr */
|
||||
int LastTokenCounted=0; /* ==TokenNum if no token renumbering (same as old TokenNum) */
|
||||
int TokenNum=TokenStart;
|
||||
char **TokenStr=NULL; /* map token # to token name */
|
||||
char **ExprStr=NULL; /* map token # to expr */
|
||||
Junction **RulePtr=NULL; /* map rule # to RuleBlk node of rule */
|
||||
ListNode *ExprOrder=NULL; /* list of exprs as they are found in grammar */
|
||||
ListNode *BeforeActions=NULL;/* list of grammar actions before rules */
|
||||
ListNode *AfterActions=NULL;/* list of grammar actions after rules */
|
||||
ListNode *LexActions=NULL; /* list of lexical actions */
|
||||
|
||||
/* MR1 */
|
||||
/* MR1 11-Apr-97 Provide mechanism for inserting code into DLG class */
|
||||
/* MR1 via #lexmember <<....>> */
|
||||
/* MR1 via #lexprefix <<....>> */
|
||||
/* MR1 */
|
||||
|
||||
ListNode *LexMemberActions=NULL;/* list of lexical header member decl MR1 */
|
||||
ListNode *LexPrefixActions=NULL;/* list of lexical header #include decl MR1 */
|
||||
ListNode **Cycles=NULL; /* list of cycles (for each k) found when
|
||||
doing FOLLOWs */
|
||||
ListNode *eclasses=NULL; /* list of error classes */
|
||||
ListNode *tclasses=NULL; /* list of token classes */
|
||||
LClass lclass[MaxLexClasses]; /* array of lex class definitions */
|
||||
int CurrentLexClass; /* index into lclass */
|
||||
int NumLexClasses=0; /* in range 1..MaxLexClasses (init 0) */
|
||||
|
||||
char *HdrAction=NULL; /* action defined with #header */
|
||||
char *FirstAction=NULL; /* action defined with #first MR11 */
|
||||
FILE *ErrFile; /* sets and error recovery stuff */
|
||||
FILE *DefFile=NULL; /* list of tokens, return value structs, setwd defs */
|
||||
FILE *MRinfoFile=NULL; /* MR10 information file */
|
||||
int MRinfo=0; /* MR10 */
|
||||
int MRinfoSeq=0; /* MR10 */
|
||||
int InfoP=0; /* MR10 predicates */
|
||||
int InfoT=0; /* MR10 tnodes */
|
||||
int InfoF=0; /* MR10 first/follow sets */
|
||||
int InfoM=0; /* MR10 monitor progress */
|
||||
int InfoO=0; /* MR12 orphan rules */
|
||||
int TnodesInUse=0; /* MR10 */
|
||||
int TnodesPeak=0; /* MR10 */
|
||||
int TnodesAllocated=0; /* MR10 */
|
||||
int TnodesReportThreshold=0; /* MR11 */
|
||||
int PotentialSuppression=0; /* MR10 */
|
||||
int PotentialDummy=0; /* MR10 */
|
||||
int CannotContinue=FALSE;
|
||||
int OutputLL_k = 1; /* LL_k for parsing must be power of 2 */
|
||||
int action_file; /* used to track start of action */
|
||||
int action_line;
|
||||
int FoundGuessBlk=0; /* there is a (...)? block somewhere in grammar */
|
||||
int FoundException=0; /* there is an exception somewhere in grammar */
|
||||
/* MR6 Distinguish between @ operator and real exception */
|
||||
/* MR6 by keeping separate flags for @ operator and real exceptions */
|
||||
int FoundAtOperator=0; /* MR6 */
|
||||
int FoundExceptionGroup=0; /* MR6 */
|
||||
int pLevel=0; /* print Level */
|
||||
int pAlt1,pAlt2; /* print "==>" in front of these alts */
|
||||
|
||||
/* C++ output stuff */
|
||||
FILE *Parser_h, /* where subclass of ANTLRParser goes */
|
||||
*Parser_c; /* where code for subclass of ANTLRParser goes */
|
||||
char Parser_h_Name[MaxFileName+1] = "";
|
||||
char Parser_c_Name[MaxFileName+1] = "";
|
||||
char MRinfoFile_Name[MaxFileName+1] = ""; /* MR10 */
|
||||
char *ClassDeclStuff=NULL; /* MR10 */
|
||||
char *BaseClassName=NULL; /* MR22 */
|
||||
/* list of actions inside the #class {...} defs */
|
||||
ListNode *class_before_actions=NULL;
|
||||
ListNode *class_after_actions=NULL;
|
||||
|
||||
char CurrentClassName[MaxRuleName]="";
|
||||
int no_classes_found=1;
|
||||
char *UserTokenDefsFile;
|
||||
int UserDefdTokens=0; /* found #tokdefs? */
|
||||
char *OutputDirectory=TopDirectory;
|
||||
ExceptionGroup *DefaultExGroup = NULL;
|
||||
int NumSignals = NumPredefinedSignals;
|
||||
int ContextGuardTRAV=0;
|
||||
|
||||
char *MR_AmbAidRule=NULL; /* MR11 */
|
||||
int MR_AmbAidLine=0; /* MR11 */
|
||||
int MR_AmbAidDepth=0; /* MR11 */
|
||||
int MR_AmbAidMultiple=0; /* MR11 */
|
||||
int MR_skipped_e3_report=0; /* MR11 */
|
||||
int MR_usingPredNames=0; /* MR11 */
|
||||
int MR_BadExprSets=0; /* MR13 */
|
||||
int MR_Inhibit_Tokens_h_Gen=0; /* MR13 */
|
||||
int NewAST=0; /* MR13 */
|
||||
int tmakeInParser=0; /* MR23 */
|
||||
int AlphaBetaTrace=0; /* MR14 */
|
||||
int MR_BlkErr=0; /* MR21 */
|
||||
int MR_AlphaBetaMessageCount=0; /* MR14 */
|
||||
int MR_AlphaBetaWarning=0; /* MR14 */
|
||||
int MR_ErrorSetComputationActive=0; /* MR14 */
|
||||
int MR_MaintainBackTrace=0; /* MR14 */
|
||||
set MR_CompromisedRules; /* MR14 */
|
||||
|
||||
Junction *MR_RuleBlkWithHalt; /* MR10 */
|
||||
|
||||
/* C m d - L i n e O p t i o n s */
|
||||
|
||||
int LL_k=1; /* how many tokens of full lookahead */
|
||||
int CLL_k= -1; /* how many tokens of compressed lookahead */
|
||||
int PrintOut = FALSE; /* print out the grammar */
|
||||
int PrintAnnotate = FALSE;/* annotate printout with FIRST sets */
|
||||
int CodeGen=TRUE; /* Generate output code? */
|
||||
int LexGen=TRUE; /* Generate lexical files? (tokens.h, parser.dlg) */
|
||||
int GenAST=FALSE; /* Generate AST's? */
|
||||
int GenANSI=FALSE; /* Generate ANSI code where necessary */
|
||||
int GenExprSetsOpt=TRUE;/* use sets not (LA(1)==tok) expression lists */
|
||||
int GenCR=FALSE; /* Generate cross reference? */
|
||||
int GenLineInfo=FALSE; /* Generate # line "file" stuff? */
|
||||
int GenLineInfoMS=FALSE;/* Like -gl but replace "\" with "/" for MS C/C++ systems */
|
||||
int TraceGen=FALSE; /* Generate code to trace rule invocation */
|
||||
int elevel=1; /* error level for ambiguity messages */
|
||||
int GenEClasseForRules=0;/* don't generate eclass for each rule */
|
||||
int TreeResourceLimit= -1;/* don't limit tree resource */
|
||||
int DemandLookahead = 0;/* demand/delayed lookahead or not */
|
||||
char *RulePrefix = ""; /* prefix each generated rule with this */
|
||||
char *stdpccts = "stdpccts.h";/* where to generate std pccts include file */
|
||||
int GenStdPccts = 0; /* don't gen stdpccts.h? */
|
||||
int ParseWithPredicates = 1;
|
||||
int WarningLevel = 1;
|
||||
int UseStdout = 0; /* MR6 */
|
||||
int TabWidth = 2; /* MR6 */ /* MR27 */
|
||||
int HoistPredicateContext = 0;
|
||||
int MRhoisting = 0; /* MR9 */
|
||||
int MRhoistingk = 0; /* MR13 */
|
||||
int MR_debugGenRule=0; /* MR11 */
|
||||
|
||||
int GenCC = 0; /* Generate C++ output */
|
||||
|
||||
PointerStack MR_BackTraceStack={0,0,NULL}; /* MR10 */
|
||||
PointerStack MR_PredRuleRefStack={0,0,NULL}; /* MR10 */
|
||||
PointerStack MR_RuleBlkWithHaltStack={0,0,NULL}; /* MR10 */
|
||||
|
||||
/* DontCopyTokens and Pragma_DupLabeledTokens were a bad idea. I've just
|
||||
turned them off rather than backpatching the code. Who knows? We
|
||||
may need them in the future.
|
||||
*/
|
||||
int DontCopyTokens = 1; /* in C++, don't copy ANTLRToken passed to ANTLR */
|
||||
|
||||
/* Remember if LT(i), LA(i), or LATEXT(i) used in an action which is not
|
||||
a predicate. If so, give a warning for novice users.
|
||||
*/
|
||||
|
||||
int LTinTokenAction = 0; /* MR23 */
|
||||
int PURIFY = 1; /* MR23 */
|
||||
|
||||
int CurBlockID_array[MAX_BLK_LEVEL]; /* MR23 */
|
||||
int CurAltNum_array[MAX_BLK_LEVEL]; /* MR23 */
|
Reference in New Issue
Block a user