⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 dlg_p.c

📁 本工具提供一个词法分析器和语法分析器的集成开发环境
💻 C
📖 第 1 页 / 共 2 页
字号:
/* * 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-1998 * Purdue University Electrical Engineering * With AHPCRC, University of Minnesota * ANTLR Version 1.33MR14 * *   ../bin/antlr dlg_p.g * */#define ANTLR_VERSION	13314#include "pcctscfg.h"#include PCCTS_STDIO_H#include <ctype.h>#include "dlg.h"#ifdef MEMCHK#include "trax.h"#endif#define zzSET_SIZE 8#include "antlr.h"#include "tokens.h"#include "dlgdef.h"#include "mode.h"#ifndef PURIFY#define PURIFY(r,s) memset((char *) &(r),'\0',(s));#endifANTLR_INFOint	action_no = 0;	   /* keep track of actions outputed */int	nfa_allocated = 0; /* keeps track of number of nfa nodes */nfa_node **nfa_array = NULL;/* root of binary tree that stores nfa array */nfa_node nfa_model_node;   /* model to initialize new nodes */set	used_chars;	   /* used to label trans. arcs */set	used_classes;	   /* classes or chars used to label trans. arcs */set	normal_chars;	   /* mask to get rid elements that aren't usedin set */int	flag_paren = FALSE;int	flag_brace = FALSE;int	mode_counter = 0;  /* keep track of number of %%names */void#ifdef __USE_PROTOSgrammar(void)#elsegrammar()#endif{	zzRULE;	zzBLOCK(zztasp1);	zzMake0;	{	p_head(); p_class_hdr(); func_action = FALSE;	{		zzBLOCK(zztasp2);		zzMake0;		{		while ( (setwd1[LA(1)]&0x1) ) {			{				zzBLOCK(zztasp3);				zzMake0;				{				if ( (LA(1)==LEXACTION) ) {					zzmatch(LEXACTION); zzCONSUME;				}				else {					if ( (LA(1)==LEXMEMBER) ) {						zzmatch(LEXMEMBER); zzCONSUME;					}					else {						if ( (LA(1)==LEXPREFIX) ) {							zzmatch(LEXPREFIX); zzCONSUME;						}						else {							if ( (LA(1)==PARSERCLASS) ) {								zzmatch(PARSERCLASS); zzCONSUME;							}						}					}				}				zzEXIT(zztasp3);				}			}			zzmatch(ACTION); zzCONSUME;			zzLOOP(zztasp2);		}		zzEXIT(zztasp2);		}	}	if ( gen_cpp ) p_includes();	start_states();	func_action = FALSE; p_tables(); p_tail();	{		zzBLOCK(zztasp2);		zzMake0;		{		while ( (LA(1)==ACTION) ) {			zzmatch(ACTION); zzCONSUME;			zzLOOP(zztasp2);		}		zzEXIT(zztasp2);		}	}	zzmatch(1);	if (firstLexMember != 0) p_class_def1(); zzCONSUME;	zzEXIT(zztasp1);	return;fail:	zzEXIT(zztasp1);	zzsyn(zzMissText, zzBadTok, (ANTLRChar *)"", zzMissSet, zzMissTok, zzErrk, zzBadText);	zzresynch(setwd1, 0x2);	}}void#ifdef __USE_PROTOSstart_states(void)#elsestart_states()#endif{	zzRULE;	zzBLOCK(zztasp1);	zzMake0;	{	{		zzBLOCK(zztasp2);		zzMake0;		{		if ( (LA(1)==PER_PER) ) {			zzmatch(PER_PER); zzCONSUME;			do_conversion();		}		else {			if ( (LA(1)==NAME_PER_PER) ) {				zzmatch(NAME_PER_PER); zzCONSUME;				do_conversion();				{					zzBLOCK(zztasp3);					zzMake0;					{					while ( (LA(1)==NAME_PER_PER) ) {						zzmatch(NAME_PER_PER); zzCONSUME;						do_conversion();						zzLOOP(zztasp3);					}					zzEXIT(zztasp3);					}				}			}			else {zzFAIL(1,zzerr1,&zzMissSet,&zzMissText,&zzBadTok,&zzBadText,&zzErrk); goto fail;}		}		zzEXIT(zztasp2);		}	}	zzmatch(PER_PER); zzCONSUME;	zzEXIT(zztasp1);	return;fail:	zzEXIT(zztasp1);	zzsyn(zzMissText, zzBadTok, (ANTLRChar *)"", zzMissSet, zzMissTok, zzErrk, zzBadText);	zzresynch(setwd1, 0x4);	}}void#ifdef __USE_PROTOSdo_conversion(void)#elsedo_conversion()#endif{	zzRULE;	zzBLOCK(zztasp1);	zzMake0;	{	new_automaton_mode(); func_action = TRUE;	rule_list();		dfa_class_nop[mode_counter] =	relabel(zzaArg(zztasp1,1 ).l,comp_level);	if (comp_level)	p_shift_table(mode_counter);	dfa_basep[mode_counter] = dfa_allocated+1;	make_dfa_model_node(dfa_class_nop[mode_counter]);	nfa_to_dfa(zzaArg(zztasp1,1 ).l);	++mode_counter;	func_action = FALSE;#ifdef HASH_STAT	fprint_hash_stats(stderr);#endif	zzEXIT(zztasp1);	return;fail:	zzEXIT(zztasp1);	zzsyn(zzMissText, zzBadTok, (ANTLRChar *)"", zzMissSet, zzMissTok, zzErrk, zzBadText);	zzresynch(setwd1, 0x8);	}}void#ifdef __USE_PROTOSrule_list(void)#elserule_list()#endif{	zzRULE;	zzBLOCK(zztasp1);	zzMake0;	{	if ( (setwd1[LA(1)]&0x10) ) {		rule();		zzaRet.l=zzaArg(zztasp1,1 ).l; zzaRet.r=zzaArg(zztasp1,1 ).r;		{			zzBLOCK(zztasp2);			zzMake0;			{			while ( (setwd1[LA(1)]&0x20) ) {				rule();				{nfa_node *t1;					t1 = new_nfa_node();					(t1)->trans[0]=zzaRet.l;					(t1)->trans[1]=zzaArg(zztasp2,1 ).l;					/* all accept nodes "dead ends" */					zzaRet.l=t1; zzaRet.r=NULL;				}				zzLOOP(zztasp2);			}			zzEXIT(zztasp2);			}		}	}	else {		if ( (setwd1[LA(1)]&0x40) ) {			zzaRet.l = new_nfa_node(); zzaRet.r = NULL;			warning("no regular expressions", zzline);		}		else {zzFAIL(1,zzerr2,&zzMissSet,&zzMissText,&zzBadTok,&zzBadText,&zzErrk); goto fail;}	}	zzEXIT(zztasp1);	return;fail:	zzEXIT(zztasp1);	zzsyn(zzMissText, zzBadTok, (ANTLRChar *)"", zzMissSet, zzMissTok, zzErrk, zzBadText);	zzresynch(setwd1, 0x80);	}}void#ifdef __USE_PROTOSrule(void)#elserule()#endif{	zzRULE;	zzBLOCK(zztasp1);	zzMake0;	{	if ( (setwd2[LA(1)]&0x1) ) {		reg_expr();		zzmatch(ACTION);		zzaRet.l=zzaArg(zztasp1,1 ).l; zzaRet.r=zzaArg(zztasp1,1 ).r; (zzaArg(zztasp1,1 ).r)->accept=action_no; zzCONSUME;	}	else {		if ( (LA(1)==ACTION) ) {			zzmatch(ACTION);			zzaRet.l = NULL; zzaRet.r = NULL;			error("no expression for action  ", zzline); zzCONSUME;		}		else {zzFAIL(1,zzerr3,&zzMissSet,&zzMissText,&zzBadTok,&zzBadText,&zzErrk); goto fail;}	}	zzEXIT(zztasp1);	return;fail:	zzEXIT(zztasp1);	zzsyn(zzMissText, zzBadTok, (ANTLRChar *)"", zzMissSet, zzMissTok, zzErrk, zzBadText);	zzresynch(setwd2, 0x2);	}}void#ifdef __USE_PROTOSreg_expr(void)#elsereg_expr()#endif{	zzRULE;	zzBLOCK(zztasp1);	zzMake0;	{	and_expr();	zzaRet.l=zzaArg(zztasp1,1 ).l; zzaRet.r=zzaArg(zztasp1,1 ).r;	{		zzBLOCK(zztasp2);		zzMake0;		{		while ( (LA(1)==OR) ) {			zzmatch(OR); zzCONSUME;			and_expr();			{nfa_node *t1, *t2;				t1 = new_nfa_node(); t2 = new_nfa_node();				(t1)->trans[0]=zzaRet.l;				(t1)->trans[1]=zzaArg(zztasp2,2 ).l;				(zzaRet.r)->trans[1]=t2;				(zzaArg(zztasp2,2 ).r)->trans[1]=t2;				zzaRet.l=t1; zzaRet.r=t2;			}			zzLOOP(zztasp2);		}		zzEXIT(zztasp2);		}	}	zzEXIT(zztasp1);	return;fail:	zzEXIT(zztasp1);	zzsyn(zzMissText, zzBadTok, (ANTLRChar *)"", zzMissSet, zzMissTok, zzErrk, zzBadText);	zzresynch(setwd2, 0x4);	}}void#ifdef __USE_PROTOSand_expr(void)#elseand_expr()#endif{	zzRULE;	zzBLOCK(zztasp1);	zzMake0;	{	repeat_expr();	zzaRet.l=zzaArg(zztasp1,1 ).l; zzaRet.r=zzaArg(zztasp1,1 ).r;	{		zzBLOCK(zztasp2);		zzMake0;		{		while ( (setwd2[LA(1)]&0x8) ) {			repeat_expr();			(zzaRet.r)->trans[1]=zzaArg(zztasp2,1 ).l; zzaRet.r=zzaArg(zztasp2,1 ).r;			zzLOOP(zztasp2);		}		zzEXIT(zztasp2);		}	}	zzEXIT(zztasp1);	return;fail:	zzEXIT(zztasp1);	zzsyn(zzMissText, zzBadTok, (ANTLRChar *)"", zzMissSet, zzMissTok, zzErrk, zzBadText);	zzresynch(setwd2, 0x10);	}}void#ifdef __USE_PROTOSrepeat_expr(void)#elserepeat_expr()#endif{	zzRULE;	zzBLOCK(zztasp1);	zzMake0;	{	if ( (setwd2[LA(1)]&0x20) ) {		expr();		zzaRet.l=zzaArg(zztasp1,1 ).l; zzaRet.r=zzaArg(zztasp1,1 ).r;		{			zzBLOCK(zztasp2);			zzMake0;			{			if ( (LA(1)==ZERO_MORE) ) {				zzmatch(ZERO_MORE);				{	nfa_node *t1,*t2;					(zzaRet.r)->trans[0] = zzaRet.l;					t1 = new_nfa_node(); t2 = new_nfa_node();					t1->trans[0]=zzaRet.l;					t1->trans[1]=t2;					(zzaRet.r)->trans[1]=t2;					zzaRet.l=t1;zzaRet.r=t2;				} zzCONSUME;			}			else {				if ( (LA(1)==ONE_MORE) ) {					zzmatch(ONE_MORE);					(zzaRet.r)->trans[0] = zzaRet.l; zzCONSUME;				}			}			zzEXIT(zztasp2);			}		}	}	else {		if ( (LA(1)==ZERO_MORE) ) {			zzmatch(ZERO_MORE);			error("no expression for *", zzline); zzCONSUME;		}		else {			if ( (LA(1)==ONE_MORE) ) {				zzmatch(ONE_MORE);				error("no expression for +", zzline); zzCONSUME;			}			else {zzFAIL(1,zzerr4,&zzMissSet,&zzMissText,&zzBadTok,&zzBadText,&zzErrk); goto fail;}		}	}	zzEXIT(zztasp1);	return;fail:	zzEXIT(zztasp1);	zzsyn(zzMissText, zzBadTok, (ANTLRChar *)"", zzMissSet, zzMissTok, zzErrk, zzBadText);	zzresynch(setwd2, 0x40);	}}void#ifdef __USE_PROTOSexpr(void)#elseexpr()

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -