home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
ftp.cs.arizona.edu
/
ftp.cs.arizona.edu.tar
/
ftp.cs.arizona.edu
/
icon
/
historic
/
v941.tgz
/
icon.v941src.tar
/
icon.v941src
/
src
/
icont
/
tgrammar.c
< prev
next >
Wrap
C/C++ Source or Header
|
2001-12-12
|
10KB
|
240 lines
/*
* tgrammar.c - includes and macros for building the parse tree
*/
#include "../h/define.h"
#include "../common/yacctok.h"
%{
/*
* These commented directives are passed through the first application
* of cpp, then turned into real includes in tgram.g by fixgram.icn.
*/
/*#include "../h/gsupport.h"*/
/*#include "../h/lexdef.h"*/
/*#include "tproto.h"*/
/*#include "tglobals.h"*/
/*#include "tsym.h"*/
/*#include "tree.h"*/
/*#include "keyword.h"*/
/*#undef YYSTYPE*/
/*#define YYSTYPE nodeptr*/
/*#define YYMAXDEPTH 500*/
extern int fncargs[];
int idflag;
int id_cnt;
#define EmptyNode tree1(N_Empty)
#define Alt(x1,x2,x3) $$ = tree4(N_Alt,x2,x1,x3)
#define Apply(x1,x2,x3) $$ = tree4(N_Apply,x2,x1,x3)
#define Arglist1() id_cnt = 0
#define Arglist2(x) /* empty */
#define Arglist3(x,y,z) id_cnt = -id_cnt
#define Bact(x1,x2,x3) $$ = tree5(N_Activat,x2,x2,x3,x1)
#define Bamper(x1,x2,x3) $$ = tree5(N_Conj,x2,x2,x1,x3)
#define Bassgn(x1,x2,x3) $$ = tree5(N_Binop,x2,x2,x1,x3)
#define Baugact(x1,x2,x3) $$ = tree5(N_Activat,x2,x2,x3,x1)
#define Baugamper(x1,x2,x3) $$ = tree5(N_Conj,x2,x2,x1,x3)
#define Baugcat(x1,x2,x3) $$ = tree5(N_Augop,x2,x2,x1,x3)
#define Baugeq(x1,x2,x3) $$ = tree5(N_Augop,x2,x2,x1,x3)
#define Baugeqv(x1,x2,x3) $$ = tree5(N_Augop,x2,x2,x1,x3)
#define Baugge(x1,x2,x3) $$ = tree5(N_Augop,x2,x2,x1,x3)
#define Bauggt(x1,x2,x3) $$ = tree5(N_Augop,x2,x2,x1,x3)
#define Bauglcat(x1,x2,x3) $$ = tree5(N_Augop,x2,x2,x1,x3)
#define Baugle(x1,x2,x3) $$ = tree5(N_Augop,x2,x2,x1,x3)
#define Bauglt(x1,x2,x3) $$ = tree5(N_Augop,x2,x2,x1,x3)
#define Baugne(x1,x2,x3) $$ = tree5(N_Augop,x2,x2,x1,x3)
#define Baugneqv(x1,x2,x3) $$ = tree5(N_Augop,x2,x2,x1,x3)
#define Baugques(x1,x2,x3) $$ = tree5(N_Scan,x2,x2,x1,x3)
#define Baugseq(x1,x2,x3) $$ = tree5(N_Augop,x2,x2,x1,x3)
#define Baugsge(x1,x2,x3) $$ = tree5(N_Augop,x2,x2,x1,x3)
#define Baugsgt(x1,x2,x3) $$ = tree5(N_Augop,x2,x2,x1,x3)
#define Baugsle(x1,x2,x3) $$ = tree5(N_Augop,x2,x2,x1,x3)
#define Baugslt(x1,x2,x3) $$ = tree5(N_Augop,x2,x2,x1,x3)
#define Baugsne(x1,x2,x3) $$ = tree5(N_Augop,x2,x2,x1,x3)
#define Bcaret(x1,x2,x3) $$ = tree5(N_Binop,x2,x2,x1,x3)
#define Bcareta(x1,x2,x3) $$ = tree5(N_Augop,x2,x2,x1,x3)
#define Bcat(x1,x2,x3) $$ = tree5(N_Binop,x2,x2,x1,x3)
#define Bdiff(x1,x2,x3) $$ = tree5(N_Binop,x2,x2,x1,x3)
#define Bdiffa(x1,x2,x3) $$ = tree5(N_Augop,x2,x2,x1,x3)
#define Beq(x1,x2,x3) $$ = tree5(N_Binop,x2,x2,x1,x3)
#define Beqv(x1,x2,x3) $$ = tree5(N_Binop,x2,x2,x1,x3)
#define Bge(x1,x2,x3) $$ = tree5(N_Binop,x2,x2,x1,x3)
#define Bgt(x1,x2,x3) $$ = tree5(N_Binop,x2,x2,x1,x3)
#define Binter(x1,x2,x3) $$ = tree5(N_Binop,x2,x2,x1,x3)
#define Bintera(x1,x2,x3) $$ = tree5(N_Augop,x2,x2,x1,x3)
#define Blcat(x1,x2,x3) $$ = tree5(N_Binop,x2,x2,x1,x3)
#define Ble(x1,x2,x3) $$ = tree5(N_Binop,x2,x2,x1,x3)
#define Blim(x1,x2,x3) $$ = tree4(N_Limit,x1,x1,x3)
#define Blt(x1,x2,x3) $$ = tree5(N_Binop,x2,x2,x1,x3)
#define Bminus(x1,x2,x3) $$ = tree5(N_Binop,x2,x2,x1,x3)
#define Bminusa(x1,x2,x3) $$ = tree5(N_Augop,x2,x2,x1,x3)
#define Bmod(x1,x2,x3) $$ = tree5(N_Binop,x2,x2,x1,x3)
#define Bmoda(x1,x2,x3) $$ = tree5(N_Augop,x2,x2,x1,x3)
#define Bne(x1,x2,x3) $$ = tree5(N_Binop,x2,x2,x1,x3)
#define Bneqv(x1,x2,x3) $$ = tree5(N_Binop,x2,x2,x1,x3)
#define Bplus(x1,x2,x3) $$ = tree5(N_Binop,x2,x2,x1,x3)
#define Bplusa(x1,x2,x3) $$ = tree5(N_Augop,x2,x2,x1,x3)
#define Bques(x1,x2,x3) $$ = tree5(N_Scan,x2,x2,x1,x3)
#define Brace(x1,x2,x3) $$ = x2
#define Brack(x1,x2,x3) $$ = tree3(N_List,x1,x2)
#define Brassgn(x1,x2,x3) $$ = tree5(N_Binop,x2,x2,x1,x3)
#define Break(x1,x2) $$ = tree3(N_Break,x1,x2)
#define Brswap(x1,x2,x3) $$ = tree5(N_Binop,x2,x2,x1,x3)
#define Bseq(x1,x2,x3) $$ = tree5(N_Binop,x2,x2,x1,x3)
#define Bsge(x1,x2,x3) $$ = tree5(N_Binop,x2,x2,x1,x3)
#define Bsgt(x1,x2,x3) $$ = tree5(N_Binop,x2,x2,x1,x3)
#define Bslash(x1,x2,x3) $$ = tree5(N_Binop,x2,x2,x1,x3)
#define Bslasha(x1,x2,x3) $$ = tree5(N_Augop,x2,x2,x1,x3)
#define Bsle(x1,x2,x3) $$ = tree5(N_Binop,x2,x2,x1,x3)
#define Bslt(x1,x2,x3) $$ = tree5(N_Binop,x2,x2,x1,x3)
#define Bsne(x1,x2,x3) $$ = tree5(N_Binop,x2,x2,x1,x3)
#define Bstar(x1,x2,x3) $$ = tree5(N_Binop,x2,x2,x1,x3)
#define Bstara(x1,x2,x3) $$ = tree5(N_Augop,x2,x2,x1,x3)
#define Bswap(x1,x2,x3) $$ = tree5(N_Binop,x2,x2,x1,x3)
#define Bunion(x1,x2,x3) $$ = tree5(N_Binop,x2,x2,x1,x3)
#define Buniona(x1,x2,x3) $$ = tree5(N_Augop,x2,x2,x1,x3)
#define Call(x1,x2,x3,x4) if (Val2(x1) = blocate(Str0(x1))) {\
Val4(x1) = fncargs[Val2(x1)-1]; \
$$ = tree4(N_Call,x2,x1,x3);} \
else { \
Val0(x1) = putloc(Str0(x1),0); \
$$ = tree4(N_Invok,x2,x1,x3); \
}
#define Case(x1,x2,x3,x4,x5,x6) $$ = tree4(N_Case,x1,x2,x5)
#define Caselist(x1,x2,x3) $$ = tree4(N_Clist,x2,x1,x3)
#define Cclause0(x1,x2,x3) $$ = tree4(N_Ccls,x2,x1,x3)
#define Cclause1(x1,x2,x3) $$ = tree4(N_Ccls,x2,x1,x3)
#define Cliter(x) Val0(x) = putlit(Str0(x),F_CsetLit,(int)Val1(x))
#define Colon(x) $$ = x
#define Compound(x1,x2,x3) $$ = tree4(N_Slist,x2,x1,x3)
#define Create(x1,x2) $$ = tree3(N_Create,x1,x2)
#define Elst0(x1) /* empty */
#define Elst1(x1,x2,x3) $$ = tree4(N_Elist,x2,x1,x3)
#define Every0(x1,x2) $$ = tree5(N_Loop,x1,x1,x2,EmptyNode)
#define Every1(x1,x2,x3,x4) $$ = tree5(N_Loop,x1,x1,x2,x4)
#define Fail(x) $$ = tree4(N_Ret,x,x,EmptyNode)
#define Field(x1,x2,x3) $$ = tree4(N_Field,x2,x1,x3)
#define Global0(x) idflag = F_Global
#define Global1(x1,x2,x3) /* empty */
#define Globdcl(x) /* empty */
#define Ident(x) install(Str0(x),idflag,0);\
id_cnt = 1
#define Idlist(x1,x2,x3) install(Str0(x3),idflag,0);\
++id_cnt
#define If0(x1,x2,x3,x4) $$ = tree5(N_If,x1,x2,x4,EmptyNode)
#define If1(x1,x2,x3,x4,x5,x6) $$ = tree5(N_If,x1,x2,x4,x6)
#define Iliter(x) Val0(x) = putlit(Str0(x),F_IntLit,0)
#define Initial1() $$ = EmptyNode
#define Initial2(x1,x2,x3) $$ = x2
#define Invocable(x1,x2) /* empty */
#define Invocdcl(x1) /* empty */
#define Invoclist(x1,x2,x3) /* empty */
#define Invocop1(x1) addinvk(Str0(x1),1)
#define Invocop2(x1) addinvk(Str0(x1),2)
#define Invocop3(x1,x2,x3) addinvk(Str0(x1),3)
#define Invoke(x1,x2,x3,x4) $$ = tree4(N_Invok,x2,x1,x3)
#define Keyword(x1,x2) if (klookup(Str0(x2)) == 0)\
tfatal("invalid keyword",Str0(x2));\
$$ = c_str_leaf(N_Key,x1,Str0(x2))
#define Kfail(x1,x2) $$ = c_str_leaf(N_Key,x1,"fail")
#define Link(x1,x2) /* empty */
#define Linkdcl(x) /* empty */
#define Lnkfile1(x) addlfile(Str0(x))
#define Lnkfile2(x) addlfile(Str0(x))
#define Lnklist(x1,x2,x3) /* empty */
#define Local(x) idflag = F_Dynamic
#define Locals1() /* empty */
#define Locals2(x1,x2,x3,x4) /* empty */
#define Mcolon(x) $$ = x
#define Nexpr() $$ = EmptyNode
#define Next(x) $$ = tree2(N_Next,x)
#define Paren(x1,x2,x3) if ((x2)->n_type == N_Elist)\
$$ = tree4(N_Invok,x1,EmptyNode,x2);\
else\
$$ = x2
#define Pcolon(x) $$ = x
#define Pdco0(x1,x2,x3) $$ = tree4(N_Invok,x2,x1,\
tree3(N_List,x2,EmptyNode))
#define Pdco1(x1,x2,x3,x4) $$ = tree4(N_Invok,x2,x1,tree3(N_List,x2,x3))
#define Pdcolist0(x) $$ = tree3(N_Create,x,x)
#define Pdcolist1(x1,x2,x3) $$ = tree4(N_Elist,x2,x1,tree3(N_Create,x2,x3))
#define Proc1(x1,x2,x3,x4,x5,x6) $$ = tree6(N_Proc,x1,x1,x4,x5,x6)
#define Procbody1() $$ = EmptyNode
#define Procbody2(x1,x2,x3) $$ = tree4(N_Slist,x2,x1,x3)
#define Procdcl(x) if (!nocode)\
codegen(x);\
nocode = 0;\
loc_init()
#define Prochead1(x1,x2) idflag = F_Argument
#define Prochead2(x1,x2,x3,x4,x5,x6)\
$$ = x2;\
install(Str0(x2),F_Proc|F_Global,id_cnt)
#define Progend(x1,x2) gout(globfile)
#define Recdcl(x) if (!nocode)\
rout(globfile, Str0(x));\
nocode = 0;\
loc_init()
#define Record1(x1,x2) idflag = F_Argument
#define Record2(x1,x2,x3,x4,x5,x6) install(Str0(x2),F_Record|F_Global,id_cnt); \
$$ = x2
#define Repeat(x1,x2) $$ = tree5(N_Loop,x1,x1,x2,EmptyNode)
#define Return(x1,x2) $$ = tree4(N_Ret,x1,x1,x2)
#define Rliter(x) Val0(x) = putlit(Str0(x),F_RealLit,0)
#define Section(x1,x2,x3,x4,x5,x6) $$ = tree6(N_Sect,x4,x4,x1,x3,x5)
#define Sliter(x) Val0(x) = putlit(Str0(x),F_StrLit,(int)Val1(x))
#define Static(x) idflag = F_Static
#define Subscript(x1,x2,x3,x4) $$ = buildarray(x1,x2,x3,x4)
#define Suspend0(x1,x2) $$ = tree5(N_Loop,x1,x1,x2,EmptyNode)
#define Suspend1(x1,x2,x3,x4) $$ = tree5(N_Loop,x1,x1,x2,x4)
#define To0(x1,x2,x3) $$ = tree4(N_To,x2,x1,x3)
#define To1(x1,x2,x3,x4,x5) $$ = tree5(N_ToBy,x2,x1,x3,x5)
#define Uat(x1,x2) $$ = tree5(N_Activat,x1,x1,x2,EmptyNode)
#define Ubackslash(x1,x2) $$ = tree4(N_Unop,x1,x1,x2)
#define Ubang(x1,x2) $$ = tree4(N_Unop,x1,x1,x2)
#define Ubar(x1,x2) $$ = tree3(N_Bar,x2,x2)
#define Ucaret(x1,x2) $$ = tree4(N_Unop,x1,x1,x2)
#define Uconcat(x1,x2) $$ = tree3(N_Bar,x2,x2)
#define Udiff(x1,x2) $$ = tree4(N_Unop,x1,x1,x2)
#define Udot(x1,x2) $$ = tree4(N_Unop,x1,x1,x2)
#define Uequiv(x1,x2) $$ = tree4(N_Unop,x1,x1,x2)
#define Uinter(x1,x2) $$ = tree4(N_Unop,x1,x1,x2)
#define Ulconcat(x1,x2) $$ = tree3(N_Bar,x2,x2)
#define Ulexeq(x1,x2) $$ = tree4(N_Unop,x1,x1,x2)
#define Ulexne(x1,x2) $$ = tree4(N_Unop,x1,x1,x2)
#define Uminus(x1,x2) $$ = tree4(N_Unop,x1,x1,x2)
#define Unot(x1,x2) $$ = tree3(N_Not,x2,x2)
#define Unotequiv(x1,x2) $$ = tree4(N_Unop,x1,x1,x2)
#define Until0(x1,x2) $$ = tree5(N_Loop,x1,x1,x2,EmptyNode)
#define Until1(x1,x2,x3,x4) $$ = tree5(N_Loop,x1,x1,x2,x4)
#define Unumeq(x1,x2) $$ = tree4(N_Unop,x1,x1,x2)
#define Unumne(x1,x2) $$ = tree4(N_Unop,x1,x1,x2)
#define Uplus(x1,x2) $$ = tree4(N_Unop,x1,x1,x2)
#define Uqmark(x1,x2) $$ = tree4(N_Unop,x1,x1,x2)
#define Uslash(x1,x2) $$ = tree4(N_Unop,x1,x1,x2)
#define Ustar(x1,x2) $$ = tree4(N_Unop,x1,x1,x2)
#define Utilde(x1,x2) $$ = tree4(N_Unop,x1,x1,x2)
#define Uunion(x1,x2) $$ = tree4(N_Unop,x1,x1,x2)
#define Var(x) Val0(x) = putloc(Str0(x),0)
#define While0(x1,x2) $$ = tree5(N_Loop,x1,x1,x2,EmptyNode)
#define While1(x1,x2,x3,x4) $$ = tree5(N_Loop,x1,x1,x2,x4)
%}
%%
#include "../h/grammar.h"
%%
/*
* xfree(p) -- used with free(p) macro to avoid compiler errors from
* miscast free calls generated by Yacc.
*/
static void xfree(p)
char *p;
{
free(p);
}
/*#define free(p) xfree((char*)p)*/