summaryrefslogtreecommitdiff
path: root/appl/cmd/mash/mashparse.b
diff options
context:
space:
mode:
Diffstat (limited to 'appl/cmd/mash/mashparse.b')
-rw-r--r--appl/cmd/mash/mashparse.b662
1 files changed, 662 insertions, 0 deletions
diff --git a/appl/cmd/mash/mashparse.b b/appl/cmd/mash/mashparse.b
new file mode 100644
index 00000000..b154f12c
--- /dev/null
+++ b/appl/cmd/mash/mashparse.b
@@ -0,0 +1,662 @@
+implement Mashparse;
+
+#line 2 "mash.y"
+include "mash.m";
+
+#
+# mash parser. Thread safe.
+#
+Mashparse: module {
+
+ PATH: con "/dis/lib/mashparse.dis";
+
+ init: fn(l: Mashlib);
+ parse: fn(e: ref Mashlib->Env);
+
+ YYSTYPE: adt
+ {
+ cmd: ref Mashlib->Cmd;
+ item: ref Mashlib->Item;
+ items: list of ref Mashlib->Item;
+ flag: int;
+ };
+
+ YYETYPE: type ref Mashlib->Env;
+Lcase: con 57346;
+Lfor: con 57347;
+Lif: con 57348;
+Lwhile: con 57349;
+Loffparen: con 57350;
+Lelse: con 57351;
+Lpipe: con 57352;
+Leqeq: con 57353;
+Lmatch: con 57354;
+Lnoteq: con 57355;
+Lcons: con 57356;
+Lcaret: con 57357;
+Lnot: con 57358;
+Lhd: con 57359;
+Ltl: con 57360;
+Llen: con 57361;
+Lword: con 57362;
+Lbackq: con 57363;
+Lcolon: con 57364;
+Lcolonmatch: con 57365;
+Ldefeq: con 57366;
+Leq: con 57367;
+Lmatched: con 57368;
+Lquote: con 57369;
+Loncurly: con 57370;
+Lonparen: con 57371;
+Loffcurly: con 57372;
+Lat: con 57373;
+Lgreat: con 57374;
+Lgreatgreat: con 57375;
+Lless: con 57376;
+Llessgreat: con 57377;
+Lfn: con 57378;
+Lin: con 57379;
+Lrescue: con 57380;
+Land: con 57381;
+Leof: con 57382;
+Lsemi: con 57383;
+Lerror: con 57384;
+
+};
+
+#line 28 "mash.y"
+ lib: Mashlib;
+
+ Cmd, Item, Stab, Env: import lib;
+YYEOFCODE: con 1;
+YYERRCODE: con 2;
+YYMAXDEPTH: con 150;
+
+#line 244 "mash.y"
+
+
+init(l: Mashlib)
+{
+ lib = l;
+}
+
+parse(e: ref Env)
+{
+ y := ref YYENV;
+ y.yyenv = e;
+ y.yysys = lib->sys;
+ y.yystderr = e.stderr;
+ yyeparse(y);
+}
+
+yyerror(e: ref YYENV, s: string)
+{
+ e.yyenv.report(s);
+ e.yyenv.suck();
+}
+
+yyelex(e: ref YYENV): int
+{
+ return e.yyenv.lex(e.yylval);
+}
+yyexca := array[] of {-1, 1,
+ 1, -1,
+ -2, 0,
+-1, 2,
+ 1, 1,
+ -2, 0,
+-1, 21,
+ 24, 51,
+ 25, 51,
+ -2, 48,
+};
+YYNPROD: con 75;
+YYPRIVATE: con 57344;
+yytoknames: array of string;
+yystates: array of string;
+yydebug: con 0;
+YYLAST: con 249;
+yyact := array[] of {
+ 7, 20, 4, 49, 41, 47, 110, 65, 103, 95,
+ 17, 24, 32, 112, 33, 146, 142, 38, 39, 28,
+ 59, 60, 140, 129, 40, 64, 22, 46, 63, 35,
+ 36, 34, 37, 128, 127, 38, 67, 69, 70, 71,
+ 27, 26, 25, 76, 22, 75, 126, 111, 77, 74,
+ 45, 80, 81, 38, 44, 78, 88, 89, 90, 91,
+ 92, 68, 22, 98, 99, 93, 94, 32, 124, 33,
+ 97, 106, 62, 107, 38, 39, 104, 108, 109, 104,
+ 68, 40, 105, 22, 66, 105, 56, 143, 55, 116,
+ 117, 118, 119, 120, 73, 32, 32, 33, 33, 38,
+ 39, 122, 132, 36, 131, 37, 40, 123, 22, 72,
+ 125, 56, 43, 55, 135, 136, 58, 57, 133, 62,
+ 134, 139, 38, 6, 62, 16, 13, 14, 15, 141,
+ 66, 22, 96, 67, 69, 62, 32, 79, 33, 84,
+ 83, 21, 24, 61, 147, 148, 144, 24, 149, 11,
+ 22, 3, 12, 16, 13, 14, 15, 18, 2, 19,
+ 1, 5, 85, 87, 86, 84, 83, 8, 101, 21,
+ 54, 51, 52, 53, 48, 39, 9, 11, 22, 82,
+ 12, 40, 42, 50, 137, 18, 56, 19, 55, 54,
+ 51, 52, 53, 48, 39, 115, 138, 38, 39, 130,
+ 40, 10, 50, 29, 40, 56, 22, 55, 102, 56,
+ 31, 55, 85, 87, 86, 84, 83, 121, 23, 30,
+ 85, 87, 86, 84, 83, 114, 0, 145, 85, 87,
+ 86, 84, 83, 113, 0, 0, 85, 87, 86, 84,
+ 83, 100, 0, 0, 85, 87, 86, 84, 83,
+};
+yypact := array[] of {
+-1000,-1000, 121,-1000,-1000,-1000,-1000, 1,-1000,-1000,
+ -3,-1000, 84, 25, 21, -2, 173, 92, 15, 15,
+ 120,-1000, 173,-1000, 149,-1000,-1000,-1000,-1000,-1000,
+-1000,-1000, 109,-1000, 102, 33, 15, 15,-1000, 81,
+ 66, 19, 149,-1000, 117, 173, 173, 151,-1000,-1000,
+ 173, 173, 173, 173, 173, 56, 52,-1000,-1000, 104,
+ 104, 15, 15, 233,-1000, 54,-1000, 109,-1000, 109,
+ 109, 109,-1000,-1000,-1000,-1000, 1, 17, -24,-1000,
+ 225, 217,-1000, 173, 173, 173, 173, 173, 209,-1000,
+-1000,-1000,-1000, 177, 177,-1000,-1000,-1000, 57,-1000,
+-1000,-1000,-1000,-1000, 40,-1000, 16, 4, 3, -7,
+ 70,-1000,-1000, 149, 149, 154,-1000, 125, 125, 125,
+ 125,-1000, -8,-1000,-1000, -14,-1000,-1000,-1000,-1000,
+-1000, 15, 15, 70, 79, 137, 132,-1000,-1000, 201,
+-1000, -15,-1000, 149, 149, 149,-1000, 132, 132,-1000,
+};
+yypgo := array[] of {
+ 0, 218, 203, 3, 208, 1, 199, 10, 201, 7,
+ 196, 195, 0, 2, 4, 182, 176, 6, 5, 8,
+ 168, 9, 167, 160, 158, 151,
+};
+yyr1 := array[] of {
+ 0, 23, 24, 24, 25, 25, 25, 15, 15, 13,
+ 14, 14, 12, 12, 12, 22, 22, 16, 16, 16,
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 19,
+ 19, 20, 20, 21, 21, 11, 11, 10, 8, 8,
+ 2, 2, 4, 4, 3, 3, 3, 3, 5, 5,
+ 5, 7, 9, 9, 17, 17, 6, 6, 6, 6,
+ 1, 1, 1, 18, 18, 18, 18, 18, 18, 18,
+ 18, 18, 18, 18, 18,
+};
+yyr2 := array[] of {
+ 0, 1, 0, 2, 1, 1, 1, 0, 2, 2,
+ 1, 2, 1, 1, 3, 1, 4, 4, 5, 7,
+ 5, 7, 5, 5, 3, 3, 3, 3, 4, 4,
+ 3, 0, 1, 0, 3, 0, 2, 3, 1, 2,
+ 1, 1, 1, 1, 4, 4, 4, 4, 1, 3,
+ 3, 1, 0, 2, 0, 2, 2, 2, 2, 2,
+ 1, 1, 1, 1, 1, 3, 3, 2, 2, 2,
+ 2, 3, 3, 3, 3,
+};
+yychk := array[] of {
+-1000, -23, -24, -25, -13, 40, 2, -12, -22, -16,
+ -8, 28, 31, 5, 6, 7, 4, -7, 36, 38,
+ -5, 20, 29, -1, 10, 41, 40, 39, 22, -2,
+ -4, -6, -5, -3, 34, 32, 33, 35, 20, 21,
+ 27, -14, -15, 28, 29, 29, 29, -18, 20, -3,
+ 29, 17, 18, 19, 16, 34, 32, 25, 24, -5,
+ -5, 23, 15, -18, -12, -9, 28, -5, 28, -5,
+ -5, -5, 28, 28, 30, -13, -12, -14, -7, 20,
+ -18, -18, 28, 15, 14, 11, 13, 12, -18, -18,
+ -18, -18, -18, -9, -9, -21, 28, -21, -5, -5,
+ 8, -20, -4, -19, 22, 28, -14, -14, -14, -14,
+ -17, 30, 37, 8, 8, -11, -18, -18, -18, -18,
+ -18, 8, -14, -19, 28, -14, 30, 30, 30, 30,
+ -6, 34, 32, -17, -9, -12, -12, 30, -10, -18,
+ 30, -14, 30, 8, 9, 26, 30, -12, -12, -13,
+};
+yydef := array[] of {
+ 2, -2, -2, 3, 4, 5, 6, 0, 12, 13,
+ 15, 7, 0, 0, 0, 0, 0, 0, 0, 0,
+ 38, -2, 0, 9, 0, 60, 61, 62, 52, 39,
+ 40, 41, 42, 43, 0, 0, 0, 0, 48, 0,
+ 0, 0, 10, 7, 0, 0, 0, 0, 63, 64,
+ 0, 0, 0, 0, 0, 0, 0, 52, 52, 33,
+ 33, 0, 0, 0, 14, 31, 7, 56, 7, 57,
+ 58, 59, 7, 7, 54, 8, 11, 0, 0, 51,
+ 0, 0, 35, 0, 0, 0, 0, 0, 0, 67,
+ 68, 69, 70, 24, 25, 26, 7, 27, 0, 49,
+ 50, 16, 53, 32, 0, 7, 0, 0, 0, 0,
+ 17, 54, 52, 0, 0, 0, 66, 71, 72, 73,
+ 74, 65, 0, 28, 7, 0, 46, 47, 44, 45,
+ 55, 0, 0, 18, 0, 20, 22, 23, 36, 0,
+ 34, 0, 30, 0, 0, 0, 29, 19, 21, 37,
+};
+yytok1 := array[] of {
+ 1,
+};
+yytok2 := array[] of {
+ 2, 3, 4, 5, 6, 7, 8, 9, 10, 11,
+ 12, 13, 14, 15, 16, 17, 18, 19, 20, 21,
+ 22, 23, 24, 25, 26, 27, 28, 29, 30, 31,
+ 32, 33, 34, 35, 36, 37, 38, 39, 40, 41,
+ 42,
+};
+yytok3 := array[] of {
+ 0
+};
+
+YYFLAG: con -1000;
+
+# parser for yacc output
+YYENV: adt
+{
+ yylval: ref YYSTYPE; # lexical value
+ yyval: YYSTYPE; # goto value
+ yyenv: YYETYPE; # useer environment
+ yynerrs: int; # number of errors
+ yyerrflag: int; # error recovery flag
+ yysys: Sys;
+ yystderr: ref Sys->FD;
+};
+
+yytokname(yyc: int): string
+{
+ if(yyc > 0 && yyc <= len yytoknames && yytoknames[yyc-1] != nil)
+ return yytoknames[yyc-1];
+ return "<"+string yyc+">";
+}
+
+yystatname(yys: int): string
+{
+ if(yys >= 0 && yys < len yystates && yystates[yys] != nil)
+ return yystates[yys];
+ return "<"+string yys+">\n";
+}
+
+yylex1(e: ref YYENV): int
+{
+ c, yychar : int;
+ yychar = yyelex(e);
+ if(yychar <= 0)
+ c = yytok1[0];
+ else if(yychar < len yytok1)
+ c = yytok1[yychar];
+ else if(yychar >= YYPRIVATE && yychar < YYPRIVATE+len yytok2)
+ c = yytok2[yychar-YYPRIVATE];
+ else{
+ n := len yytok3;
+ c = 0;
+ for(i := 0; i < n; i+=2) {
+ if(yytok3[i+0] == yychar) {
+ c = yytok3[i+1];
+ break;
+ }
+ }
+ if(c == 0)
+ c = yytok2[1]; # unknown char
+ }
+ if(yydebug >= 3)
+ e.yysys->fprint(e.yystderr, "lex %.4ux %s\n", yychar, yytokname(c));
+ return c;
+}
+
+YYS: adt
+{
+ yyv: YYSTYPE;
+ yys: int;
+};
+
+yyparse(): int
+{
+ return yyeparse(nil);
+}
+
+yyeparse(e: ref YYENV): int
+{
+ if(e == nil)
+ e = ref YYENV;
+ if(e.yylval == nil)
+ e.yylval = ref YYSTYPE;
+ if(e.yysys == nil) {
+ e.yysys = load Sys "$Sys";
+ e.yystderr = e.yysys->fildes(2);
+ }
+
+ yys := array[YYMAXDEPTH] of YYS;
+
+ yystate := 0;
+ yychar := -1;
+ e.yynerrs = 0;
+ e.yyerrflag = 0;
+ yyp := -1;
+ yyn := 0;
+
+yystack:
+ for(;;){
+ # put a state and value onto the stack
+ if(yydebug >= 4)
+ e.yysys->fprint(e.yystderr, "char %s in %s", yytokname(yychar), yystatname(yystate));
+
+ yyp++;
+ if(yyp >= YYMAXDEPTH) {
+ yyerror(e, "yacc stack overflow");
+ yyn = 1;
+ break yystack;
+ }
+ yys[yyp].yys = yystate;
+ yys[yyp].yyv = e.yyval;
+
+ for(;;){
+ yyn = yypact[yystate];
+ if(yyn > YYFLAG) { # simple state
+ if(yychar < 0)
+ yychar = yylex1(e);
+ yyn += yychar;
+ if(yyn >= 0 && yyn < YYLAST) {
+ yyn = yyact[yyn];
+ if(yychk[yyn] == yychar) { # valid shift
+ yychar = -1;
+ yyp++;
+ if(yyp >= YYMAXDEPTH) {
+ yyerror(e, "yacc stack overflow");
+ yyn = 1;
+ break yystack;
+ }
+ yystate = yyn;
+ yys[yyp].yys = yystate;
+ yys[yyp].yyv = *e.yylval;
+ if(e.yyerrflag > 0)
+ e.yyerrflag--;
+ if(yydebug >= 4)
+ e.yysys->fprint(e.yystderr, "char %s in %s", yytokname(yychar), yystatname(yystate));
+ continue;
+ }
+ }
+ }
+
+ # default state action
+ yyn = yydef[yystate];
+ if(yyn == -2) {
+ if(yychar < 0)
+ yychar = yylex1(e);
+
+ # look through exception table
+ for(yyxi:=0;; yyxi+=2)
+ if(yyexca[yyxi] == -1 && yyexca[yyxi+1] == yystate)
+ break;
+ for(yyxi += 2;; yyxi += 2) {
+ yyn = yyexca[yyxi];
+ if(yyn < 0 || yyn == yychar)
+ break;
+ }
+ yyn = yyexca[yyxi+1];
+ if(yyn < 0){
+ yyn = 0;
+ break yystack;
+ }
+ }
+
+ if(yyn != 0)
+ break;
+
+ # error ... attempt to resume parsing
+ if(e.yyerrflag == 0) { # brand new error
+ yyerror(e, "syntax error");
+ e.yynerrs++;
+ if(yydebug >= 1) {
+ e.yysys->fprint(e.yystderr, "%s", yystatname(yystate));
+ e.yysys->fprint(e.yystderr, "saw %s\n", yytokname(yychar));
+ }
+ }
+
+ if(e.yyerrflag != 3) { # incompletely recovered error ... try again
+ e.yyerrflag = 3;
+
+ # find a state where "error" is a legal shift action
+ while(yyp >= 0) {
+ yyn = yypact[yys[yyp].yys] + YYERRCODE;
+ if(yyn >= 0 && yyn < YYLAST) {
+ yystate = yyact[yyn]; # simulate a shift of "error"
+ if(yychk[yystate] == YYERRCODE) {
+ yychar = -1;
+ continue yystack;
+ }
+ }
+
+ # the current yyp has no shift on "error", pop stack
+ if(yydebug >= 2)
+ e.yysys->fprint(e.yystderr, "error recovery pops state %d, uncovers %d\n",
+ yys[yyp].yys, yys[yyp-1].yys );
+ yyp--;
+ }
+ # there is no state on the stack with an error shift ... abort
+ yyn = 1;
+ break yystack;
+ }
+
+ # no shift yet; clobber input char
+ if(yydebug >= 2)
+ e.yysys->fprint(e.yystderr, "error recovery discards %s\n", yytokname(yychar));
+ if(yychar == YYEOFCODE) {
+ yyn = 1;
+ break yystack;
+ }
+ yychar = -1;
+ # try again in the same state
+ }
+
+ # reduction by production yyn
+ if(yydebug >= 2)
+ e.yysys->fprint(e.yystderr, "reduce %d in:\n\t%s", yyn, yystatname(yystate));
+
+ yypt := yyp;
+ yyp -= yyr2[yyn];
+# yyval = yys[yyp+1].yyv;
+ yym := yyn;
+
+ # consult goto table to find next state
+ yyn = yyr1[yyn];
+ yyg := yypgo[yyn];
+ yyj := yyg + yys[yyp].yys + 1;
+
+ if(yyj >= YYLAST || yychk[yystate=yyact[yyj]] != -yyn)
+ yystate = yyact[yyg];
+ case yym {
+
+4=>
+#line 63 "mash.y"
+{ yys[yypt-0].yyv.cmd.xeq(e.yyenv); }
+7=>
+#line 69 "mash.y"
+{ e.yyval.cmd = nil; }
+8=>
+#line 71 "mash.y"
+{ e.yyval.cmd = Cmd.cmd2(Cseq, yys[yypt-1].yyv.cmd, yys[yypt-0].yyv.cmd); }
+9=>
+#line 75 "mash.y"
+{ e.yyval.cmd = yys[yypt-1].yyv.cmd.mkcmd(e.yyenv, yys[yypt-0].yyv.flag); }
+10=>
+e.yyval.cmd = yys[yyp+1].yyv.cmd;
+11=>
+#line 80 "mash.y"
+{ e.yyval.cmd = Cmd.cmd2(Cseq, yys[yypt-1].yyv.cmd, yys[yypt-0].yyv.cmd.mkcmd(e.yyenv, 0)); }
+12=>
+e.yyval.cmd = yys[yyp+1].yyv.cmd;
+13=>
+e.yyval.cmd = yys[yyp+1].yyv.cmd;
+14=>
+#line 86 "mash.y"
+{ e.yyval.cmd = Cmd.cmd2(Cpipe, yys[yypt-2].yyv.cmd, yys[yypt-0].yyv.cmd); }
+15=>
+#line 90 "mash.y"
+{ e.yyval.cmd = e.yyenv.mksimple(yys[yypt-0].yyv.items); }
+16=>
+#line 92 "mash.y"
+{
+ yys[yypt-0].yyv.cmd.words = e.yyenv.mklist(yys[yypt-1].yyv.items);
+ e.yyval.cmd = Cmd.cmd1w(Cdepend, yys[yypt-0].yyv.cmd, e.yyenv.mklist(yys[yypt-3].yyv.items));
+ }
+17=>
+#line 99 "mash.y"
+{ e.yyval.cmd = yys[yypt-0].yyv.cmd.cmde(Cgroup, yys[yypt-2].yyv.cmd, nil); }
+18=>
+#line 101 "mash.y"
+{ e.yyval.cmd = yys[yypt-0].yyv.cmd.cmde(Csubgroup, yys[yypt-2].yyv.cmd, nil); }
+19=>
+#line 103 "mash.y"
+{ e.yyval.cmd = Cmd.cmd1i(Cfor, yys[yypt-0].yyv.cmd, yys[yypt-4].yyv.item); e.yyval.cmd.words = lib->revitems(yys[yypt-2].yyv.items); }
+20=>
+#line 105 "mash.y"
+{ e.yyval.cmd = Cmd.cmd2(Cif, yys[yypt-2].yyv.cmd, yys[yypt-0].yyv.cmd); }
+21=>
+#line 107 "mash.y"
+{ e.yyval.cmd = Cmd.cmd2(Cif, yys[yypt-4].yyv.cmd, Cmd.cmd2(Celse, yys[yypt-2].yyv.cmd, yys[yypt-0].yyv.cmd)); }
+22=>
+#line 109 "mash.y"
+{ e.yyval.cmd = Cmd.cmd2(Cwhile, yys[yypt-2].yyv.cmd, yys[yypt-0].yyv.cmd); }
+23=>
+#line 111 "mash.y"
+{ e.yyval.cmd = Cmd.cmd2(Ccase, yys[yypt-3].yyv.cmd, yys[yypt-1].yyv.cmd.rotcases()); }
+24=>
+#line 113 "mash.y"
+{ e.yyval.cmd = Cmd.cmdiw(Ceq, yys[yypt-2].yyv.item, yys[yypt-0].yyv.items); }
+25=>
+#line 115 "mash.y"
+{ e.yyval.cmd = Cmd.cmdiw(Cdefeq, yys[yypt-2].yyv.item, yys[yypt-0].yyv.items); }
+26=>
+#line 117 "mash.y"
+{ e.yyval.cmd = Cmd.cmd1i(Cfn, yys[yypt-0].yyv.cmd, yys[yypt-1].yyv.item); }
+27=>
+#line 119 "mash.y"
+{ e.yyval.cmd = Cmd.cmd1i(Crescue, yys[yypt-0].yyv.cmd, yys[yypt-1].yyv.item); }
+28=>
+#line 121 "mash.y"
+{
+ yys[yypt-0].yyv.cmd.item = yys[yypt-1].yyv.item;
+ e.yyval.cmd = Cmd.cmd1i(Crule, yys[yypt-0].yyv.cmd, yys[yypt-3].yyv.item);
+ }
+29=>
+#line 128 "mash.y"
+{ e.yyval.cmd = Cmd.cmd1(Clistgroup, yys[yypt-1].yyv.cmd); }
+30=>
+#line 130 "mash.y"
+{ e.yyval.cmd = Cmd.cmd1(Cgroup, yys[yypt-1].yyv.cmd); }
+31=>
+#line 134 "mash.y"
+{ e.yyval.cmd = Cmd.cmd1(Cnop, nil); }
+32=>
+e.yyval.cmd = yys[yyp+1].yyv.cmd;
+33=>
+#line 139 "mash.y"
+{ e.yyval.cmd = nil; }
+34=>
+#line 141 "mash.y"
+{ e.yyval.cmd = yys[yypt-1].yyv.cmd; }
+35=>
+#line 145 "mash.y"
+{ e.yyval.cmd = nil; }
+36=>
+#line 147 "mash.y"
+{ e.yyval.cmd = Cmd.cmd2(Ccases, yys[yypt-1].yyv.cmd, yys[yypt-0].yyv.cmd); }
+37=>
+#line 151 "mash.y"
+{ e.yyval.cmd = Cmd.cmd2(Cmatched, yys[yypt-2].yyv.cmd, yys[yypt-0].yyv.cmd); }
+38=>
+#line 155 "mash.y"
+{ e.yyval.items = yys[yypt-0].yyv.item :: nil; }
+39=>
+#line 157 "mash.y"
+{ e.yyval.items = yys[yypt-0].yyv.item :: yys[yypt-1].yyv.items; }
+40=>
+e.yyval.item = yys[yyp+1].yyv.item;
+41=>
+e.yyval.item = yys[yyp+1].yyv.item;
+42=>
+e.yyval.item = yys[yyp+1].yyv.item;
+43=>
+e.yyval.item = yys[yyp+1].yyv.item;
+44=>
+#line 169 "mash.y"
+{ e.yyval.item = Item.itemc(Ibackq, yys[yypt-1].yyv.cmd); }
+45=>
+#line 171 "mash.y"
+{ e.yyval.item = Item.itemc(Iquote, yys[yypt-1].yyv.cmd); }
+46=>
+#line 173 "mash.y"
+{ e.yyval.item = Item.itemc(Iinpipe, yys[yypt-1].yyv.cmd); }
+47=>
+#line 175 "mash.y"
+{ e.yyval.item = Item.itemc(Ioutpipe, yys[yypt-1].yyv.cmd); }
+48=>
+e.yyval.item = yys[yyp+1].yyv.item;
+49=>
+#line 180 "mash.y"
+{ e.yyval.item = Item.item2(Icaret, yys[yypt-2].yyv.item, yys[yypt-0].yyv.item); }
+50=>
+#line 182 "mash.y"
+{ e.yyval.item = Item.itemc(Iexpr, yys[yypt-1].yyv.cmd); }
+51=>
+#line 186 "mash.y"
+{ e.yyval.item = yys[yypt-0].yyv.item.sword(e.yyenv); }
+52=>
+#line 190 "mash.y"
+{ e.yyval.items = nil; }
+53=>
+#line 192 "mash.y"
+{ e.yyval.items = yys[yypt-0].yyv.item :: yys[yypt-1].yyv.items; }
+54=>
+#line 196 "mash.y"
+{ e.yyval.cmd = ref Cmd; e.yyval.cmd.error = 0; }
+55=>
+#line 198 "mash.y"
+{ e.yyval.cmd = yys[yypt-1].yyv.cmd; yys[yypt-1].yyv.cmd.cmdio(e.yyenv, yys[yypt-0].yyv.item); }
+56=>
+#line 202 "mash.y"
+{ e.yyval.item = Item.itemr(Rin, yys[yypt-0].yyv.item); }
+57=>
+#line 204 "mash.y"
+{ e.yyval.item = Item.itemr(Rout, yys[yypt-0].yyv.item); }
+58=>
+#line 206 "mash.y"
+{ e.yyval.item = Item.itemr(Rappend, yys[yypt-0].yyv.item); }
+59=>
+#line 208 "mash.y"
+{ e.yyval.item = Item.itemr(Rinout, yys[yypt-0].yyv.item); }
+60=>
+#line 212 "mash.y"
+{ e.yyval.flag = 0; }
+61=>
+#line 214 "mash.y"
+{ e.yyval.flag = 0; }
+62=>
+#line 216 "mash.y"
+{ e.yyval.flag = 1; }
+63=>
+#line 220 "mash.y"
+{ e.yyval.cmd = Cmd.cmd1i(Cword, nil, yys[yypt-0].yyv.item); }
+64=>
+#line 222 "mash.y"
+{ e.yyval.cmd = Cmd.cmd1i(Cword, nil, yys[yypt-0].yyv.item); }
+65=>
+#line 224 "mash.y"
+{ e.yyval.cmd = yys[yypt-1].yyv.cmd; }
+66=>
+#line 226 "mash.y"
+{ e.yyval.cmd = Cmd.cmd2(Ccaret, yys[yypt-2].yyv.cmd, yys[yypt-0].yyv.cmd); }
+67=>
+#line 228 "mash.y"
+{ e.yyval.cmd = Cmd.cmd1(Chd, yys[yypt-0].yyv.cmd); }
+68=>
+#line 230 "mash.y"
+{ e.yyval.cmd = Cmd.cmd1(Ctl, yys[yypt-0].yyv.cmd); }
+69=>
+#line 232 "mash.y"
+{ e.yyval.cmd = Cmd.cmd1(Clen, yys[yypt-0].yyv.cmd); }
+70=>
+#line 234 "mash.y"
+{ e.yyval.cmd = Cmd.cmd1(Cnot, yys[yypt-0].yyv.cmd); }
+71=>
+#line 236 "mash.y"
+{ e.yyval.cmd = Cmd.cmd2(Ccons, yys[yypt-2].yyv.cmd, yys[yypt-0].yyv.cmd); }
+72=>
+#line 238 "mash.y"
+{ e.yyval.cmd = Cmd.cmd2(Ceqeq, yys[yypt-2].yyv.cmd, yys[yypt-0].yyv.cmd); }
+73=>
+#line 240 "mash.y"
+{ e.yyval.cmd = Cmd.cmd2(Cnoteq, yys[yypt-2].yyv.cmd, yys[yypt-0].yyv.cmd); }
+74=>
+#line 242 "mash.y"
+{ e.yyval.cmd = Cmd.cmd2(Cmatch, yys[yypt-2].yyv.cmd, yys[yypt-0].yyv.cmd); }
+ }
+ }
+
+ return yyn;
+}