parser: Remove tl_propdef* parser rules
authorJean Privat <jean@pryen.org>
Wed, 20 May 2009 18:54:39 +0000 (14:54 -0400)
committerJean Privat <jean@pryen.org>
Wed, 10 Jun 2009 13:59:14 +0000 (09:59 -0400)
Instead use parametrized propdef rules with ~toplevel

Signed-off-by: Jean Privat <jean@pryen.org>

src/parser/nit.sablecc3xx

index 4a5137e..8763b25 100644 (file)
@@ -167,7 +167,7 @@ import
        ;
 
 implicit_top_class {-> classdef}
-       = tl_propdefs {-> New classdef.top([tl_propdefs.propdef])};
+       = propdefs_toplevel {-> New classdef.top([propdefs_toplevel.propdef])};
 
 implicit_main_class {-> classdef?}
        = implicit_main_meth {-> New classdef.main([implicit_main_meth.propdef])}
@@ -198,19 +198,21 @@ formaldef
 special {-> superclass}
        = no kwspecial [n2]:no type {-> New superclass(kwspecial, type)};
 
-propdefs {-> propdef*}
-       = propdef n1 propdefs_tail* {-> [propdef, propdefs_tail.propdef]};
-propdefs_tail {-> propdef} 
-       = propdef n1 {-> propdef};
-propdef 
-       = {attr} [doc]:no readable writable redef visibility kwattr attrid typing? {-> New propdef.attr(doc.doc, readable.able, writable.able, redef.kwredef, visibility, kwattr, attrid, typing.type, Null)}
-       | {attr2} [doc]:no readable writable redef visibility kwattr attrid typing? assign [n2]:no expr {-> New propdef.attr(doc.doc, readable.able, writable.able, redef.kwredef, visibility, kwattr, attrid, typing.type, expr)}
-       | {deferred} [doc]:no redef visibility kwmeth methid signature kwis kwabstract {-> New propdef.deferred_meth(doc.doc, redef.kwredef, visibility, kwmeth, methid, signature.signature)}
-       | {intern} [doc]:no redef visibility kwmeth methid signature kwis kwintern {-> New propdef.intern_meth(doc.doc, redef.kwredef, visibility, kwmeth, methid, signature.signature)}
+propdefs~toplevel {-> propdef*}
+       = propdef~toplevel n1 propdefs_tail~toplevel* {-> [propdef~toplevel.propdef, propdefs_tail~toplevel.propdef]}
+       ;
+propdefs_tail~toplevel {-> propdef}
+       = propdef~toplevel n1 {-> propdef~toplevel.propdef}
+       ;
+propdef~toplevel {-> propdef}
+       = {meth} [doc]:no redef visibility kwmeth methid signature kwdo stmtso kwend? {-> New propdef.concrete_meth(doc.doc, redef.kwredef, visibility, kwmeth, methid, signature, stmtso.expr)}
+!toplevel| {deferred} [doc]:no redef visibility kwmeth methid signature kwis kwabstract {-> New propdef.deferred_meth(doc.doc, redef.kwredef, visibility, kwmeth, methid, signature.signature)}
+!toplevel| {intern} [doc]:no redef visibility kwmeth methid signature kwis kwintern {-> New propdef.intern_meth(doc.doc, redef.kwredef, visibility, kwmeth, methid, signature.signature)}
        | {extern} [doc]:no redef visibility kwmeth methid signature kwis kwextern string? {-> New propdef.extern_meth(doc.doc, redef.kwredef, visibility, kwmeth, methid, signature.signature, string)}
-       | {meth} [doc]:no redef visibility kwmeth methid signature kwdo stmtso kwend? {-> New propdef.concrete_meth(doc.doc, redef.kwredef, visibility, kwmeth, methid, signature, stmtso.expr)}
-       | {init} [doc]:no redef visibility kwinit methid? signature kwdo stmtso kwend? {-> New propdef.concrete_init(doc.doc, redef.kwredef, visibility, kwinit, methid, signature, stmtso.expr)}
-       | {type} [doc]:no redef visibility kwtype classid typing {-> New propdef.type(doc.doc, redef.kwredef, visibility, kwtype, classid, typing.type)}
+!toplevel| {attr} [doc]:no readable writable redef visibility kwattr attrid typing? {-> New propdef.attr(doc.doc, readable.able, writable.able, redef.kwredef, visibility, kwattr, attrid, typing.type, Null)}
+!toplevel| {attr2} [doc]:no readable writable redef visibility kwattr attrid typing? assign [n2]:no expr {-> New propdef.attr(doc.doc, readable.able, writable.able, redef.kwredef, visibility, kwattr, attrid, typing.type, expr)}
+!toplevel| {init} [doc]:no redef visibility kwinit methid? signature kwdo stmtso kwend? {-> New propdef.concrete_init(doc.doc, redef.kwredef, visibility, kwinit, methid, signature, stmtso.expr)}
+!toplevel| {type} [doc]:no redef visibility kwtype classid typing {-> New propdef.type(doc.doc, redef.kwredef, visibility, kwtype, classid, typing.type)}
        ;
 readable {-> able?}
        = redef kwreadable {-> New able.read(redef.kwredef, kwreadable)}
@@ -221,15 +223,6 @@ writable {-> able?}
        | {empty} {-> Null}
        ;
 
-tl_propdefs {-> propdef*}
-       = tl_propdef n1 tl_propdefs_tail* {-> [tl_propdef.propdef, tl_propdefs_tail.propdef]};
-tl_propdefs_tail {-> propdef} 
-       = tl_propdef n1 {-> tl_propdef.propdef};
-tl_propdef {-> propdef}
-       = {extern} [doc]:no redef visibility kwmeth methid signature kwis kwextern string? {-> New propdef.extern_meth(doc.doc, redef.kwredef, visibility, kwmeth, methid, signature, string)}
-       | {meth} [doc]:no redef visibility kwmeth methid signature kwdo stmtso {-> New propdef.concrete_meth(doc.doc, redef.kwredef, visibility, kwmeth, methid, signature, stmtso.expr)}
-       ;
-
 visibility
        = {public} {-> New visibility.public()}
        | {private} kwprivate no {-> New visibility.private(kwprivate)}