shithub: mc

Download patch

ref: b333cec44699df60f4ec9f88562a2b24fd592f52
parent: 69225171f63708048bbc09c0d4a6c6485229ce72
author: Ori Bernstein <ori@eigenstate.org>
date: Sat Dec 30 20:26:34 EST 2017

Fix up grammar.

	We had reduce/reduce conflicts.

--- a/parse/gram.y
+++ b/parse/gram.y
@@ -216,7 +216,7 @@
 
 %%
 
-file    : toplev
+file	: toplev
 	| file Tendln toplev
 	;
 
@@ -254,7 +254,7 @@
 	| /* empty */
 	;
 
-decl    : attrs Tvar decllist {
+decl	: attrs Tvar decllist {
 		size_t i;
 
 		for (i = 0; i < $3.nn; i++)
@@ -281,7 +281,7 @@
 	}
         ;
 
-attrs   : /* empty */ {$$.nstr = 0; $$.str = NULL;}
+attrs	: /* empty */ {$$.nstr = 0; $$.str = NULL;}
 	| Tattr attrs {
 		$$ = $2;
 		lappend(&$$.str, &$$.nstr, strdup($1->id));
@@ -298,7 +298,7 @@
 	}
 	;
 
-use     : Tuse Tident {$$ = mkuse($1->loc, $2->id, 0);}
+use	: Tuse Tident {$$ = mkuse($1->loc, $2->id, 0);}
 	| Tuse Tstrlit {$$ = mkuse($1->loc, $2->strval.buf, 1);}
 	;
 
@@ -381,13 +381,14 @@
 	| declcore
 	;
 
-name    : Tident {$$ = mkname($1->loc, $1->id);}
+name	: Tident {$$ = mkname($1->loc, $1->id);}
 	| Tident Tdot Tident {
 		$$ = mknsname($3->loc, $1->id, $3->id);
 	}
 	;
 
-implstmt: Timpl name type optauxtypes {
+implstmt
+	: Timpl name type optauxtypes {
 		$$ = mkimplstmt($1->loc, $2, $3, $4.types, $4.ntypes, NULL, 0);
 		$$->impl.isproto = 1;
 	}
@@ -409,7 +410,8 @@
 	}
 	;
 
-traitdef: Ttrait Tident generictype optauxtypes { /* trait prototype */
+traitdef
+	: Ttrait Tident generictype optauxtypes { /* trait prototype */
 		$$ = mktrait($1->loc,
 			mkname($2->loc, $2->id), $3,
 			$4.types, $4.ntypes,
@@ -450,7 +452,7 @@
 	;
 
 
-tydef   : Ttype typeid {$$ = $2;}
+tydef	: Ttype typeid {$$ = $2;}
 	| Ttype typeid Tasn type {
 		$$ = $2;
 		if ($$.nparams == 0) {
@@ -461,7 +463,7 @@
 	}
 	;
 
-typeid  : Tident {
+typeid	: Tident {
 		$$.loc = $1->loc;
 		$$.name = $1->id;
 		$$.params = NULL;
@@ -476,7 +478,8 @@
 	}
 	;
 
-typarams: generictype {
+typarams
+	: generictype {
 		$$.types = NULL; $$.ntypes = 0;
 		lappend(&$$.types, &$$.ntypes, $1);
 	}
@@ -485,7 +488,7 @@
 	}
 	;
 
-type    : structdef
+type	: structdef
 	| tupledef
 	| uniondef
 	| compoundtype
@@ -607,7 +610,7 @@
 	| Tendln {$$ = NULL;}
 	;
 
-goto    : Tgoto Tident {
+goto	: Tgoto Tident {
 		Node *lbl;
 
 		lbl = mklbl($2->loc, "");
@@ -633,7 +636,7 @@
 	| Tendln {$$ = NULL;}
 	;
 
-exprln  : expr Tendln
+exprln	: expr Tendln
 	;
 
 expr	: lorexpr asnop expr
@@ -641,7 +644,7 @@
 	| lorexpr
 	;
 
-asnop   : Tasn
+asnop	: Tasn
 	| Taddeq        /* += */
 	| Tsubeq        /* -= */
 	| Tmuleq        /* *= */
@@ -669,7 +672,7 @@
 	| borexpr
 	;
 
-cmpop   : Teq | Tgt | Tlt | Tge | Tle | Tne ;
+cmpop	: Teq | Tgt | Tlt | Tge | Tle | Tne ;
 
 
 borexpr : borexpr Tbor bandexpr
@@ -689,7 +692,7 @@
 	| mulexpr
 	;
 
-addop   : Tplus | Tminus ;
+addop	: Tplus | Tminus ;
 
 mulexpr : mulexpr mulop shiftexpr
 	{$$ = mkexpr($1->loc, binop($2->type), $1, $3, NULL);}
@@ -696,7 +699,7 @@
 	| shiftexpr
 	;
 
-mulop   : Tmul | Tdiv | Tmod
+mulop	: Tmul | Tdiv | Tmod
 	;
 
 shiftexpr
@@ -790,10 +793,10 @@
 	| tuplit        {$$ = $1;}
 	;
 
-tuplit  : Toparen tupbody Tcparen
+tuplit	: Toparen tupbody Tcparen
 	{$$ = mkexprl($1->loc, Otup, $2.nl, $2.nn);}
 
-littok  : strlit	{$$ = $1;}
+littok	: strlit	{$$ = $1;}
 	| Tchrlit       {$$ = mkchar($1->loc, $1->chrval);}
 	| Tfloatlit     {$$ = mkfloat($1->loc, $1->fltval);}
 	| Tboollit      {$$ = mkbool($1->loc, !strcmp($1->id, "true"));}
@@ -853,12 +856,12 @@
 	}
 	;
 
-params  : fnparam {
+params	: fnparam {
 		$$.nl = NULL;
 		$$.nn = 0;
 		lappend(&$$.nl, &$$.nn, $1);
 	}
-	| params listsep fnparam {lappend(&$$.nl, &$$.nn, $3);}
+	| params Tcomma fnparam {lappend(&$$.nl, &$$.nn, $3);}
 	| /* empty */ {$$.nl = NULL; $$.nn = 0;}
 	;
 
@@ -867,26 +870,22 @@
 	| Tgap Tcolon type { $$ = mkpseudodecl($1->loc, $3); }
 	;
 
-seqlit  : Tosqbrac arrayelts optcomma Tcsqbrac
-	{$$ = mkexprl($1->loc, Oarr, $2.nl, $2.nn);}
-	| Tosqbrac structelts optcomma Tcsqbrac
-	{$$ = mkexprl($1->loc, Ostruct, $2.nl, $2.nn);}
+seqlit	: Tosqbrac optendlns arrayelts optcomma Tcsqbrac
+	{$$ = mkexprl($1->loc, Oarr, $3.nl, $3.nn);}
+	| Tosqbrac optendlns structelts optcomma Tcsqbrac
+	{$$ = mkexprl($1->loc, Ostruct, $3.nl, $3.nn);}
 	| Tosqbrac optendlns optcomma Tcsqbrac /* [] is the empty array. */
 	{$$ = mkexprl($1->loc, Oarr, NULL, 0);}
 	;
 
-optcomma: Tcomma optendlns
-	| /* empty */
-	;
-
 arrayelts
-	: optendlns arrayelt {
+	: arrayelt {
 		$$.nl = NULL;
 		$$.nn = 0;
-		if ($2->expr.idx)
-			lappend(&$$.nl, &$$.nn, $2);
+		if ($1->expr.idx)
+			lappend(&$$.nl, &$$.nn, $1);
 		else
-			lappend(&$$.nl, &$$.nn, mkidxinit($2->loc, mkintlit($2->loc, 0), $2));
+			lappend(&$$.nl, &$$.nn, mkidxinit($1->loc, mkintlit($1->loc, 0), $1));
 	}
 	| arrayelts listsep arrayelt {
 		if ($3->expr.idx)
@@ -903,10 +902,10 @@
 	;
 
 structelts
-	: optendlns structelt {
+	: structelt {
 		$$.nl = NULL;
 		$$.nn = 0;
-		lappend(&$$.nl, &$$.nn, $2);
+		lappend(&$$.nl, &$$.nn, $1);
 	}
 	| structelts listsep structelt {
 		lappend(&$$.nl, &$$.nn, $3);
@@ -919,15 +918,19 @@
 	}
 	;
 
-listsep	: Tcomma
-	| Tcomma optendlns
+listsep	: Tcomma optendlns
 	;
 
-optendlns  : /* empty */
+optcomma: Tcomma optendlns
+	| /* empty */
+	;
+
+optendlns 
+	: /* empty */
 	| optendlns Tendln
 	;
 
-stmt    : goto
+stmt	: goto
 	| break
 	| continue
 	| retexpr
@@ -939,11 +942,11 @@
 	| /* empty */ {$$ = NULL;}
 	;
 
-break   : Tbreak
+break	: Tbreak
 	{$$ = mkexpr($1->loc, Obreak, NULL);}
 	;
 
-continue   : Tcontinue
+continue	: Tcontinue
 	{$$ = mkexpr($1->loc, Ocontinue, NULL);}
 	;
 
@@ -965,11 +968,11 @@
 	{$$ = mkloopstmt($1->loc, NULL, $2, NULL, $3);}
 	;
 
-ifstmt  : Tif exprln blkbody elifs
+ifstmt	: Tif exprln blkbody elifs
 	{$$ = mkifstmt($1->loc, $2, $3, $4);}
 	;
 
-elifs   : Telif exprln blkbody elifs
+elifs	: Telif exprln blkbody elifs
 	{$$ = mkifstmt($1->loc, $2, $3, $4);}
 	| Telse block
 	{$$ = $2;}
@@ -991,10 +994,10 @@
 	}
 	;
 
-match   : expr Tcolon blkbody Tendln {$$ = mkmatch($1->loc, $1, $3);}
+match	: expr Tcolon blkbody Tendln {$$ = mkmatch($1->loc, $1, $3);}
 	;
 
-block   : blkbody Tendblk
+block	: blkbody Tendblk
 	;
 
 blkbody : decl {
@@ -1042,7 +1045,7 @@
 	}
 	;
 
-label   : Tcolon Tident {
+label	: Tcolon Tident {
 		char buf[512];
 		genlblstr(buf, sizeof buf, $2->id);
 		$$ = mklbl($2->loc, buf);