shithub: rgbds

Download patch

ref: 5b98beec8b2ff81c8f25229d9d406fd2ec1c1f60
parent: 6662c86d5e886e08aae178a1f9748a7339e0658e
author: ISSOtm <[email protected]>
date: Sat Mar 14 12:22:33 EDT 2020

Use left recursion instead of right

> Any kind of sequence can be defined using either left recursion or right
> recursion, but you should always use left recursion, because it can
> parse a sequence of any number of elements with bounded stack space.
https://www.gnu.org/software/bison/manual/html_node/Recursion.html

--- a/src/asm/asmy.y
+++ b/src/asm/asmy.y
@@ -775,7 +775,7 @@
 ;
 
 opt_list	: opt_list_entry
-		| opt_list_entry ',' opt_list
+		| opt_list ',' opt_list_entry
 ;
 
 opt_list_entry	: T_STRING		{ opt_Parse($1); }
@@ -883,6 +883,7 @@
 		}
 ;
 
+/* Authorize empty entries if there is only one */
 db		: T_POP_DB constlist_8bit_entry ',' constlist_8bit {
 			if (nListCountEmpty > 0)
 				warning(WARNING_EMPTY_ENTRY, "Empty entry in list of 8-bit elements (treated as padding).");
@@ -912,7 +913,7 @@
 ;
 
 purge_list	: purge_list_entry
-		| purge_list_entry ',' purge_list
+		| purge_list ',' purge_list_entry
 ;
 
 purge_list_entry : scoped_id	{ sym_Purge($1); }
@@ -931,7 +932,7 @@
 ;
 
 export_list	: export_list_entry
-		| export_list_entry ',' export_list
+		| export_list ',' export_list_entry
 ;
 
 export_list_entry : scoped_id	{ sym_Export($1); }
@@ -1066,7 +1067,7 @@
 ;
 
 constlist_8bit	: constlist_8bit_entry
-		| constlist_8bit_entry ',' constlist_8bit
+		| constlist_8bit ',' constlist_8bit_entry
 ;
 
 constlist_8bit_entry : /* empty */ {
@@ -1084,7 +1085,7 @@
 ;
 
 constlist_16bit : constlist_16bit_entry
-		| constlist_16bit_entry ',' constlist_16bit
+		| constlist_16bit ',' constlist_16bit_entry
 ;
 
 constlist_16bit_entry : /* empty */ {
@@ -1095,7 +1096,7 @@
 ;
 
 constlist_32bit : constlist_32bit_entry
-		| constlist_32bit_entry ',' constlist_32bit
+		| constlist_32bit ',' constlist_32bit_entry
 ;
 
 constlist_32bit_entry : /* empty */ {