2 * proto.h -- function prototypes
4 * $Id: proto.h,v 1.7 95/10/05 11:56:59 parrt Exp $
9 * We reserve no LEGAL rights to the Purdue Compiler Construction Tool
10 * Set (PCCTS) -- PCCTS is in the public domain. An individual or
11 * company may do whatever they wish with source code distributed with
12 * PCCTS or the code generated by PCCTS, including the incorporation of
13 * PCCTS, or its output, into commerical software.
15 * We encourage users to develop software with PCCTS. However, we do ask
16 * that credit is given to us for developing PCCTS. By "credit",
17 * we mean that if you incorporate our source code into one of your
18 * programs (commercial product, research project, or otherwise) that you
19 * acknowledge this fact somewhere in the documentation, research report,
20 * etc... If you like PCCTS and have developed a nice tool with the
21 * output, please mention that you developed it using PCCTS. In
22 * addition, we ask that this header remain intact in our source code.
23 * As long as these guidelines are kept, we expect to continue enhancing
24 * this system and expect to make other tools available as they are
29 * Parr Research Corporation
30 * with Purdue University and AHPCRC, University of Minnesota
34 /* V a r i a b l e s */
37 extern Junction *SynDiag;
38 extern char Version[];
39 extern char VersionDef[];
41 extern void (*fpPrint[])(...);
43 extern void (*fpPrint[])();
46 extern struct _set (*fpReach[])(...);
48 extern struct _set (*fpReach[])();
51 extern struct _tree *(*fpTraverse[])(...);
53 extern struct _tree *(*fpTraverse[])();
56 extern void (**fpTrans)(...);
58 extern void (**fpTrans)();
61 extern void (**fpJTrans)(...);
63 extern void (**fpJTrans)();
66 extern void (*C_Trans[NumNodeTypes+1])(...);
68 extern void (*C_Trans[])();
71 extern void (*C_JTrans[NumJuncTypes+1])(...);
73 extern void (*C_JTrans[])();
78 extern Junction *CurRuleBlk;
79 extern RuleEntry *CurRuleNode;
80 extern ListNode *CurElementLabels;
81 extern char *FileStr[];
84 extern int WildCardToken;
92 extern ListNode *ExprOrder;
93 extern ListNode **Cycles;
95 extern int LastTokenCounted;
96 extern ListNode *BeforeActions, *AfterActions, *LexActions;
97 extern ListNode *eclasses, *tclasses;
98 extern char *HdrAction;
100 extern char *RemapFileName;
101 extern char *ErrFileName;
102 extern char *DlgFileName;
103 extern char *DefFileName;
104 extern char *ModeFileName;
106 extern Junction **RulePtr;
109 extern char *decodeJType[];
111 extern int PrintAnnotate;
119 extern int **FoStack;
121 extern int GenExprSets;
122 extern FILE *DefFile;
123 extern int CannotContinue;
125 extern int GenLineInfo;
126 extern int action_file, action_line;
128 extern int CurAmbigAlt1, CurAmbigAlt2, CurAmbigline, CurAmbigfile;
129 extern char *CurAmbigbtype;
131 extern int GenEClasseForRules;
132 extern FILE *input, *output;
133 extern char **TokenStr, **ExprStr;
134 extern int CurrentLexClass, NumLexClasses;
135 extern LClass lclass[];
136 extern char LexStartSymbol[];
137 extern char *CurRetDef;
138 extern char *CurParmDef;
139 extern int OutputLL_k;
140 extern int TreeResourceLimit;
141 extern int DemandLookahead;
142 extern char *RulePrefix;
143 extern int GenStdPccts;
144 extern char *stdpccts;
145 extern int ParseWithPredicates;
146 extern int ConstrainSearch;
147 extern int FoundGuessBlk;
148 extern int FoundException;
149 extern int WarningLevel;
154 extern int HoistPredicateContext;
156 extern char *ParserName;
157 extern char *StandardSymbols[];
158 extern char *ASTSymbols[];
159 extern set reserved_positions;
160 extern set all_tokens;
161 extern set imag_tokens;
162 extern set tokclasses;
163 extern ListNode *ForcedTokens;
164 extern int *TokenInd;
165 extern FILE *Parser_h, *Parser_c;
166 extern char CurrentClassName[];
167 extern int no_classes_found;
168 extern char Parser_h_Name[];
169 extern char Parser_c_Name[];
170 extern ListNode *class_before_actions, *class_after_actions;
171 extern char *UserTokenDefsFile;
172 extern int UserDefdTokens;
173 extern ListNode *MetaTokenNodes;
174 extern char *OutputDirectory;
175 extern int DontCopyTokens;
176 extern set AST_nodes_refd_in_actions;
177 extern ListNode *CurExGroups;
178 extern int CurBlockID;
179 extern int CurAltNum;
180 extern Junction *CurAltStart;
181 extern ExceptionGroup *DefaultExGroup;
182 extern int NumSignals;
183 extern int ContextGuardTRAV;
188 extern void istackreset(void);
189 extern int istacksize(void);
190 extern void pushint(int);
191 extern int popint( void );
192 extern int istackempty( void );
193 extern int topint( void );
194 extern void NewSetWd( void );
195 extern void DumpSetWd( void );
196 extern void DumpSetWdForC( void );
197 extern void DumpSetWdForCC( void );
198 extern void NewSet( void );
199 extern void FillSet( set );
200 extern void ComputeErrorSets( void );
201 extern void ComputeTokSets( void );
202 extern void SubstErrorClass( set * );
203 extern int DefErrSet( set *, int, char * );
204 extern int DefErrSetForC( set *, int, char * );
205 extern int DefErrSetForCC( set *, int, char * );
206 extern void GenErrHdr( void );
207 extern void dumpExpr( FILE *, char * );
208 extern void addParm( Node *, char * );
209 extern Graph buildAction( char *, int, int, int );
210 extern Graph buildToken( char * );
211 extern Graph buildWildCard( char * );
212 extern Graph buildRuleRef( char * );
213 extern Graph Or( Graph, Graph );
214 extern Graph Cat( Graph, Graph );
215 extern Graph makeOpt( Graph, int );
216 extern Graph makeBlk( Graph, int );
217 extern Graph makeLoop( Graph, int );
218 extern Graph makePlus( Graph, int );
219 extern Graph emptyAlt( void );
220 extern TokNode * newTokNode( void );
221 extern RuleRefNode * newRNode( void );
222 extern Junction * newJunction( void );
223 extern ActionNode * newActionNode( void );
224 extern char * makelocks( void );
225 extern void preorder( Tree * );
226 extern Tree * tnode( int );
227 extern void _Tfree( Tree * );
228 extern Tree * tdup( Tree * );
229 extern int is_single_tuple( Tree * );
230 extern Tree * tappend( Tree *, Tree * );
231 extern void Tfree( Tree * );
232 extern Tree * tlink( Tree *, Tree *, int );
233 extern Tree * tshrink( Tree * );
234 extern Tree * tflatten( Tree * );
235 extern Tree * tJunc( Junction *, int, set * );
236 extern Tree * tRuleRef( RuleRefNode *, int, set * );
237 extern Tree * tToken( TokNode *, int, set * );
238 extern Tree * tAction( ActionNode *, int, set * );
239 extern int tmember( Tree *, Tree * );
240 extern int tmember_constrained( Tree *, Tree * );
241 extern Tree * tleft_factor( Tree * );
242 extern Tree * trm_perm( Tree *, Tree * );
243 extern void tcvt( set *, Tree * );
244 extern Tree * permute( int, int );
245 extern Tree * VerifyAmbig( Junction *, Junction *, unsigned **, set *, Tree **, Tree **, int * );
246 extern set rJunc( Junction *, int, set * );
247 extern set rRuleRef( RuleRefNode *, int, set * );
248 extern set rToken( TokNode *, int, set * );
249 extern set rAction( ActionNode *, int, set * );
250 extern void HandleAmbiguity( Junction *, Junction *, Junction *, int );
251 extern set First( Junction *, int, int, int * );
252 extern void freeBlkFsets( Junction * );
253 extern void genAction( ActionNode * );
254 extern void genRuleRef( RuleRefNode * );
255 extern void genToken( TokNode * );
256 extern void genOptBlk( Junction * );
257 extern void genLoopBlk( Junction *, Junction *, Junction *, int );
258 extern void genLoopBegin( Junction * );
259 extern void genPlusBlk( Junction * );
260 extern void genSubBlk( Junction * );
261 extern void genRule( Junction * );
262 extern void genJunction( Junction * );
263 extern void genEndBlk( Junction * );
264 extern void genEndRule( Junction * );
265 extern void genHdr( int );
266 extern void genHdr1( int );
267 extern void dumpAction( char *, FILE *, int, int, int, int );
268 extern Entry ** newHashTable( void );
269 extern Entry * hash_add( Entry **, char *, Entry * );
270 extern Entry * hash_get( Entry **, char * );
271 extern void hashStat( Entry ** );
272 extern char * mystrdup( char * );
273 extern void genLexDescr( void );
274 extern void dumpLexClasses( FILE * );
275 extern void genDefFile( void );
276 extern void DumpListOfParmNames( char *, FILE * );
277 extern int DumpNextNameInDef( char **, FILE * );
278 extern void DumpOldStyleParms( char *, FILE * );
279 extern void DumpType( char *, FILE * );
280 extern int strmember( char *, char * );
281 extern int HasComma( char * );
282 extern void DumpRetValStruct( FILE *, char *, int );
283 extern char * StripQuotes( char * );
284 extern int main( int, char *[] );
285 extern void readDescr( void );
286 extern FILE * NextFile( void );
287 extern char * outname( char * );
288 extern void fatalFL( char *, char *, int );
289 extern void fatal_intern( char *, char *, int );
290 extern void cleanUp( void );
291 extern char * eMsg3( char *, char *, char *, char * );
292 extern char * eMsgd( char *, int );
293 extern void s_fprT( FILE *, set );
294 extern char * TerminalString( int );
295 extern void lexclass( char * );
296 extern void lexmode( int );
297 extern int LexClassIndex( char * );
298 extern int hasAction( char * );
299 extern void setHasAction( char *, char * );
300 extern int addTname( char * );
301 extern int addTexpr( char * );
302 extern int Tnum( char * );
303 extern void Tklink( char *, char * );
304 extern Entry * newEntry( char *, int );
305 extern void list_add( ListNode **, void * );
306 extern void list_apply( ListNode *, void (*)(void *) );
307 extern char * Fkey( char *, int, int );
308 extern void FoPush( char *, int );
309 extern void FoPop( int );
310 extern void RegisterCycle( char *, int );
311 extern void ResolveFoCycles( int );
312 extern void pJunc( Junction * );
313 extern void pRuleRef( RuleRefNode * );
314 extern void pToken( TokNode * );
315 extern void pAction( ActionNode * );
316 extern void FoLink( Node * );
317 extern void addFoLink( Node *, char *, Junction * );
318 extern void GenCrossRef( Junction * );
319 extern void defErr( char *, long, long, long, long, long, long );
320 extern void genStdPCCTSIncludeFile(FILE *);
321 extern Predicate *find_predicates(Node *);
322 extern void GenRulePrototypes(FILE *, Junction *);
323 extern Junction *first_item_is_guess_block(Junction *);
324 extern Junction *analysis_point(Junction *);
325 extern Tree *make_tree_from_sets(set *, set *);
326 extern Tree *tdup_chain(Tree *);
327 extern Tree *tdif(Tree *, Predicate *, set *, set *);
328 extern set covered_set(Predicate *);
329 extern void AmbiguityDialog(Junction *, int, Junction *, Junction *, int *, int *);
330 extern void dumpAmbigMsg(set *, FILE *, int);
331 extern void GenRuleFuncRedefs(FILE *, Junction *);
332 extern void GenPredefinedSymbolRedefs(FILE *);
333 extern void GenASTSymbolRedefs(FILE *);
334 extern void GenRemapFile(void);
335 extern void GenSetRedefs(FILE *);
336 extern ForcedToken *newForcedToken(char *, int);
337 extern void RemapForcedTokens(void);
338 extern char *TokenOrExpr(int);
339 extern void setUpperRange(TokNode *, char *);
340 extern void GenParser_c_Hdr(void);
341 extern void GenParser_h_Hdr(void);
342 extern void GenRuleMemberDeclarationsForCC(FILE *, Junction *);
343 extern int addForcedTname( char *, int );
344 extern char *OutMetaName(char *);
345 extern void warnNoFL(char *err);
346 extern void warnFL(char *err,char *f,int l);
347 extern void warn(char *err);
348 extern void warnNoCR( char *err );
349 extern void errNoFL(char *err);
350 extern void errFL(char *err,char *f,int l);
351 extern void err(char *err);
352 extern void errNoCR( char *err );
353 extern Tree *tmake(Tree *root, ...);
354 extern void genPredTree( Predicate *p, Node *j, int );
355 extern UserAction *newUserAction(char *);
356 extern char *gate_symbol(char *name);
357 extern char *makeAltID(int blockid, int altnum);
358 extern void DumpRemainingTokSets();
359 extern void DumpANSIFunctionArgDef(FILE *f, Junction *q);
360 extern Predicate *computePredicateFromContextGuard(Graph);
361 extern Predicate *new_pred(void);
362 extern void chkGTFlag(void);
364 extern void istackreset();
365 extern int istacksize();
366 extern void pushint();
368 extern int istackempty();
370 extern void NewSetWd();
371 extern void DumpSetWd();
372 extern void DumpSetWdForC();
373 extern void DumpSetWdForCC();
374 extern void NewSet();
375 extern void FillSet();
376 extern void ComputeErrorSets();
377 extern void ComputeTokSets();
378 extern void SubstErrorClass();
379 extern int DefErrSet();
380 extern int DefErrSetForC();
381 extern int DefErrSetForCC();
382 extern void GenErrHdr();
383 extern void dumpExpr();
384 extern void addParm();
385 extern Graph buildAction();
386 extern Graph buildToken();
387 extern Graph buildWildCard();
388 extern Graph buildRuleRef();
391 extern Graph makeOpt();
392 extern Graph makeBlk();
393 extern Graph makeLoop();
394 extern Graph makePlus();
395 extern Graph emptyAlt();
396 extern TokNode * newTokNode();
397 extern RuleRefNode * newRNode();
398 extern Junction * newJunction();
399 extern ActionNode * newActionNode();
400 extern char * makelocks();
401 extern void preorder();
402 extern Tree * tnode();
403 extern void _Tfree();
404 extern Tree * tdup();
405 extern int is_single_tuple();
406 extern Tree * tappend();
408 extern Tree * tlink();
409 extern Tree * tshrink();
410 extern Tree * tflatten();
411 extern Tree * tJunc();
412 extern Tree * tRuleRef();
413 extern Tree * tToken();
414 extern Tree * tAction();
415 extern int tmember();
416 extern int tmember_constrained();
417 extern Tree * tleft_factor();
418 extern Tree * trm_perm();
420 extern Tree * permute();
421 extern Tree * VerifyAmbig();
423 extern set rRuleRef();
425 extern set rAction();
426 extern void HandleAmbiguity();
428 extern void freeBlkFsets();
429 extern void genAction();
430 extern void genRuleRef();
431 extern void genToken();
432 extern void genOptBlk();
433 extern void genLoopBlk();
434 extern void genLoopBegin();
435 extern void genPlusBlk();
436 extern void genSubBlk();
437 extern void genRule();
438 extern void genJunction();
439 extern void genEndBlk();
440 extern void genEndRule();
441 extern void genHdr();
442 extern void genHdr1();
443 extern void dumpAction();
444 extern Entry ** newHashTable();
445 extern Entry * hash_add();
446 extern Entry * hash_get();
447 extern void hashStat();
448 extern char * mystrdup();
449 extern void genLexDescr();
450 extern void dumpLexClasses();
451 extern void genDefFile();
452 extern void DumpListOfParmNames();
453 extern int DumpNextNameInDef();
454 extern void DumpOldStyleParms();
455 extern void DumpType();
456 extern int strmember();
457 extern int HasComma();
458 extern void DumpRetValStruct();
459 extern char * StripQuotes();
461 extern void readDescr();
462 extern FILE * NextFile();
463 extern char * outname();
464 extern void fatalFL();
465 extern void fatal_intern();
466 extern void cleanUp();
467 extern char * eMsg3();
468 extern char * eMsgd();
469 extern void s_fprT();
470 extern char * TerminalString();
471 extern void lexclass();
472 extern void lexmode();
473 extern int LexClassIndex();
474 extern int hasAction();
475 extern void setHasAction();
476 extern int addTname();
477 extern int addTexpr();
479 extern void Tklink();
480 extern Entry * newEntry();
481 extern void list_add();
482 extern void list_apply();
483 extern char * Fkey();
484 extern void FoPush();
486 extern void RegisterCycle();
487 extern void ResolveFoCycles();
489 extern void pRuleRef();
490 extern void pToken();
491 extern void pAction();
492 extern void FoLink();
493 extern void addFoLink();
494 extern void GenCrossRef();
495 extern void defErr();
496 extern void genStdPCCTSIncludeFile();
497 extern Predicate *find_predicates();
498 extern void GenRulePrototypes();
499 extern Junction *first_item_is_guess_block();
500 extern Junction *analysis_point();
501 extern Tree *make_tree_from_sets();
502 extern Tree *tdup_chain();
504 extern set covered_set();
505 extern void AmbiguityDialog();
506 extern void dumpAmbigMsg();
507 extern void GenRuleFuncRedefs();
508 extern void GenPredefinedSymbolRedefs();
509 extern void GenASTSymbolRedefs();
510 extern void GenRemapFile();
511 extern void GenSetRedefs();
512 extern ForcedToken *newForcedToken();
513 extern void RemapForcedTokens();
514 extern char *TokenOrExpr();
515 extern void setUpperRange();
516 extern void GenParser_c_Hdr();
517 extern void GenParser_h_Hdr();
518 extern void GenRuleMemberDeclarationsForCC();
519 extern int addForcedTname();
520 extern char *OutMetaName();
521 extern void warnNoFL();
522 extern void warnFL();
524 extern void warnNoCR();
525 extern void errNoFL();
528 extern void errNoCR();
529 extern Tree *tmake();
530 extern void genPredTree();
531 extern UserAction *newUserAction();
532 extern char *gate_symbol();
533 extern char *makeAltID();
534 extern void DumpRemainingTokSets();
535 extern void DumpANSIFunctionArgDef();
536 extern Predicate *computePredicateFromContextGuard();
537 extern Predicate *new_pred();
538 extern void chkGTFlag();