hi,
attached a patch for the Lua grammar file for PGE (lua.pg).
fixing:

* reorganized some rules w.r.t. "do <block> end"
* <varargs> rule instead of "..."
* fixed table constructor rules (they now work correctly) -- stolen from lua51.pg


regards,
kjs

Index: languages/lua/src/lua.pg
===================================================================
--- languages/lua/src/lua.pg	(revision 17078)
+++ languages/lua/src/lua.pg	(working copy)
@@ -22,7 +22,7 @@
 rule statement {
     <ifstat>
   | <whilestat>
-  | <doblock>
+  | <dostat>
   | <forstat>
   | <repeatstat>
   | <localstat>
@@ -35,11 +35,11 @@
 }
 
 rule laststat {
-  	<'return'> <explist1>?
+    <'return'> <explist1>?
   | <'break'>
 }
 
-rule doblock {
+rule dostat {
   <'do'> <block> <?end>
 }
 
@@ -57,14 +57,14 @@
 }
 
 rule whilestat {
-  <'while'> <expr1> <?do> <block> <?end>
+  <'while'> <expr1> <doblock> 
 }
 
 rule repeatstat {
   <'repeat'> <block> <?until> <expr1>
 }
 
-rule forbody {
+rule doblock {
   <?do> <block> <?end>
 }
 
@@ -77,7 +77,7 @@
 }
 
 rule forstat {
-  <'for'> [ <fornum> | <forlist> ] <forbody>
+  <'for'> [ <fornum> | <forlist> ] <doblock> 
 }
 
 rule ifstat {
@@ -93,7 +93,7 @@
 }
 
 rule localdecl {
-  <'local'> <name> [ <','> <name> ]* [ <'='> <explist1> ]?
+  <'local'> <namelist1> [ <'='> <explist1> ]?
 }
 
 rule localfunc {
@@ -101,17 +101,18 @@
 }
 
 rule funcname {
-  <name> [ <'.'> <name> ]* [ <':'> <name> ]?
+  <name> [ <'.'> <name> ]* <method>?
 }
 
+rule method {
+  <':'> <name>
+}
+
+
 rule index {
   <'['> <expr1> <?closebracket>
 }
 
-rule recfield {
-  [ <name> | <index> ] <?assign> <expr1>
-}
-
 rule constructor {
   <'{'> <tablefieldlist>? <?closebrace>
 }
@@ -125,14 +126,20 @@
 }
 
 rule tablefield {
-  [ <recfield> | <expr> ]*
+     <index> <'='> <expr1>
+   | <name> <'='> <expr1>
+   | <expr>
 }
 
 rule parlist {
-    <namelist1> [ <','> <'...'> ]?
-  | <'...'>
+    <namelist1> [ <','> <?varargs> ]? 
+  | <?varargs>
 }
 
+token varargs {
+  <'...'>
+}
+
 rule body {
   <'('> <parlist>? <?closeparen> <block> <?end>
 }
@@ -146,14 +153,14 @@
 }
 
 rule funcargs {
-    <'('> <explist1>? <?closeparen>
+    <'('> <explist1>? <?closeparen> 
   | <constructor>
   | <string>
 }
 
 rule prefixexp {
     <name>
-  | <'('> <expr1> <?closeparen>
+  | <'('> <expr1> <?closeparen> 
 }
 
 rule primaryexp {
@@ -163,16 +170,16 @@
   | <':'> <name> <funcargs>
   | <funcargs>
   ]*
-
 }
 
+
 rule simpleexpr {
     <number>
   | <string>
   | <'nil'>
   | <'true'>
   | <'false'>
-  | <'...'>
+  | <?varargs>
   | <constructor>
   | <'function'> <body>
   | <primaryexp>
@@ -281,7 +288,7 @@
 =cut
 
 token name {
-  <!keyword> \b <ident>
+  <!keyword> \b <ident> 
 }
 
 
@@ -331,5 +338,5 @@
   | <'function'> | <'if'>     | <'in'>    | <'local'>
   | <'nil'>      | <'not'>    | <'or'>    | <'repeat'>
   | <'return'>   | <'then'>   | <'true'>  | <'until'>
-  | <'while'> 	] \b
+  | <'while'>    ] \b
 }

Reply via email to