ref: babf901b4a508c3ec5d1f89655f10377bbdf9637
dir: /appl/cmd/mash/mashparse.b/
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;
}