?? antlr.c
字號(hào):
/*
* A n t l r T r a n s l a t i o n H e a d e r
*
* Terence Parr, Will Cohen, and Hank Dietz: 1989-2001
* Purdue University Electrical Engineering
* With AHPCRC, University of Minnesota
* ANTLR Version 1.33MR33
*
* ..\bin\antlr -gh antlr.g
*
*/
#define ANTLR_VERSION 13333
#include "pcctscfg.h"
#include "pccts_stdio.h"
#include "pcctscfg.h"
#include "set.h"
#include <ctype.h>
#include "syn.h"
#include "hash.h"
#include "generic.h"
#define zzcr_attr(attr,tok,t)
#define zzSET_SIZE 20
#include "antlr.h"
#include "tokens.h"
#include "dlgdef.h"
#include "mode.h"
/* MR23 In order to remove calls to PURIFY use the antlr -nopurify option */
#ifndef PCCTS_PURIFY
#define PCCTS_PURIFY(r,s) memset((char *) &(r),'\0',(s));
#endif
ANTLR_INFO
/* MR20 G. Hobbelt For Borland C++ 4.x & 5.x compiling with ALL warnings enabled */
#if defined(__TURBOC__)
#pragma warn -aus /* unused assignment of 'xxx' */
#endif
#ifdef __USE_PROTOS
static void chkToken(char *, char *, char *, int);
#else
static void chkToken();
#endif
#ifdef __USE_PROTOS
static int isDLGmaxToken(char *Token); /* MR3 */
#else
static int isDLGmaxToken(); /* MR3 */
#endif
static int class_nest_level = 0;
/* MR20 G. Hobbelt extern definitions moved to antlr.h */
void
#ifdef __USE_PROTOS
grammar(void)
#else
grammar()
#endif
{
zzRULE;
zzBLOCK(zztasp1);
zzMake0;
{
Graph g;
{
zzBLOCK(zztasp2);
zzMake0;
{
for (;;) {
if ( !((setwd1[LA(1)]&0x1))) break;
if ( (LA(1)==94) ) {
zzmatch(94); zzCONSUME;
zzmatch(Action);
if ( HdrAction==NULL ) {
HdrAction = (char *) calloc(strlen(LATEXT(1))+1, sizeof(char));
require(HdrAction!=NULL, "rule grammar: cannot allocate header action");
strcpy(HdrAction, LATEXT(1));
}
else warn("additional #header statement ignored");
zzCONSUME;
}
else {
if ( (LA(1)==95) ) {
zzmatch(95); zzCONSUME;
zzmatch(Action);
if ( FirstAction==NULL ) {
FirstAction = (char *) calloc(strlen(LATEXT(1))+1, sizeof(char));
require(FirstAction!=NULL, "rule grammar: cannot allocate #first action");
strcpy(FirstAction, LATEXT(1));
} else {
warn("additional #first statement ignored");
};
zzCONSUME;
}
else {
if ( (LA(1)==96) ) {
zzmatch(96); zzCONSUME;
zzmatch(QuotedTerm);
if ( GenCC ) {
warn("#parser meta-op incompatible with -CC; ignored");
}
else {
if ( strcmp(ParserName,"zzparser")==0 ) {
ParserName=StripQuotes(mystrdup(LATEXT(1)));
if ( RulePrefix[0]!='\0' )
{
warn("#parser meta-op incompatible with '-gp prefix'; '-gp' ignored");
RulePrefix[0]='\0';
}
}
else warn("additional #parser statement ignored");
}
zzCONSUME;
}
else {
if ( (LA(1)==97) ) {
zzmatch(97); zzCONSUME;
zzmatch(QuotedTerm);
{
char *fname;
zzantlr_state st; FILE *f; struct zzdlg_state dst;
UserTokenDefsFile = mystrdup(LATEXT(1));
zzsave_antlr_state(&st);
zzsave_dlg_state(&dst);
fname = mystrdup(LATEXT(1));
f = fopen(StripQuotes(fname), "r");
if ( f==NULL ) {warn(eMsg1("cannot open token defs file '%s'", fname+1));}
else {
ANTLRm(enum_file(fname+1), f, PARSE_ENUM_FILE);
UserDefdTokens = 1;
}
zzrestore_antlr_state(&st);
zzrestore_dlg_state(&dst);
}
zzCONSUME;
}
else break; /* MR6 code for exiting loop "for sure" */
}
}
}
zzLOOP(zztasp2);
}
zzEXIT(zztasp2);
}
}
{
zzBLOCK(zztasp2);
zzMake0;
{
for (;;) {
if ( !((setwd1[LA(1)]&0x2))) break;
if ( (LA(1)==Action) ) {
zzmatch(Action);
{
UserAction *ua = newUserAction(LATEXT(1));
ua->file = action_file; ua->line = action_line;
if ( class_nest_level>0 ) list_add(&class_before_actions, ua);
else list_add(&BeforeActions, ua);
}
zzCONSUME;
}
else {
if ( (LA(1)==108) ) {
laction();
}
else {
if ( (LA(1)==109) ) {
lmember();
}
else {
if ( (LA(1)==110) ) {
lprefix();
}
else {
if ( (LA(1)==116) ) {
aLexclass();
}
else {
if ( (LA(1)==120) ) {
token();
}
else {
if ( (LA(1)==117) ) {
error();
}
else {
if ( (LA(1)==118) ) {
tclass();
}
else {
if ( (LA(1)==111) ) {
aPred();
}
else {
if ( (LA(1)==133) ) {
default_exception_handler();
}
else {
if ( (LA(1)==99) ) {
class_def();
}
else {
if ( (LA(1)==98) ) {
zzmatch(98);
if ( class_nest_level==0 )
warn("missing class definition for trailing '}'");
class_nest_level--;
zzCONSUME;
}
else break; /* MR6 code for exiting loop "for sure" */
}
}
}
}
}
}
}
}
}
}
}
zzLOOP(zztasp2);
}
zzEXIT(zztasp2);
}
}
rule();
g=zzaArg(zztasp1,3); SynDiag = (Junction *) zzaArg(zztasp1,3 ).left;
{
zzBLOCK(zztasp2);
zzMake0;
{
for (;;) {
if ( !((setwd1[LA(1)]&0x4))) break;
if ( (LA(1)==NonTerminal) ) {
rule();
if ( zzaArg(zztasp2,1 ).left!=NULL ) {
g.right = NULL;
/* MR21a */ /* Avoid use of a malformed graph when CannotContinue */
/* MR21a */ /* is already set */
/* MR21a */
/* MR21a */ if (! (CannotContinue && g.left == NULL)) {
/* MR21a */ g = Or(g, zzaArg(zztasp2,1));
/* MR21a */ }
/* MR21a */ }
}
else {
if ( (LA(1)==116) ) {
aLexclass();
}
else {
if ( (LA(1)==120) ) {
token();
}
else {
if ( (LA(1)==117) ) {
error();
}
else {
if ( (LA(1)==118) ) {
tclass();
}
else {
if ( (LA(1)==111) ) {
aPred();
}
else {
if ( (LA(1)==99) ) {
class_def();
}
else {
if ( (LA(1)==98) ) {
zzmatch(98);
if ( class_nest_level==0 )
warn("missing class definition for trailing '}'");
class_nest_level--;
zzCONSUME;
}
else break; /* MR6 code for exiting loop "for sure" */
}
}
}
}
}
}
}
zzLOOP(zztasp2);
}
zzEXIT(zztasp2);
}
}
{
zzBLOCK(zztasp2);
zzMake0;
{
for (;;) {
if ( !((setwd1[LA(1)]&0x8))) break;
if ( (LA(1)==Action) ) {
zzmatch(Action);
{
UserAction *ua = newUserAction(LATEXT(1));
ua->file = action_file; ua->line = action_line;
if ( class_nest_level>0 ) list_add(&class_after_actions, ua);
else list_add(&AfterActions, ua);
}
zzCONSUME;
}
else {
if ( (LA(1)==108) ) {
laction();
}
else {
if ( (LA(1)==109) ) {
lmember();
}
else {
if ( (LA(1)==110) ) {
lprefix();
}
else {
if ( (LA(1)==117) ) {
error();
}
else {
if ( (LA(1)==118) ) {
tclass();
}
else {
if ( (LA(1)==99) ) {
class_def();
}
else {
if ( (LA(1)==111) ) {
aPred();
}
else {
if ( (LA(1)==98) ) {
zzmatch(98);
if ( class_nest_level==0 )
warn("missing class definition for trailing '}'");
class_nest_level--;
zzCONSUME;
}
else break; /* MR6 code for exiting loop "for sure" */
}
}
}
}
}
}
}
}
zzLOOP(zztasp2);
}
zzEXIT(zztasp2);
}
}
zzmatch(Eof); zzCONSUME;
zzEXIT(zztasp1);
return;
fail:
zzEXIT(zztasp1);
CannotContinue=TRUE;
zzsyn(zzMissText, zzBadTok, (ANTLRChar *)"", zzMissSet, zzMissTok, zzErrk, zzBadText);
zzresynch(setwd1, 0x10);
}
}
void
#ifdef __USE_PROTOS
class_def(void)
#else
class_def()
#endif
{
zzRULE;
zzBLOCK(zztasp1);
zzMake0;
{
int go=1; char name[MaxRuleName+1];
zzmatch(99); zzCONSUME;
{
zzBLOCK(zztasp2);
zzMake0;
{
if ( (LA(1)==NonTerminal) ) {
zzmatch(NonTerminal);
if(go) strncpy(name,LATEXT(1),MaxRuleName);
zzCONSUME;
}
else {
if ( (LA(1)==TokenTerm) ) {
zzmatch(TokenTerm);
if(go) strncpy(name,LATEXT(1),MaxRuleName);
zzCONSUME;
}
else {zzFAIL(1,zzerr1,&zzMissSet,&zzMissText,&zzBadTok,&zzBadText,&zzErrk); goto fail;}
}
zzEXIT(zztasp2);
}
}
if ( CurrentClassName[0]!='\0' && strcmp(CurrentClassName,name)!=0
&& GenCC ) {
err("only one grammar class allowed in this release");
go = 0;
}
else strcpy(CurrentClassName, name);
if ( !GenCC ) { err("class meta-op used without C++ option"); }
{
zzBLOCK(zztasp2);
zzMake0;
{
while ( (setwd1[LA(1)]&0x20) ) {
zzsetmatch(zzerr2, zzerr3);
if (ClassDeclStuff == NULL) {
/* MR10 */ ClassDeclStuff=(char *)calloc(MaxClassDeclStuff+1,sizeof(char));
/* MR10 */ };
/* MR10 */ strncat(ClassDeclStuff," ",MaxClassDeclStuff);
/* MR10 */ strncat(ClassDeclStuff,LATEXT(1),MaxClassDeclStuff);
/* MR22 */ do {
/* MR22 */ if (0 == strcmp(LATEXT(1),"public")) break;
/* MR22 */ if (0 == strcmp(LATEXT(1),"private")) break;
/* MR22 */ if (0 == strcmp(LATEXT(1),"protected")) break;
/* MR22 */ if (0 == strcmp(LATEXT(1),"virtual")) break;
/* MR22 */ if (0 == strcmp(LATEXT(1),",")) break;
/* MR22 */ if (0 == strcmp(LATEXT(1),":")) break;
/* MR22 */ if (BaseClassName != NULL) break;
/* MR22 */ BaseClassName=(char *)calloc(strlen(LATEXT(1))+1,sizeof(char));
/* MR22 */ require(BaseClassName!=NULL, "rule grammar: cannot allocate base class name");
/* MR22 */ strcpy(BaseClassName,LATEXT(1));
/* MR22 */ } while (0);
/* MR10 */
zzCONSUME;
zzLOOP(zztasp2);
}
zzEXIT(zztasp2);
}
}
zzmatch(102);
no_classes_found = 0;
if ( class_nest_level>=1 ) {warn("cannot have nested classes");}
else class_nest_level++;
zzCONSUME;
zzEXIT(zztasp1);
return;
fail:
zzEXIT(zztasp1);
CannotContinue=TRUE;
zzsyn(zzMissText, zzBadTok, (ANTLRChar *)"", zzMissSet, zzMissTok, zzErrk, zzBadText);
zzresynch(setwd1, 0x40);
}
}
void
#ifdef __USE_PROTOS
rule(void)
#else
rule()
#endif
{
zzRULE;
zzBLOCK(zztasp1);
zzMake0;
{
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -