summaryrefslogtreecommitdiff
path: root/src/iconc/cgrammar.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/iconc/cgrammar.c')
-rw-r--r--src/iconc/cgrammar.c221
1 files changed, 221 insertions, 0 deletions
diff --git a/src/iconc/cgrammar.c b/src/iconc/cgrammar.c
new file mode 100644
index 0000000..a48e621
--- /dev/null
+++ b/src/iconc/cgrammar.c
@@ -0,0 +1,221 @@
+/*
+ * 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 void xfree(p)
+char *p;
+{
+ free(p);
+}
+
+/*#define free(p) xfree((char*)p)*/