home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
ftp.cs.arizona.edu
/
ftp.cs.arizona.edu.tar
/
ftp.cs.arizona.edu
/
icon
/
historic
/
v92.tgz
/
v92.tar
/
v92
/
src
/
iconc
/
cgrammar.c
< prev
next >
Wrap
C/C++ Source or Header
|
1996-03-22
|
9KB
|
222 lines
/*
* cgrammar.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 directives in cgram.g by fixgram.icn.
*/
/*#include "::h/gsupport.h"*:
/*#include "::h/lexdef.h"*:
/*#include "ctrans.h"*/
/*#include "csym.h"*/
/*#include "ctree.h"*/
/*#include "ccode.h" */
/*#include "cproto.h"*/
/*#undef YYSTYPE*/
/*#define YYSTYPE nodeptr*/
/*#define YYMAXDEPTH 500*/
int idflag;
#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() /* empty */
#define Arglist2(x) /* empty */
#define Arglist3(x1,x2,x3) proc_lst->nargs = -proc_lst->nargs
#define Bact(x1,x2,x3) $$ = tree5(N_Activat,x2,x2,x1,x3)
#define Bamper(x1,x2,x3) $$ = binary_nd(x2,x1,x3)
#define Bassgn(x1,x2,x3) $$ = binary_nd(x2,x1,x3)
#define Baugact(x1,x2,x3) $$ = tree5(N_Activat,x2,x2,x1,x3)
#define Baugamper(x1,x2,x3) $$ = aug_nd(x2,x1,x3)
#define Baugcat(x1,x2,x3) $$ = aug_nd(x2,x1,x3)
#define Baugeq(x1,x2,x3) $$ = aug_nd(x2,x1,x3)
#define Baugeqv(x1,x2,x3) $$ = aug_nd(x2,x1,x3)
#define Baugge(x1,x2,x3) $$ = aug_nd(x2,x1,x3)
#define Bauggt(x1,x2,x3) $$ = aug_nd(x2,x1,x3)
#define Bauglcat(x1,x2,x3) $$ = aug_nd(x2,x1,x3)
#define Baugle(x1,x2,x3) $$ = aug_nd(x2,x1,x3)
#define Bauglt(x1,x2,x3) $$ = aug_nd(x2,x1,x3)
#define Baugne(x1,x2,x3) $$ = aug_nd(x2,x1,x3)
#define Baugneqv(x1,x2,x3) $$ = aug_nd(x2,x1,x3)
#define Baugques(x1,x2,x3) $$ = tree5(N_Scan,x2,x2,x1,x3)
#define Baugseq(x1,x2,x3) $$ = aug_nd(x2,x1,x3)
#define Baugsge(x1,x2,x3) $$ = aug_nd(x2,x1,x3)
#define Baugsgt(x1,x2,x3) $$ = aug_nd(x2,x1,x3)
#define Baugsle(x1,x2,x3) $$ = aug_nd(x2,x1,x3)
#define Baugslt(x1,x2,x3) $$ = aug_nd(x2,x1,x3)
#define Baugsne(x1,x2,x3) $$ = aug_nd(x2,x1,x3)
#define Bcaret(x1,x2,x3) $$ = binary_nd(x2,x1,x3)
#define Bcareta(x1,x2,x3) $$ = aug_nd(x2,x1,x3)
#define Bcat(x1,x2,x3) $$ = binary_nd(x2,x1,x3)
#define Bdiff(x1,x2,x3) $$ = binary_nd(x2,x1,x3)
#define Bdiffa(x1,x2,x3) $$ = aug_nd(x2,x1,x3)
#define Beq(x1,x2,x3) $$ = binary_nd(x2,x1,x3)
#define Beqv(x1,x2,x3) $$ = binary_nd(x2,x1,x3)
#define Bge(x1,x2,x3) $$ = binary_nd(x2,x1,x3)
#define Bgt(x1,x2,x3) $$ = binary_nd(x2,x1,x3)
#define Binter(x1,x2,x3) $$ = binary_nd(x2,x1,x3)
#define Bintera(x1,x2,x3) $$ = aug_nd(x2,x1,x3)
#define Blcat(x1,x2,x3) $$ = binary_nd(x2,x1,x3)
#define Ble(x1,x2,x3) $$ = binary_nd(x2,x1,x3)
#define Blim(x1,x2,x3) $$ = tree4(N_Limit,x2,x1,x3)
#define Blt(x1,x2,x3) $$ = binary_nd(x2,x1,x3)
#define Bminus(x1,x2,x3) $$ = binary_nd(x2,x1,x3)
#define Bminusa(x1,x2,x3) $$ = aug_nd(x2,x1,x3)
#define Bmod(x1,x2,x3) $$ = binary_nd(x2,x1,x3)
#define Bmoda(x1,x2,x3) $$ = aug_nd(x2,x1,x3)
#define Bne(x1,x2,x3) $$ = binary_nd(x2,x1,x3)
#define Bneqv(x1,x2,x3) $$ = binary_nd(x2,x1,x3)
#define Bplus(x1,x2,x3) $$ = binary_nd(x2,x1,x3)
#define Bplusa(x1,x2,x3) $$ = aug_nd(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) $$ = list_nd(x1,x2)
#define Brassgn(x1,x2,x3) $$ = binary_nd(x2,x1,x3)
#define Break(x1,x2) $$ = tree3(N_Break,x1,x2)
#define Brswap(x1,x2,x3) $$ = binary_nd(x2,x1,x3)
#define Bseq(x1,x2,x3) $$ = binary_nd(x2,x1,x3)
#define Bsge(x1,x2,x3) $$ = binary_nd(x2,x1,x3)
#define Bsgt(x1,x2,x3) $$ = binary_nd(x2,x1,x3)
#define Bslash(x1,x2,x3) $$ = binary_nd(x2,x1,x3)
#define Bslasha(x1,x2,x3) $$ = aug_nd(x2,x1,x3)
#define Bsle(x1,x2,x3) $$ = binary_nd(x2,x1,x3)
#define Bslt(x1,x2,x3) $$ = binary_nd(x2,x1,x3)
#define Bsne(x1,x2,x3) $$ = binary_nd(x2,x1,x3)
#define Bstar(x1,x2,x3) $$ = binary_nd(x2,x1,x3)
#define Bstara(x1,x2,x3) $$ = aug_nd(x2,x1,x3)
#define Bswap(x1,x2,x3) $$ = binary_nd(x2,x1,x3)
#define Bunion(x1,x2,x3) $$ = binary_nd(x2,x1,x3)
#define Buniona(x1,x2,x3) $$ = aug_nd(x2,x1,x3)
#define Case(x1,x2,x3,x4,x5,x6) $$ = case_nd(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) CSym0(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);\
proc_lst->has_coexpr = 1;
#define Elst0(x) $$ = x;
#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)
#define Idlist(x1,x2,x3) install(Str0(x3),idflag)
#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) CSym0(x) = putlit(Str0(x),F_IntLit,0)
#define Initial1() $$ = EmptyNode
#define Initial2(x1,x2,x3) $$ = x2
#define Invocdcl(x) /* empty */
#define Invocable(x1,x2) /* empty */
#define Invoclist(x1,x2, x3) /* empty */
#define Invocop1(x) invoc_grp(Str0(x));
#define Invocop2(x) invocbl(x, -1);
#define Invocop3(x1,x2,x3) invocbl(x1, atoi(Str0(x3)));
#define Invoke(x1,x2,x3,x4) $$ = invk_nd(x2,x1,x3)
#define Keyword(x1,x2) $$ = key_leaf(x1,Str0(x2))
#define Kfail(x1,x2) $$ = key_leaf(x1,spec_str("fail"))
#define Link(x1,x2) /* empty */
#define Linkdcl(x) /* empty */
#define Lnkfile1(x) lnkdcl(Str0(x));
#define Lnkfile2(x) lnkdcl(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)\
$$ = invk_nd(x1,EmptyNode,x2);\
else\
$$ = x2
#define Pcolon(x) $$ = x
#define Pdco0(x1,x2,x3) $$ = invk_nd(x2,x1,list_nd(x2,EmptyNode))
#define Pdco1(x1,x2,x3,x4) $$ = invk_nd(x2,x1,list_nd(x2,x3))
#define Pdcolist0(x) $$ = tree3(N_Create,x,x);\
proc_lst->has_coexpr = 1;
#define Pdcolist1(x1,x2,x3) $$ =tree4(N_Elist,x2,x1,tree3(N_Create,x2,x3));\
proc_lst->has_coexpr = 1;
#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) proc_lst->tree = x
#define Prochead1(x1,x2) init_proc(Str0(x2));\
idflag = F_Argument
#define Prochead2(x1,x2,x3,x4,x5,x6) /* empty */
#define Progend(x1,x2) /* empty */
#define Recdcl(x) /* empty */
#define Record1(x1, x2) init_rec(Str0(x2));\
idflag = F_Field
#define Record2(x1,x2,x3,x4,x5,x6) /* empty */
#define Repeat(x1,x2) $$ = tree5(N_Loop,x1,x1,x2,EmptyNode)
#define Return(x1,x2) $$ = tree4(N_Ret,x1,x1,x2)
#define Rliter(x) CSym0(x) = putlit(Str0(x),F_RealLit,0)
#define Section(x1,x2,x3,x4,x5,x6) $$ = sect_nd(x4,x1,x3,x5)
#define Sliter(x) CSym0(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)
#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) $$ = to_nd(x2,x1,x3)
#define To1(x1,x2,x3,x4,x5) $$ = toby_nd(x2,x1,x3,x5)
#define Uat(x1,x2) $$ = tree5(N_Activat,x1,x1,EmptyNode,x2)
#define Ubackslash(x1,x2) $$ = unary_nd(x1,x2)
#define Ubang(x1,x2) $$ = unary_nd(x1,x2)
#define Ubar(x1,x2) $$ = tree3(N_Bar,x2,x2)
#define Ucaret(x1,x2) $$ = unary_nd(x1,x2)
#define Uconcat(x1,x2) $$ = tree3(N_Bar,x2,x2)
#define Udiff(x1,x2) $$ = MultiUnary(x1,x2)
#define Udot(x1,x2) $$ = unary_nd(x1,x2)
#define Uequiv(x1,x2) $$ = MultiUnary(x1,x2)
#define Uinter(x1,x2) $$ = MultiUnary(x1,x2)
#define Ulconcat(x1,x2) $$ = tree3(N_Bar,x2,x2)
#define Ulexeq(x1,x2) $$ = MultiUnary(x1,x2)
#define Ulexne(x1,x2) $$ = MultiUnary(x1,x2)
#define Uminus(x1,x2) $$ = unary_nd(x1,x2)
#define Unot(x1,x2) $$ = tree3(N_Not,x2,x2)
#define Unotequiv(x1,x2) $$ = MultiUnary(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) $$ = unary_nd(x1,x2)
#define Unumne(x1,x2) $$ = MultiUnary(x1,x2)
#define Uplus(x1,x2) $$ = unary_nd(x1,x2)
#define Uqmark(x1,x2) $$ = unary_nd(x1,x2)
#define Uslash(x1,x2) $$ = unary_nd(x1,x2)
#define Ustar(x1,x2) $$ = unary_nd(x1,x2)
#define Utilde(x1,x2) $$ = unary_nd(x1,x2)
#define Uunion(x1,x2) $$ = MultiUnary(x1,x2)
#define Var(x) LSym0(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.
*/
#undef free
static novalue xfree(p)
char *p;
{
free(p);
}
/*#define free(p) xfree((char*)p)*/