]>
git.proxmox.com Git - mirror_edk2.git/blob - BaseTools/Source/C/VfrCompile/Pccts/dlg/dlg_p.c
2 * A n t l r T r a n s l a t i o n H e a d e r
4 * Terence Parr, Will Cohen, and Hank Dietz: 1989-2001
5 * Purdue University Electrical Engineering
6 * With AHPCRC, University of Minnesota
7 * ANTLR Version 1.33MR33
9 * ..\bin\antlr dlg_p.g -gh
13 #define ANTLR_VERSION 13333
15 #include "pccts_stdio.h"
25 /* MR23 In order to remove calls to PURIFY use the antlr -nopurify option */
28 #define PCCTS_PURIFY(r,s) memset((char *) &(r),'\0',(s));
35 Fix for Borland C++ 4.x & 5.x compiling with ALL warnings enabled
39 #pragma warn -aus /* unused assignment of 'xxx' */
42 #pragma clang diagnostic ignored "-Wparentheses-equality"
44 int action_no
= 0; /* keep track of actions outputted */
45 int nfa_allocated
= 0; /* keeps track of number of nfa nodes */
46 nfa_node
**nfa_array
= NULL
;/* root of binary tree that stores nfa array */
47 nfa_node nfa_model_node
; /* model to initialize new nodes */
48 set used_chars
; /* used to label trans. arcs */
49 set used_classes
; /* classes or chars used to label trans. arcs */
50 set normal_chars
; /* mask to get rid elements that aren't used
52 int flag_paren
= FALSE
;
53 int flag_brace
= FALSE
;
54 int mode_counter
= 0; /* keep track of number of %%names */
69 p_head(); p_class_hdr(); func_action
= FALSE
;
74 while ( (setwd1
[LA(1)]&0x1) ) {
79 if ( (LA(1)==LEXACTION
) ) {
80 zzmatch(LEXACTION
); zzCONSUME
;
83 if ( (LA(1)==LEXMEMBER
) ) {
84 zzmatch(LEXMEMBER
); zzCONSUME
;
87 if ( (LA(1)==LEXPREFIX
) ) {
88 zzmatch(LEXPREFIX
); zzCONSUME
;
91 if ( (LA(1)==PARSERCLASS
) ) {
92 zzmatch(PARSERCLASS
); zzCONSUME
;
95 if ( (LA(1)==ACTION
) ) {
97 else {zzFAIL(1,zzerr1
,&zzMissSet
,&zzMissText
,&zzBadTok
,&zzBadText
,&zzErrk
); goto fail
;}
105 zzmatch(ACTION
); zzCONSUME
;
111 if ( gen_cpp
) p_includes();
113 func_action
= FALSE
; p_tables(); p_tail();
118 while ( (LA(1)==ACTION
) ) {
119 zzmatch(ACTION
); zzCONSUME
;
126 if (firstLexMember
!= 0) p_class_def1();
133 zzsyn(zzMissText
, zzBadTok
, (ANTLRChar
*)"", zzMissSet
, zzMissTok
, zzErrk
, zzBadText
);
134 zzresynch(setwd1
, 0x2);
153 if ( (LA(1)==PER_PER
) ) {
154 zzmatch(PER_PER
); zzCONSUME
;
158 if ( (LA(1)==NAME_PER_PER
) ) {
159 zzmatch(NAME_PER_PER
); zzCONSUME
;
165 while ( (LA(1)==NAME_PER_PER
) ) {
166 zzmatch(NAME_PER_PER
); zzCONSUME
;
174 else {zzFAIL(1,zzerr2
,&zzMissSet
,&zzMissText
,&zzBadTok
,&zzBadText
,&zzErrk
); goto fail
;}
179 zzmatch(PER_PER
); zzCONSUME
;
184 zzsyn(zzMissText
, zzBadTok
, (ANTLRChar
*)"", zzMissSet
, zzMissTok
, zzErrk
, zzBadText
);
185 zzresynch(setwd1
, 0x4);
200 new_automaton_mode(); func_action
= TRUE
;
203 dfa_class_nop
[mode_counter
] =
204 relabel(zzaArg(zztasp1
,1 ).l
,comp_level
);
206 p_shift_table(mode_counter
);
207 dfa_basep
[mode_counter
] = dfa_allocated
+1;
208 make_dfa_model_node(dfa_class_nop
[mode_counter
]);
209 nfa_to_dfa(zzaArg(zztasp1
,1 ).l
);
213 fprint_hash_stats(stderr
);
219 zzsyn(zzMissText
, zzBadTok
, (ANTLRChar
*)"", zzMissSet
, zzMissTok
, zzErrk
, zzBadText
);
220 zzresynch(setwd1
, 0x8);
235 if ( (setwd1
[LA(1)]&0x10) ) {
237 zzaRet
.l
=zzaArg(zztasp1
,1 ).l
; zzaRet
.r
=zzaArg(zztasp1
,1 ).r
;
242 while ( (setwd1
[LA(1)]&0x20) ) {
246 (t1
)->trans
[0]=zzaRet
.l
;
247 (t1
)->trans
[1]=zzaArg(zztasp2
,1 ).l
;
248 /* all accept nodes "dead ends" */
249 zzaRet
.l
=t1
; zzaRet
.r
=NULL
;
258 if ( (setwd1
[LA(1)]&0x40) ) {
259 zzaRet
.l
= new_nfa_node(); zzaRet
.r
= NULL
;
260 warning("no regular expressions", zzline
);
262 else {zzFAIL(1,zzerr3
,&zzMissSet
,&zzMissText
,&zzBadTok
,&zzBadText
,&zzErrk
); goto fail
;}
268 zzsyn(zzMissText
, zzBadTok
, (ANTLRChar
*)"", zzMissSet
, zzMissTok
, zzErrk
, zzBadText
);
269 zzresynch(setwd1
, 0x80);
284 if ( (setwd2
[LA(1)]&0x1) ) {
287 if (zzaArg(zztasp1
,1 ).r
!= NULL
) {
288 zzaRet
.l
=zzaArg(zztasp1
,1 ).l
; zzaRet
.r
=zzaArg(zztasp1
,1 ).r
; (zzaArg(zztasp1
,1 ).r
)->accept
=action_no
;
294 if ( (LA(1)==ACTION
) ) {
296 zzaRet
.l
= NULL
; zzaRet
.r
= NULL
;
297 error("no expression for action ", zzline
);
301 else {zzFAIL(1,zzerr4
,&zzMissSet
,&zzMissText
,&zzBadTok
,&zzBadText
,&zzErrk
); goto fail
;}
307 zzsyn(zzMissText
, zzBadTok
, (ANTLRChar
*)"", zzMissSet
, zzMissTok
, zzErrk
, zzBadText
);
308 zzresynch(setwd2
, 0x2);
324 zzaRet
.l
=zzaArg(zztasp1
,1 ).l
; zzaRet
.r
=zzaArg(zztasp1
,1 ).r
;
329 while ( (LA(1)==OR
) ) {
330 zzmatch(OR
); zzCONSUME
;
333 t1
= new_nfa_node(); t2
= new_nfa_node();
334 (t1
)->trans
[0]=zzaRet
.l
;
335 (t1
)->trans
[1]=zzaArg(zztasp2
,2 ).l
;
336 /* MR23 */ if (zzaRet
.r
!= NULL
) (zzaRet
.r
)->trans
[1]=t2
;
337 if (zzaArg(zztasp2
,2 ).r
) {
338 (zzaArg(zztasp2
,2 ).r
)->trans
[1]=t2
; /* MR20 */
340 zzaRet
.l
=t1
; zzaRet
.r
=t2
;
351 zzsyn(zzMissText
, zzBadTok
, (ANTLRChar
*)"", zzMissSet
, zzMissTok
, zzErrk
, zzBadText
);
352 zzresynch(setwd2
, 0x4);
369 zzaRet
.l
=zzaArg(zztasp1
,1 ).l
; zzaRet
.r
=zzaArg(zztasp1
,1 ).r
;
374 while ( (setwd2
[LA(1)]&0x8) ) {
376 if (zzaRet
.r
!= NULL
) {
377 (zzaRet
.r
)->trans
[1]=zzaArg(zztasp2
,1 ).l
;
378 zzaRet
.r
=zzaArg(zztasp2
,1 ).r
;
389 zzsyn(zzMissText
, zzBadTok
, (ANTLRChar
*)"", zzMissSet
, zzMissTok
, zzErrk
, zzBadText
);
390 zzresynch(setwd2
, 0x10);
405 if ( (setwd2
[LA(1)]&0x20) ) {
407 zzaRet
.l
=zzaArg(zztasp1
,1 ).l
; zzaRet
.r
=zzaArg(zztasp1
,1 ).r
;
412 if ( (LA(1)==ZERO_MORE
) ) {
415 /* MR23 */ if (zzaRet
.r
!= NULL
) (zzaRet
.r
)->trans
[0] = zzaRet
.l
;
416 t1
= new_nfa_node(); t2
= new_nfa_node();
417 t1
->trans
[0]=zzaRet
.l
;
419 /* MR23 */ if (zzaRet
.r
!= NULL
) (zzaRet
.r
)->trans
[1]=t2
;
420 zzaRet
.l
=t1
;zzaRet
.r
=t2
;
426 if ( (LA(1)==ONE_MORE
) ) {
428 if (zzaRet
.r
!= NULL
) (zzaRet
.r
)->trans
[0] = zzaRet
.l
;
433 if ( (setwd2
[LA(1)]&0x40) ) {
435 else {zzFAIL(1,zzerr5
,&zzMissSet
,&zzMissText
,&zzBadTok
,&zzBadText
,&zzErrk
); goto fail
;}
443 if ( (LA(1)==ZERO_MORE
) ) {
445 error("no expression for *", zzline
);
450 if ( (LA(1)==ONE_MORE
) ) {
452 error("no expression for +", zzline
);
456 else {zzFAIL(1,zzerr6
,&zzMissSet
,&zzMissText
,&zzBadTok
,&zzBadText
,&zzErrk
); goto fail
;}
463 zzsyn(zzMissText
, zzBadTok
, (ANTLRChar
*)"", zzMissSet
, zzMissTok
, zzErrk
, zzBadText
);
464 zzresynch(setwd2
, 0x80);
479 zzaRet
.l
= new_nfa_node();
480 zzaRet
.r
= new_nfa_node();
481 if ( (LA(1)==L_BRACK
) ) {
482 zzmatch(L_BRACK
); zzCONSUME
;
486 /* MR23 */ if (zzaRet
.l
!= NULL
) {
487 (zzaRet
.l
)->trans
[0] = zzaRet
.r
;
488 (zzaRet
.l
)->label
= set_dup(zzaArg(zztasp1
,2 ).label
);
489 set_orin(&used_chars
,(zzaRet
.l
)->label
);
495 if ( (LA(1)==NOT
) ) {
496 zzmatch(NOT
); zzCONSUME
;
497 zzmatch(L_BRACK
); zzCONSUME
;
501 /* MR23 */ if (zzaRet
.l
!= NULL
) {
502 (zzaRet
.l
)->trans
[0] = zzaRet
.r
;
503 (zzaRet
.l
)->label
= set_dif(normal_chars
,zzaArg(zztasp1
,3 ).label
);
504 set_orin(&used_chars
,(zzaRet
.l
)->label
);
510 if ( (LA(1)==L_PAR
) ) {
511 zzmatch(L_PAR
); zzCONSUME
;
515 /* MR23 */ if (zzaRet
.l
!= NULL
) {
516 (zzaRet
.l
)->trans
[0] = zzaArg(zztasp1
,2 ).l
;
517 if (zzaArg(zztasp1
,2 ).r
) {
518 (zzaArg(zztasp1
,2 ).r
)->trans
[1] = zzaRet
.r
; /* MR20 */
525 if ( (LA(1)==L_BRACE
) ) {
526 zzmatch(L_BRACE
); zzCONSUME
;
530 /* MR23 */ if (zzaRet
.l
!= NULL
) {
531 (zzaRet
.l
)->trans
[0] = zzaArg(zztasp1
,2 ).l
;
532 (zzaRet
.l
)->trans
[1] = zzaRet
.r
;
533 if (zzaArg(zztasp1
,2 ).r
) {
534 (zzaArg(zztasp1
,2 ).r
)->trans
[1] = zzaRet
.r
; /* MR20 */
541 if ( (setwd3
[LA(1)]&0x1) ) {
544 /* MR23 */ if (zzaRet
.l
!= NULL
) {
545 (zzaRet
.l
)->trans
[0] = zzaRet
.r
;
546 (zzaRet
.l
)->label
= set_dup(zzaArg(zztasp1
,1 ).label
);
547 set_orin(&used_chars
,(zzaRet
.l
)->label
);
550 else {zzFAIL(1,zzerr7
,&zzMissSet
,&zzMissText
,&zzBadTok
,&zzBadText
,&zzErrk
); goto fail
;}
559 zzsyn(zzMissText
, zzBadTok
, (ANTLRChar
*)"", zzMissSet
, zzMissTok
, zzErrk
, zzBadText
);
560 zzresynch(setwd3
, 0x2);
575 set_free(zzaRet
.label
);
580 while ( (setwd3
[LA(1)]&0x4) ) {
582 set_orin(&(zzaRet
.label
),zzaArg(zztasp2
,1 ).label
);
592 zzsyn(zzMissText
, zzBadTok
, (ANTLRChar
*)"", zzMissSet
, zzMissTok
, zzErrk
, zzBadText
);
593 zzresynch(setwd3
, 0x8);
609 register int i_prime
;
611 zzaRet
.letter
=zzaArg(zztasp1
,1 ).letter
; zzaRet
.label
=set_of(zzaArg(zztasp1
,1 ).letter
);
612 i_prime
= zzaArg(zztasp1
,1 ).letter
+ MIN_CHAR
;
613 if (case_insensitive
&& islower(i_prime
))
614 set_orel(toupper(i_prime
)-MIN_CHAR
,
616 if (case_insensitive
&& isupper(i_prime
))
617 set_orel(tolower(i_prime
)-MIN_CHAR
,
623 if ( (LA(1)==RANGE
) ) {
624 zzmatch(RANGE
); zzCONSUME
;
626 if (case_insensitive
){
627 i_prime
= zzaRet
.letter
+MIN_CHAR
;
628 zzaRet
.letter
= (islower(i_prime
) ?
629 toupper(i_prime
) : i_prime
)-MIN_CHAR
;
630 i_prime
= zzaArg(zztasp2
,2 ).letter
+MIN_CHAR
;
631 zzaArg(zztasp2
,2 ).letter
= (islower(i_prime
) ?
632 toupper(i_prime
) : i_prime
)-MIN_CHAR
;
634 /* check to see if range okay */
636 int debugLetter1
= zzaRet
.letter
;
637 int debugLetter2
= zzaArg(zztasp2
,2 ).letter
;
639 if (zzaRet
.letter
> zzaArg(zztasp2
,2 ).letter
640 && zzaArg(zztasp2
,2 ).letter
!= 0xff){ /* MR16 */
641 error("invalid range ", zzline
);
643 for (i
=zzaRet
.letter
; i
<= (int)zzaArg(zztasp2
,2 ).letter
; ++i
){
644 set_orel(i
,&(zzaRet
.label
));
645 i_prime
= i
+MIN_CHAR
;
646 if (case_insensitive
&& islower(i_prime
))
647 set_orel(toupper(i_prime
)-MIN_CHAR
,
649 if (case_insensitive
&& isupper(i_prime
))
650 set_orel(tolower(i_prime
)-MIN_CHAR
,
655 if ( (setwd3
[LA(1)]&0x10) ) {
657 else {zzFAIL(1,zzerr8
,&zzMissSet
,&zzMissText
,&zzBadTok
,&zzBadText
,&zzErrk
); goto fail
;}
666 zzsyn(zzMissText
, zzBadTok
, (ANTLRChar
*)"", zzMissSet
, zzMissTok
, zzErrk
, zzBadText
);
667 zzresynch(setwd3
, 0x20);
682 register int i_prime
;
684 zzaRet
.label
= set_of(zzaArg(zztasp1
,1 ).letter
);
685 i_prime
= zzaArg(zztasp1
,1 ).letter
+ MIN_CHAR
;
686 if (case_insensitive
&& islower(i_prime
))
687 set_orel(toupper(i_prime
)-MIN_CHAR
,
689 if (case_insensitive
&& isupper(i_prime
))
690 set_orel(tolower(i_prime
)-MIN_CHAR
,
696 zzsyn(zzMissText
, zzBadTok
, (ANTLRChar
*)"", zzMissSet
, zzMissTok
, zzErrk
, zzBadText
);
697 zzresynch(setwd3
, 0x40);
712 if ( (LA(1)==REGCHAR
) ) {
714 zzaRet
.letter
= zzaArg(zztasp1
,1 ).letter
- MIN_CHAR
;
719 if ( (LA(1)==OCTAL_VALUE
) ) {
720 zzmatch(OCTAL_VALUE
);
721 zzaRet
.letter
= zzaArg(zztasp1
,1 ).letter
- MIN_CHAR
;
726 if ( (LA(1)==HEX_VALUE
) ) {
728 zzaRet
.letter
= zzaArg(zztasp1
,1 ).letter
- MIN_CHAR
;
733 if ( (LA(1)==DEC_VALUE
) ) {
735 zzaRet
.letter
= zzaArg(zztasp1
,1 ).letter
- MIN_CHAR
;
740 if ( (LA(1)==TAB
) ) {
742 zzaRet
.letter
= zzaArg(zztasp1
,1 ).letter
- MIN_CHAR
;
749 zzaRet
.letter
= zzaArg(zztasp1
,1 ).letter
- MIN_CHAR
;
756 zzaRet
.letter
= zzaArg(zztasp1
,1 ).letter
- MIN_CHAR
;
763 zzaRet
.letter
= zzaArg(zztasp1
,1 ).letter
- MIN_CHAR
;
768 if ( (LA(1)==LIT
) ) {
770 zzaRet
.letter
= zzaArg(zztasp1
,1 ).letter
- MIN_CHAR
;
775 if ( (LA(1)==L_EOF
) ) {
781 else {zzFAIL(1,zzerr9
,&zzMissSet
,&zzMissText
,&zzBadTok
,&zzBadText
,&zzErrk
); goto fail
;}
796 zzsyn(zzMissText
, zzBadTok
, (ANTLRChar
*)"", zzMissSet
, zzMissTok
, zzErrk
, zzBadText
);
797 zzresynch(setwd3
, 0x80);
801 /* adds a new nfa to the binary tree and returns a pointer to it */
809 register nfa_node
*t
;
810 static int nfa_size
=0; /* elements nfa_array[] can hold */
813 if (nfa_size
<=nfa_allocated
){
814 /* need to redo array */
816 /* need some to do inital allocation */
817 nfa_size
=nfa_allocated
+NFA_MIN
;
818 nfa_array
=(nfa_node
**) malloc(sizeof(nfa_node
*)*
821 /* need more space */
822 nfa_size
=2*(nfa_allocated
+1);
823 nfa_array
=(nfa_node
**) realloc(nfa_array
,
824 sizeof(nfa_node
*)*nfa_size
);
827 /* fill out entry in array */
828 t
= (nfa_node
*) malloc(sizeof(nfa_node
));
829 nfa_array
[nfa_allocated
] = t
;
831 t
->node_no
= nfa_allocated
;
836 /* initialize the model node used to fill in newly made nfa_nodes */
839 make_nfa_model_node(void)
841 make_nfa_model_node()
844 nfa_model_node
.node_no
= -1; /* impossible value for real nfa node */
845 nfa_model_node
.nfa_set
= 0;
846 nfa_model_node
.accept
= 0; /* error state default*/
847 nfa_model_node
.trans
[0] = NULL
;
848 nfa_model_node
.trans
[1] = NULL
;
849 nfa_model_node
.label
= empty
;
852 #if defined(DEBUG) || defined(_DEBUG)
854 /* print out the pointer value and the node_number */
857 fprint_dfa_pair(FILE *f
, nfa_node
*p
)
859 fprint_dfa_pair(f
, p
)
865 fprintf(f
, "%x (%d)", p
, p
->node_no
);
871 /* print out interest information on a set */
874 fprint_set(FILE *f
, set s
)
883 fprintf(f
, "n = %d,", s
.n
);
885 fprintf(f
, "setword = %x, ", s
.setword
);
886 /* print out all the elements in the set */
889 fprintf(f
, "%d ", *x
);
893 fprintf(f
, "setword = (nil)");
897 /* code to be able to dump out the nfas
898 return 0 if okay dump
899 return 1 if screwed up
903 dump_nfas(int first_node
, int last_node
)
905 dump_nfas(first_node
, last_node
)
913 for (i
=first_node
; i
<=last_node
; ++i
){
916 fprintf(stderr
, "nfa_node %d {\n", t
->node_no
);
917 fprintf(stderr
, "\n\tnfa_set = %d\n", t
->nfa_set
);
918 fprintf(stderr
, "\taccept\t=\t%d\n", t
->accept
);
919 fprintf(stderr
, "\ttrans\t=\t(");
920 fprint_dfa_pair(stderr
, t
->trans
[0]);
921 fprintf(stderr
, ",");
922 fprint_dfa_pair(stderr
, t
->trans
[1]);
923 fprintf(stderr
, ")\n");
924 fprintf(stderr
, "\tlabel\t=\t{ ");
925 fprint_set(stderr
, t
->label
);
926 fprintf(stderr
, "\t}\n");
927 fprintf(stderr
, "}\n\n");
933 /* DLG-specific syntax error message generator
934 * (define USER_ZZSYN when compiling so don't get 2 definitions)
938 zzsyn(char *text
, int tok
, char *egroup
, SetWordType
*eset
, int etok
, int k
, char *bad_text
)
940 zzsyn(text
, tok
, egroup
, eset
, etok
, k
, bad_text
)
941 char *text
, *egroup
, *bad_text
;
948 fprintf(stderr
, ErrHdr
, file_str
[0]!=NULL
?file_str
[0]:"stdin", zzline
);
949 fprintf(stderr
, " syntax error at \"%s\"", (tok
==zzEOF_TOKEN
)?"EOF":text
);
950 if ( !etok
&& !eset
) {fprintf(stderr
, "\n"); return;}
951 if ( k
==1 ) fprintf(stderr
, " missing");
954 fprintf(stderr
, "; \"%s\" not", bad_text
);
955 if ( zzset_deg(eset
)>1 ) fprintf(stderr
, " in");
957 if ( zzset_deg(eset
)>0 ) zzedecode(eset
);
958 else fprintf(stderr
, " %s", zztokens
[etok
]);
959 if ( strlen(egroup
) > (size_t)0 ) fprintf(stderr
, " in %s", egroup
);
960 fprintf(stderr
, "\n");