1 /*
2  * proto.h -- function prototypes
3  *
4  * SOFTWARE RIGHTS
5  *
6  * We reserve no LEGAL rights to the Purdue Compiler Construction Tool
7  * Set (PCCTS) -- PCCTS is in the public domain.  An individual or
8  * company may do whatever they wish with source code distributed with
9  * PCCTS or the code generated by PCCTS, including the incorporation of
10  * PCCTS, or its output, into commerical software.
11  *
12  * We encourage users to develop software with PCCTS.  However, we do ask
13  * that credit is given to us for developing PCCTS.  By "credit",
14  * we mean that if you incorporate our source code into one of your
15  * programs (commercial product, research project, or otherwise) that you
16  * acknowledge this fact somewhere in the documentation, research report,
17  * etc...  If you like PCCTS and have developed a nice tool with the
18  * output, please mention that you developed it using PCCTS.  In
19  * addition, we ask that this header remain intact in our source code.
20  * As long as these guidelines are kept, we expect to continue enhancing
21  * this system and expect to make other tools available as they are
22  * completed.
23  *
24  * ANTLR 1.33
25  * Terence Parr
26  * Parr Research Corporation
27  * with Purdue University and AHPCRC, University of Minnesota
28  * 1989-1998
29  */
30 
31                            /* V a r i a b l e s */
32 
33 extern int tp;
34 extern Junction *SynDiag;
35 extern char Version[];
36 extern char VersionDef[];
37 #ifdef __cplusplus
38 extern void (*fpPrint[])(...);
39 #else
40 extern void (*fpPrint[])();
41 #endif
42 #ifdef __cplusplus
43 extern struct _set (*fpReach[])(...);
44 #else
45 extern struct _set (*fpReach[])();
46 #endif
47 #ifdef __cplusplus
48 extern struct _tree *(*fpTraverse[])(...);
49 #else
50 extern struct _tree *(*fpTraverse[])();
51 #endif
52 #ifdef __cplusplus
53 extern void (**fpTrans)(...);
54 #else
55 extern void (**fpTrans)();
56 #endif
57 #ifdef __cplusplus
58 extern void (**fpJTrans)(...);
59 #else
60 extern void (**fpJTrans)();
61 #endif
62 #ifdef __cplusplus
63 extern void (*C_Trans[NumNodeTypes+1])(...);
64 #else
65 extern void (*C_Trans[])();
66 #endif
67 #ifdef __cplusplus
68 extern void (*C_JTrans[NumJuncTypes+1])(...);
69 #else
70 extern void (*C_JTrans[])();
71 #endif
72 extern int BlkLevel;
73 extern int CurFile;
74 extern char *CurPredName;
75 extern char *CurRule;
76 extern int  CurRuleDebug;                       /* MR13 */
77 extern Junction *CurRuleBlk;
78 extern RuleEntry *CurRuleNode;
79 extern ListNode *CurElementLabels;
80 extern ListNode *ContextGuardPredicateList;     /* MR13 */
81 extern ListNode *CurActionLabels;
82 extern int numericActionLabel;        /* MR10 << ... $1 ... >> or << ... $1 ... >>?   */
83 extern ListNode *NumericPredLabels;   /* MR10 << ... $1 ... >>?  ONLY                 */
84 extern char *FileStr[];
85 extern int NumFiles;
86 extern int EpToken;
87 extern int WildCardToken;
88 extern Entry	**Tname,
89 				**Texpr,
90 				**Rname,
91 				**Fcache,
92 				**Tcache,
93 				**Elabel,
94 				**Sname,
95                 **Pname;    /* MR11 */
96 extern ListNode *ExprOrder;
97 extern ListNode **Cycles;
98 extern int TokenNum;
99 extern int LastTokenCounted;
100 extern ListNode *BeforeActions, *AfterActions, *LexActions;
101 
102 /* MR1							                        		    */
103 /* MR1  11-Apr-97	Provide mechanism for inserting code into DLG class     */
104 /* MR1			  via #lexmember <<....>> & #lexprefix <<...>>              */
105 /* MR1									    */
106 
107 extern ListNode *LexMemberActions;			 	             /* MR1 */
108 extern ListNode *LexPrefixActions;				             /* MR1 */
109 
110 extern set *fset;   /* for constrained search */             /* MR11 */
111 extern int maxk;    /* for constrained search */             /* MR11 */
112 extern int Save_argc;                                        /* MR10 */
113 extern char **Save_argv;                                     /* MR10 */
114 extern ListNode *eclasses, *tclasses;
115 extern char	*HdrAction;
116 extern char *FirstAction;                                    /* MR11 */
117 extern FILE	*ErrFile;
118 extern char *RemapFileName;
119 extern char *ErrFileName;
120 extern char *DlgFileName;
121 extern char *DefFileName;
122 extern char *ModeFileName;
123 extern char *StdMsgName;
124 extern int NumRules;
125 extern Junction **RulePtr;
126 extern int LL_k;
127 extern int CLL_k;
128 extern char *decodeJType[];
129 extern int PrintOut;
130 extern int PrintAnnotate;
131 extern int CodeGen;
132 extern int LexGen;
133 extern int esetnum;
134 extern int setnum;
135 extern int wordnum;
136 extern int GenAST;
137 extern int GenANSI;
138 extern int **FoStack;
139 extern int **FoTOS;
140 extern int GenExprSetsOpt;
141 extern FILE *DefFile;
142 extern int CannotContinue;
143 extern int GenCR;
144 extern int GenLineInfo;
145 extern int GenLineInfoMS;
146 extern int action_file, action_line;
147 extern int TraceGen;
148 extern int CurAmbigAlt1, CurAmbigAlt2, CurAmbigline, CurAmbigfile;
149 extern char *CurAmbigbtype;
150 extern int elevel;
151 extern int GenEClasseForRules;
152 extern FILE *input, *output;
153 extern char **TokenStr, **ExprStr;
154 extern int CurrentLexClass, NumLexClasses;
155 extern LClass lclass[];
156 extern char LexStartSymbol[];
157 extern char	*CurRetDef;
158 extern char	*CurParmDef;
159 extern int OutputLL_k;
160 extern int TreeResourceLimit;
161 extern int DemandLookahead;
162 extern char *RulePrefix;
163 extern int GenStdPccts;
164 extern char *stdpccts;
165 extern int ParseWithPredicates;
166 extern int ConstrainSearch;
167 extern set MR_CompromisedRules;                                     /* MR14 */
168 extern int MR_AmbSourceSearch;                                      /* MR11 */
169 extern int MR_SuppressSearch;                                       /* MR13 */
170 extern int MR_AmbSourceSearchGroup;                                 /* MR11 */
171 extern int MR_AmbSourceSearchChoice;                                /* MR11 */
172 extern int MR_AmbSourceSearchLimit;                                 /* MR11 */
173 extern int MR_usingPredNames;                                       /* MR11 */
174 extern int MR_ErrorSetComputationActive;                            /* MR14 */
175 extern char *MR_AmbAidRule;                                         /* MR11 */
176 extern int   MR_AmbAidLine;                                         /* MR11 */
177 extern int   MR_AmbAidMultiple;                                     /* MR11 */
178 extern int MR_AmbAidDepth;                                          /* MR11 */
179 extern int MR_skipped_e3_report;                                    /* MR11 */
180 extern int MR_matched_AmbAidRule;                                   /* MR11 */
181 extern int MR_Inhibit_Tokens_h_Gen;                                 /* MR13 */
182 extern int NewAST;                                                  /* MR13 */
183 extern int AlphaBetaTrace;                                          /* MR14 */
184 extern int MR_AlphaBetaWarning;                                     /* MR14 */
185 extern int MR_AlphaBetaMessageCount;                                /* MR14 */
186 extern int MR_MaintainBackTrace;                                    /* MR14 */
187 extern int MR_BadExprSets;                                          /* MR13 */
188 extern int FoundGuessBlk;
189 extern int FoundException;
190 extern int FoundAtOperator;				                             /* MR6 */
191 extern int FoundExceptionGroup;                                      /* MR6 */
192 extern int WarningLevel;
193 extern int UseStdout;					                             /* MR6 */
194 extern int TabWidth;					                             /* MR6 */
195 extern int pLevel;
196 extern int pAlt1;
197 extern int pAlt2;
198 extern int AImode;
199 extern int HoistPredicateContext;
200 extern int MRhoisting;                                               /* MR9 */
201 extern int MRhoistingk;                                              /* MR13 */
202 extern int MR_debugGenRule;                                          /* MR11 */
203 extern int GenCC;
204 extern char *ParserName;
205 extern char *StandardSymbols[];
206 extern char *ASTSymbols[];
207 extern set reserved_positions;
208 extern set all_tokens;
209 extern set imag_tokens;
210 extern set tokclasses;
211 extern ListNode *ForcedTokens;
212 extern int *TokenInd;
213 extern FILE *Parser_h, *Parser_c;
214 extern char CurrentClassName[];
215 extern int no_classes_found;
216 extern char Parser_h_Name[];
217 extern char Parser_c_Name[];
218 extern char MRinfoFile_Name[];                                      /* MR10 */
219 extern FILE *MRinfoFile;                                            /* MR10 */
220 extern int MRinfo;                                                  /* MR10 */
221 extern int MRinfoSeq;                                               /* MR10 */
222 extern int InfoP;                                                   /* MR10 */
223 extern int InfoT;                                                   /* MR10 */
224 extern int InfoF;                                                   /* MR10 */
225 extern int InfoM;                                                   /* MR10 */
226 extern int InfoO;                                                   /* MR12 */
227 extern int PotentialSuppression;                                    /* MR10 */
228 extern int PotentialDummy;                                          /* MR10 */
229 extern int TnodesInUse;                                             /* MR10 */
230 extern int TnodesPeak;                                              /* MR10 */
231 extern int TnodesReportThreshold;                                   /* MR11 */
232 extern int TnodesAllocated;                                         /* MR10 */
233 extern char *ClassDeclStuff;                                        /* MR10 */
234 extern ListNode *class_before_actions, *class_after_actions;
235 extern char *UserTokenDefsFile;
236 extern int UserDefdTokens;
237 extern ListNode *MetaTokenNodes;
238 extern char *OutputDirectory;
239 extern int DontCopyTokens;
240 extern set AST_nodes_refd_in_actions;
241 extern ListNode *CurExGroups;
242 extern int CurBlockID;
243 extern int CurAltNum;
244 extern Junction *CurAltStart;
245 extern Junction *OuterAltStart;               /* chain exception groups MR7 */
246 extern ExceptionGroup *DefaultExGroup;
247 extern int NumSignals;
248 extern int ContextGuardTRAV;
249 extern Junction *MR_RuleBlkWithHalt;            /* MR10 */
250 extern PointerStack MR_BackTraceStack;          /* MR10 */
251 extern PointerStack MR_PredRuleRefStack;        /* MR10 */
252 extern PointerStack MR_RuleBlkWithHaltStack;    /* MR10 */
253 
254 /*									*/
255 /* MR1	10-Apr-97  MR1  Previously unable to put right shift operator	    */
256 /* MR1					in DLG action			                    */
257 /*								                                            */
258 extern int tokenActionActive;	                                     /* MR1 */
259 
260 extern char *PRED_OR_LIST;                                          /* MR10 */
261 extern char *PRED_AND_LIST;                                         /* MR10 */
262 
263 #ifdef __USE_PROTOS
264 extern int stricmp(const char*, const char*);
265 extern void istackreset(void);
266 extern int istacksize(void);
267 extern void pushint(int);
268 extern int popint( void );
269 extern int istackempty( void );
270 extern int topint( void );
271 extern void NewSetWd( void );
272 extern void DumpSetWd( void );
273 extern void DumpSetWdForC( void );
274 extern void DumpSetWdForCC( void );
275 extern void NewSet( void );
276 extern void FillSet( set );
277 extern void ComputeErrorSets( void );
278 extern void ComputeTokSets( void );
279 extern void SubstErrorClass( set * );
280 extern int DefErrSet( set *, int, char * );
281 extern int DefErrSetForC( set *, int, char * );
282 extern int DefErrSetForCC( set *, int, char * );
283 extern int DefErrSet1(int, set *, int, char * );
284 extern int DefErrSetForC1(int, set *, int, char * );
285 extern int DefErrSetForCC1(int, set *, int, char * );
286 extern void GenErrHdr( void );
287 extern void dumpExpr( FILE *, char * );
288 extern void addParm( Node *, char * );
289 extern Graph buildAction( char *, int, int, int );
290 extern Graph buildToken( char * );
291 extern Graph buildWildCard( char * );
292 extern Graph buildRuleRef( char * );
293 extern Graph Or( Graph, Graph );
294 extern Graph Cat( Graph, Graph );
295 extern Graph makeOpt( Graph, int );
296 extern Graph makeBlk( Graph, int );
297 extern Graph makeLoop( Graph, int );
298 extern Graph makePlus( Graph, int );
299 extern Graph emptyAlt( void );
300 extern TokNode * newTokNode( void );
301 extern RuleRefNode * newRNode( void );
302 extern Junction * newJunction( void );
303 extern ActionNode * newActionNode( void );
304 extern char * makelocks( void );
305 extern void preorder( Tree * );
306 extern Tree * tnode( int );
307 extern void _Tfree( Tree * );
308 extern Tree * tdup( Tree * );
309 extern int is_single_tuple( Tree * );
310 extern Tree * tappend( Tree *, Tree * );
311 extern void Tfree( Tree * );
312 extern Tree * tlink( Tree *, Tree *, int );
313 extern Tree * tshrink( Tree * );
314 extern Tree * tflatten( Tree * );
315 extern Tree * tJunc( Junction *, int, set * );
316 extern Tree * tRuleRef( RuleRefNode *, int, set * );
317 extern Tree * tToken( TokNode *, int, set * );
318 extern Tree * tAction( ActionNode *, int, set * );
319 extern int tmember( Tree *, Tree * );
320 extern int tmember_constrained( Tree *, Tree * );
321 extern Tree * tleft_factor( Tree * );
322 extern Tree * trm_perm( Tree *, Tree * );
323 extern void tcvt( set *, Tree * );
324 extern Tree * permute( int, int );
325 extern Tree * VerifyAmbig( Junction *, Junction *, unsigned **, set *, Tree **, Tree **, int * );
326 extern set rJunc( Junction *, int, set * );
327 extern set rRuleRef( RuleRefNode *, int, set * );
328 extern set rToken( TokNode *, int, set * );
329 extern set rAction( ActionNode *, int, set * );
330 extern void HandleAmbiguity( Junction *, Junction *, Junction *, int );
331 extern set First( Junction *, int, int, int * );
332 extern void freeBlkFsets( Junction * );
333 extern void genAction( ActionNode * );
334 extern void genRuleRef( RuleRefNode * );
335 extern void genToken( TokNode * );
336 extern void genOptBlk( Junction * );
337 extern void genLoopBlk( Junction *, Junction *, Junction *, int );
338 extern void genLoopBegin( Junction * );
339 extern void genPlusBlk( Junction * );
340 extern void genSubBlk( Junction * );
341 extern void genRule( Junction * );
342 extern void genJunction( Junction * );
343 extern void genEndBlk( Junction * );
344 extern void genEndRule( Junction * );
345 extern void genHdr( int );
346 extern void genHdr1( int );
347 extern void dumpAction( char *, FILE *, int, int, int, int );
348 extern Entry ** newHashTable( void );
349 extern Entry * hash_add( Entry **, char *, Entry * );
350 extern Entry * hash_get( Entry **, char * );
351 extern void hashStat( Entry ** );
352 extern char * mystrdup( char * );
353 extern void genLexDescr( void );
354 extern void dumpLexClasses( FILE * );
355 extern void genDefFile( void );
356 extern void DumpListOfParmNames( char *, FILE *, int );	/* MR5 janm 26-May-97 */
357 extern int DumpNextNameInDef( char **, FILE * );
358 extern void DumpOldStyleParms( char *, FILE * );
359 extern void DumpType( char *, FILE * );
360 extern int strmember( char *, char * );
361 extern int HasComma( char * );
362 extern void DumpRetValStruct( FILE *, char *, int );
363 extern char * StripQuotes( char * );
364 extern int main( int, char *[] );
365 extern void readDescr( void );
366 extern FILE * NextFile( void );
367 extern char * outnameX( char *, char *);
368 extern char * outname( char * );
369 extern void fatalFL( char *, char *, int );
370 extern void fatal_intern( char *, char *, int );
371 extern void cleanUp( void );
372 extern char * eMsg3( char *, char *, char *, char * );
373 extern char * eMsgd( char *, int );
374 extern char * eMsgd2( char *, int, int );
375 extern void s_fprT( FILE *, set );
376 extern char * TerminalString( int );
377 extern void lexclass( char * );
378 extern void lexmode( int );
379 extern int LexClassIndex( char * );
380 extern int hasAction( char * );
381 extern void setHasAction( char *, char * );
382 extern int addTname( char * );
383 extern int addTexpr( char * );
384 extern int Tnum( char * );
385 extern void Tklink( char *, char * );
386 extern Entry * newEntry( char *, int );
387 extern void list_add( ListNode **, void * );
388 extern void list_free( ListNode **, int freeData );     /* MR10 */
389 extern void list_apply( ListNode *, void (*)(void *) );
390 extern char * Fkey( char *, int, int );
391 extern void FoPush( char *, int );
392 extern void FoPop( int );
393 extern void RegisterCycle( char *, int );
394 extern void ResolveFoCycles( int );
395 extern void pJunc( Junction * );
396 extern void pRuleRef( RuleRefNode * );
397 extern void pToken( TokNode * );
398 extern void pAction( ActionNode * );
399 extern void FoLink( Node * );
400 extern void addFoLink( Node *, char *, Junction * );
401 extern void GenCrossRef( Junction * );
402 extern void defErr( char *, long, long, long, long, long, long );
403 extern void genStdPCCTSIncludeFile(FILE *,char *);                  /* MR10 */
404 extern char * baseName(char *);                                     /* MR10 */
405 extern Predicate *find_predicates(Node *);                          /* MR10 */
406 extern Predicate *MR_find_predicates_and_supp(Node *);              /* MR13 */
407 extern int predicateLookaheadDepth(ActionNode *);                   /* MR10 */
408 extern void predicate_free(Predicate *);                            /* MR10 */
409 extern Predicate * predicate_dup(Predicate *);                      /* MR10 */
410 extern Predicate * predicate_dup_without_context(Predicate *);      /* MR11 */
411 extern void GenRulePrototypes(FILE *, Junction *);
412 extern Junction *first_item_is_guess_block(Junction *);
413 extern Junction *analysis_point(Junction *);
414 extern Tree *make_tree_from_sets(set *, set *);
415 extern Tree *tdup_chain(Tree *);
416 extern Tree *tdif(Tree *, Predicate *, set *, set *);
417 extern set covered_set(Predicate *);
418 extern void AmbiguityDialog(Junction *, int, Junction *, Junction *, int *, int *);
419 extern void dumpAmbigMsg(set *, FILE *, int);
420 extern void GenRuleFuncRedefs(FILE *, Junction *);
421 extern void GenPredefinedSymbolRedefs(FILE *);
422 extern void GenASTSymbolRedefs(FILE *);
423 extern void GenRemapFile(void);
424 extern void GenSetRedefs(FILE *);
425 extern ForcedToken *newForcedToken(char *, int);
426 extern void RemapForcedTokens(void);
427 extern char *TokenOrExpr(int);
428 extern void setUpperRange(TokNode *, char *);
429 extern void GenParser_c_Hdr(void);
430 extern void GenParser_h_Hdr(void);
431 extern void GenRuleMemberDeclarationsForCC(FILE *, Junction *);
432 extern int addForcedTname( char *, int );
433 extern char *OutMetaName(char *);
434 extern void warnNoFL(char *err);
435 extern void warnFL(char *err,char *f,int l);
436 extern void warn(char *err);
437 extern void warnNoCR( char *err );
438 extern void errNoFL(char *err);
439 extern void errFL(char *err,char *f,int l);
440 extern void err(char *err);
441 extern void errNoCR( char *err );
442 extern Tree *tmake(Tree *root, ...);
443 extern void genPredTree( Predicate *p, Node *j, int ,int);
444 extern UserAction *newUserAction(char *);
445 extern char *gate_symbol(char *name);
446 extern char *makeAltID(int blockid, int altnum);
447 extern void DumpRemainingTokSets(void);
448 extern void DumpANSIFunctionArgDef(FILE *f, Junction *q);
449 extern Predicate *computePredicateFromContextGuard(Graph,int *msgDone);     /* MR10 */
450 extern void recomputeContextGuard(Predicate *);                     /* MR13 */
451 extern Predicate *new_pred(void);
452 extern void chkGTFlag(void);
453 extern void leAdd(LabelEntry *);                                     /* MR7 */
454 extern void leFixup(void);                                           /* MR7 */
455 extern void egAdd(ExceptionGroup *);                                 /* MR7 */
456 extern void egFixup(void);                                           /* MR7 */
457 extern void altAdd(Junction *);                                      /* MR7 */
458 extern void altFixup(void);                                          /* MR7 */
459 extern Predicate * MR_find_in_aSubBlk(Junction *alt);                /* MR10 */
460 extern Predicate * MR_predFlatten(Predicate *p);				     /* MR10 */
461 extern Predicate * MR_predSimplifyALL(Predicate *p);	             /* MR10 */
462 extern Predicate * MR_predSimplifyALLX(Predicate *p,int skipPass3);  /* MR10 */
463 extern int MR_allPredLeaves(Predicate *p);                           /* MR10 */
464 extern void MR_cleanup_pred_trees(Predicate *p);                     /* MR10 */
465 extern int MR_predicate_context_completed(Predicate *p);             /* MR10 */
466 extern void MR_check_pred_too_long(Predicate *p,set completion);     /* MR10 */
467 extern Tree * MR_remove_epsilon_from_tree(Tree *t);                  /* MR10 */
468 extern Tree * MR_computeTreeAND(Tree *l,Tree *r);					 /* MR10 */
469 extern int MR_tree_equ(Tree *big, Tree *small);				         /* MR10 */
470 extern set MR_First(int ck,Junction *j,set *incomplete);  		     /* MR10 */
471 extern set MR_compute_pred_set(Predicate *p);                	     /* MR10 */
472 extern Tree * MR_compute_pred_tree_context(Predicate *p);     	     /* MR10 */
473 extern int MR_pointerStackPush(PointerStack *,void *);               /* MR10 */
474 extern void * MR_pointerStackPop(PointerStack *);                    /* MR10 */
475 extern void * MR_pointerStackTop(PointerStack *);                    /* MR10 */
476 extern void MR_pointerStackReset(PointerStack *);                    /* MR10 */
477 extern void MR_backTraceReport(void);                                /* MR10 */
478 extern void MR_alphaBetaTraceReport(void);                           /* MR14 */
479 extern void MR_dumpRuleSet(set);                                     /* MR14 */
480 extern void MR_predContextPresent(Predicate *p,int *,int *);         /* MR10 */
481 extern void MR_dumpPred(Predicate *p,int withContext);               /* MR10 */
482 extern void MR_dumpPred1(int,Predicate *p,int withContext);          /* MR10 */
483 extern void MR_xxxIndent(FILE *f,int depth);                         /* MR11 */
484 extern void MR_outputIndent(int depth);                              /* MR11 */
485 extern void MR_stderrIndent(int depth);                              /* MR11 */
486 extern Junction * MR_ruleReferenced(RuleRefNode *rrn);               /* MR10 */
487 extern Junction * MR_nameToRuleBlk(char *);                          /* MR10 */
488 extern void MR_releaseResourcesUsedInRule(Node *);                   /* MR10 */
489 extern void MR_dumpTreeX(int depth,Tree *t,int across);              /* MR10 */
490 extern void MR_dumpTreeF(FILE *f,int depth,Tree *t,int across);      /* MR10 */
491 extern void DumpFcache(void);                                        /* MR10 */
492 extern void MR_dumpTokenSet(FILE *f,int depth,set s);                /* MR10 */
493 extern void MR_traceAmbSource(set *,Junction *,Junction *);          /* MR11 */
494 extern void MR_traceAmbSourceK(Tree *,Junction *a1,Junction *a2);    /* MR11 */
495 extern void MR_traceAmbSourceKclient(void);                          /* MR20 */
496 extern Node *MR_advance(Node *);                                     /* MR11 */
497 extern int  MR_offsetFromRule(Node *);                               /* MR11 */
498 extern char *MR_ruleNamePlusOffset(Node *);                          /* MR11 */
499 extern int  MR_max_height_of_tree(Tree *);                           /* MR11 */
500 extern int  MR_all_leaves_same_height(Tree *,int);                   /* MR11 */
501 extern void MR_projectTreeOntoSet(Tree *t,int k,set *);              /* MR11 */
502 extern Tree *MR_make_tree_from_set(set);                             /* MR11 */
503 extern Predicate *MR_removeRedundantPredPass3(Predicate *);          /* MR11 */
504 extern void MR_pred_depth(Predicate *,int *);                        /* MR11 */
505 extern int  MR_comparePredicates(Predicate *,Predicate *);           /* MR11 */
506 extern Predicate * MR_unfold(Predicate *);                           /* MR11 */
507 extern void MR_simplifyInverted(Predicate *,int);                    /* MR11 */
508 extern int  MR_secondPredicateUnreachable                            /* MR11 */
509             (Predicate *first,Predicate *second);                    /* MR11 */
510 extern void MR_clearPredEntry(Predicate *);                          /* MR11 */
511 extern void MR_orphanRules(FILE *);                                  /* MR12 */
512 extern void MR_merge_contexts(Tree *);                               /* MR12 */
513 extern int  ci_strequ(char *,char *);                                 /* MR12 */
514 extern void MR_guardPred_plainSet(ActionNode *anode,Predicate *);    /* MR12c */
515 extern void MR_suppressSearchReport(void);                           /* MR12c */
516 extern Predicate * MR_suppressK(Node *,Predicate *);                 /* MR13 */
517 extern void MR_backTraceDumpItem(FILE *,int skip,Node *n);           /* MR13 */
518 extern void MR_backTraceDumpItemReset(void);                         /* MR13 */
519 extern Junction * MR_junctionWithoutP2(Junction *);                  /* MR13 */
520 extern void MR_setConstrainPointer(set *);							 /* MR18 */
521 #else
522 extern int stricmp();
523 extern void istackreset();
524 extern int istacksize();
525 extern void pushint();
526 extern int popint();
527 extern int istackempty();
528 extern int topint();
529 extern void NewSetWd();
530 extern void DumpSetWd();
531 extern void DumpSetWdForC();
532 extern void DumpSetWdForCC();
533 extern void NewSet();
534 extern void FillSet();
535 extern void ComputeErrorSets();
536 extern void ComputeTokSets();
537 extern void SubstErrorClass();
538 extern int DefErrSet();
539 extern int DefErrSetForC();
540 extern int DefErrSetForCC();
541 extern int DefErrSet1();
542 extern int DefErrSetForC1();
543 extern int DefErrSetForCC1();
544 extern void GenErrHdr();
545 extern void dumpExpr();
546 extern void addParm();
547 extern Graph buildAction();
548 extern Graph buildToken();
549 extern Graph buildWildCard();
550 extern Graph buildRuleRef();
551 extern Graph Or();
552 extern Graph Cat();
553 extern Graph makeOpt();
554 extern Graph makeBlk();
555 extern Graph makeLoop();
556 extern Graph makePlus();
557 extern Graph emptyAlt();
558 extern TokNode * newTokNode();
559 extern RuleRefNode * newRNode();
560 extern Junction * newJunction();
561 extern ActionNode * newActionNode();
562 extern char * makelocks();
563 extern void preorder();
564 extern Tree * tnode();
565 extern void _Tfree();
566 extern Tree * tdup();
567 extern int is_single_tuple();
568 extern Tree * tappend();
569 extern void Tfree();
570 extern Tree * tlink();
571 extern Tree * tshrink();
572 extern Tree * tflatten();
573 extern Tree * tJunc();
574 extern Tree * tRuleRef();
575 extern Tree * tToken();
576 extern Tree * tAction();
577 extern int tmember();
578 extern int tmember_constrained();
579 extern Tree * tleft_factor();
580 extern Tree * trm_perm();
581 extern void tcvt();
582 extern Tree * permute();
583 extern Tree * VerifyAmbig();
584 extern set rJunc();
585 extern set rRuleRef();
586 extern set rToken();
587 extern set rAction();
588 extern void HandleAmbiguity();
589 extern set First();
590 extern void freeBlkFsets();
591 extern void genAction();
592 extern void genRuleRef();
593 extern void genToken();
594 extern void genOptBlk();
595 extern void genLoopBlk();
596 extern void genLoopBegin();
597 extern void genPlusBlk();
598 extern void genSubBlk();
599 extern void genRule();
600 extern void genJunction();
601 extern void genEndBlk();
602 extern void genEndRule();
603 extern void genHdr();
604 extern void genHdr1();
605 extern void dumpAction();
606 extern Entry ** newHashTable();
607 extern Entry * hash_add();
608 extern Entry * hash_get();
609 extern void hashStat();
610 extern char * mystrdup();
611 extern void genLexDescr();
612 extern void dumpLexClasses();
613 extern void genDefFile();
614 extern void DumpListOfParmNames();                    /* MR5 janm 26-May-97 */
615 extern int DumpNextNameInDef();
616 extern void DumpOldStyleParms();
617 extern void DumpType();
618 extern int strmember();
619 extern int HasComma();
620 extern void DumpRetValStruct();
621 extern char * StripQuotes();
622 extern int main();
623 extern void readDescr();
624 extern FILE * NextFile();
625 extern char * outnameX();
626 extern char * outname();
627 extern void fatalFL();
628 extern void fatal_intern();
629 extern void cleanUp();
630 extern char * eMsg3();
631 extern char * eMsgd();
632 extern char * eMsgd2();
633 extern void s_fprT();
634 extern char * TerminalString();
635 extern void lexclass();
636 extern void lexmode();
637 extern int LexClassIndex();
638 extern int hasAction();
639 extern void setHasAction();
640 extern int addTname();
641 extern int addTexpr();
642 extern int Tnum();
643 extern void Tklink();
644 extern Entry * newEntry();
645 extern void list_add();
646 extern void list_free();                /* MR10 */
647 extern void list_apply();
648 extern char * Fkey();
649 extern void FoPush();
650 extern void FoPop();
651 extern void RegisterCycle();
652 extern void ResolveFoCycles();
653 extern void pJunc();
654 extern void pRuleRef();
655 extern void pToken();
656 extern void pAction();
657 extern void FoLink();
658 extern void addFoLink();
659 extern void GenCrossRef();
660 extern void defErr();
661 extern void genStdPCCTSIncludeFile();
662 extern char * baseName();                                     /* MR10 */
663 extern Predicate *find_predicates();
664 extern Predicate *MR_find_predicates_and_supp();              /* MR13 */
665 extern int predicateLookaheadDepth();                         /* MR10 */
666 extern void predicate_free();                                 /* MR10 */
667 extern Predicate * predicate_dup();                           /* MR10 */
668 extern Predicate * predicate_dup_without_context();           /* MR11 */
669 extern void GenRulePrototypes();
670 extern Junction *first_item_is_guess_block();
671 extern Junction *analysis_point();
672 extern Tree *make_tree_from_sets();
673 extern Tree *tdup_chain();
674 extern Tree *tdif();
675 extern set covered_set();
676 extern void AmbiguityDialog();
677 extern void dumpAmbigMsg();
678 extern void GenRuleFuncRedefs();
679 extern void GenPredefinedSymbolRedefs();
680 extern void GenASTSymbolRedefs();
681 extern void GenRemapFile();
682 extern void GenSetRedefs();
683 extern ForcedToken *newForcedToken();
684 extern void RemapForcedTokens();
685 extern char *TokenOrExpr();
686 extern void setUpperRange();
687 extern void GenParser_c_Hdr();
688 extern void GenParser_h_Hdr();
689 extern void GenRuleMemberDeclarationsForCC();
690 extern int addForcedTname();
691 extern char *OutMetaName();
692 extern void warnNoFL();
693 extern void warnFL();
694 extern void warn();
695 extern void warnNoCR();
696 extern void errNoFL();
697 extern void errFL();
698 extern void err();
699 extern void errNoCR();
700 extern Tree *tmake();
701 extern void genPredTree();
702 extern UserAction *newUserAction();
703 extern char *gate_symbol();
704 extern char *makeAltID();
705 extern void DumpRemainingTokSets();
706 extern void DumpANSIFunctionArgDef();
707 extern Predicate *computePredicateFromContextGuard();
708 extern void recomputeContextGuard();                                 /* MR13 */
709 extern Predicate *new_pred();
710 extern void chkGTFlag();
711 extern void leAdd();                                                 /* MR7 */
712 extern void leFixup();                                               /* MR7 */
713 extern void egAdd();                                                 /* MR7 */
714 extern void egFixup();                                               /* MR7 */
715 extern void altAdd();                                                /* MR7 */
716 extern void altFixup();                                              /* MR7 */
717 extern Predicate * MR_find_in_aSubBlk();       		                /* MR10 */
718 extern Predicate * MR_predFlatten();						        /* MR10 */
719 extern Predicate * MR_predSimplifyALL();                            /* MR10 */
720 extern Predicate * MR_predSimplifyALLX();                           /* MR10 */
721 extern void MR_cleanup_pred_trees();                                /* MR10 */
722 extern int MR_allPredLeaves();                                      /* MR10 */
723 extern int MR_predicate_context_completed();                        /* MR10 */
724 extern void MR_check_pred_too_long();                               /* MR10 */
725 extern Tree * MR_remove_epsilon_from_tree();				        /* MR10 */
726 extern Tree * MR_computeTreeAND();					                /* MR10 */
727 extern int MR_tree_equ();                   				        /* MR10 */
728 extern set MR_First();				                                /* MR10 */
729 extern set MR_compute_pred_set();				                    /* MR10 */
730 extern Tree * MR_compute_pred_tree_context();				        /* MR10 */
731 extern int MR_pointerStackPush();                                   /* MR10 */
732 extern void * MR_pointerStackPop();                                 /* MR10 */
733 extern void * MR_pointerStackTop();                                 /* MR10 */
734 extern void MR_pointerStackReset();                                 /* MR10 */
735 extern void MR_backTraceReport();                                   /* MR10 */
736 extern void MR_alphaBetaTraceReport();                              /* MR14 */
737 extern void MR_dumpRuleSet();                                       /* MR14 */
738 extern void MR_predContextPresent();                                /* MR10 */
739 extern void MR_dumpPred();                                          /* MR10 */
740 extern void MR_dumpPred1();                                         /* MR10 */
741 extern void MR_xxxIndent();                                         /* MR11 */
742 extern void MR_stderrIndent();                                      /* MR11 */
743 extern void MR_outputIndent();                                      /* MR11 */
744 extern Junction * MR_ruleReferenced();                              /* MR10 */
745 extern void MR_releaseResourcesUsedInRule();                        /* MR10 */
746 extern void MR_dumpTreeX();                                         /* MR10 */
747 extern void MR_dumpTreeF();                                         /* MR10 */
748 extern void DumpFcache();                                           /* MR10 */
749 extern void MR_dumpTokenSet();                                      /* MR10 */
750 extern void MR_traceAmbSource();                                    /* MR11 */
751 extern Node *MR_advance();                                          /* MR11 */
752 extern int  MR_offsetFromRule();                                    /* MR11 */
753 extern char *MR_ruleNamePlusOffset();                               /* MR11 */
754 extern void MR_traceAmbSourceK();                                   /* MR11 */
755 extern void MR_traceAmbSourceKclient();                             /* [i_a] added */
756 extern int  MR_max_height_of_tree();                                /* MR11 */
757 extern int  MR_all_leaves_same_height();                            /* MR11 */
758 extern void MR_projectTreeOntoSet();                                /* MR11 */
759 extern Tree *MR_make_tree_from_set();                               /* MR11 */
760 extern Predicate *MR_removeRedundantPredPass3();                    /* MR11 */
761 extern void MR_pred_depth();                                        /* MR11 */
762 extern int  MR_comparePredicates();                                 /* MR11 */
763 extern Predicate * MR_unfold();                                     /* MR11 */
764 extern void MR_simplifyInverted();                                  /* MR11 */
765 extern int  MR_secondPredicateUnreachable();                        /* MR11 */
766 extern Junction * MR_nameToRuleBlk();                               /* MR10 */
767 extern void MR_clearPredEntry();                                    /* MR11 */
768 extern void MR_orphanRules();                                       /* MR12 */
769 extern void MR_merge_contexts();                                    /* MR12 */
770 extern int ci_strequ();                                              /* MR12 */
771 extern void MR_guardPred_plainSet();                                /* MR12c */
772 extern void MR_suppressSearchReport();                              /* MR12c */
773 extern Predicate * MR_suppressK();                                  /* MR13 */
774 extern void MR_backTraceDumpItem();                                 /* MR13 */
775 extern void MR_backTraceDumpItemReset();                            /* MR13 */
776 extern Junction * MR_junctionWithoutP2();                           /* MR13 */
777 extern void MR_setConstrainPointer();							 /* MR18 */
778 #endif
779 
780 #ifdef __USE_PROTOS
781 #include <stdlib.h>
782 #endif
783 
784 /* MR20 G. Hobbelt  Create proper externs for dlg variables */
785 
786 extern set attribsRefdFromAction;
787 extern int inAlt;
788 extern int UsedOldStyleAttrib;
789 extern int UsedNewStyleLabel;
790