📄 dlg_p.c
字号:
/*
* 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 dlg_p.g -gh
*
*/
#define ANTLR_VERSION 13333
#include "pcctscfg.h"
#include "pccts_stdio.h"
#include <ctype.h>
#include "dlg.h"
#define zzSET_SIZE 8
#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
Fix for Borland C++ 4.x & 5.x compiling with ALL warnings enabled
*/
#ifdef __TURBOC__
#pragma warn -aus /* unused assignment of 'xxx' */
#endif
int 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 used
in set */
int flag_paren = FALSE;
int flag_brace = FALSE;
int mode_counter = 0; /* keep track of number of %%names */
void
#ifdef __USE_PROTOS
grammar(void)
#else
grammar()
#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;
}
else {
if ( (LA(1)==ACTION) ) {
}
else {zzFAIL(1,zzerr1,&zzMissSet,&zzMissText,&zzBadTok,&zzBadText,&zzErrk); goto fail;}
}
}
}
}
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_PROTOS
start_states(void)
#else
start_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,zzerr2,&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_PROTOS
do_conversion(void)
#else
do_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_PROTOS
rule_list(void)
#else
rule_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,zzerr3,&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_PROTOS
rule(void)
#else
rule()
#endif
{
zzRULE;
zzBLOCK(zztasp1);
zzMake0;
{
if ( (setwd2[LA(1)]&0x1) ) {
reg_expr();
zzmatch(ACTION);
if (zzaArg(zztasp1,1 ).r != NULL) {
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,zzerr4,&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_PROTOS
reg_expr(void)
#else
reg_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;
/* MR23 */ if (zzaRet.r != NULL) (zzaRet.r)->trans[1]=t2;
if (zzaArg(zztasp2,2 ).r) {
(zzaArg(zztasp2,2 ).r)->trans[1]=t2; /* MR20 */
}
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_PROTOS
and_expr(void)
#else
and_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();
if (zzaRet.r != NULL) {
(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_PROTOS
repeat_expr(void)
#else
repeat_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;
/* MR23 */ if (zzaRet.r != NULL) (zzaRet.r)->trans[0] = zzaRet.l;
t1 = new_nfa_node(); t2 = new_nfa_node();
t1->trans[0]=zzaRet.l;
t1->trans[1]=t2;
/* MR23 */ if (zzaRet.r != NULL) (zzaRet.r)->trans[1]=t2;
zzaRet.l=t1;zzaRet.r=t2;
}
zzCONSUME;
}
else {
if ( (LA(1)==ONE_MORE) ) {
zzmatch(ONE_MORE);
if (zzaRet.r != NULL) (zzaRet.r)->trans[0] = zzaRet.l;
zzCONSUME;
}
else {
if ( (setwd2[LA(1)]&0x40) ) {
}
else {zzFAIL(1,zzerr5,&zzMissSet,&zzMissText,&zzBadTok,&zzBadText,&zzErrk); goto fail;}
}
}
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,zzerr6,&zzMissSet,&zzMissText,&zzBadTok,&zzBadText,&zzErrk); goto fail;}
}
}
zzEXIT(zztasp1);
return;
fail:
zzEXIT(zztasp1);
zzsyn(zzMissText, zzBadTok, (ANTLRChar *)"", zzMissSet, zzMissTok, zzErrk, zzBadText);
zzresynch(setwd2, 0x80);
}
}
void
#ifdef __USE_PROTOS
expr(void)
#else
expr()
#endif
{
zzRULE;
zzBLOCK(zztasp1);
zzMake0;
{
zzaRet.l = new_nfa_node();
zzaRet.r = new_nfa_node();
if ( (LA(1)==L_BRACK) ) {
zzmatch(L_BRACK); zzCONSUME;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -