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
}