X-Git-Url: http://nitlanguage.org diff --git a/src/parser/nit.sablecc3xx b/src/parser/nit.sablecc3xx index 88619c5..323e465 100644 --- a/src/parser/nit.sablecc3xx +++ b/src/parser/nit.sablecc3xx @@ -164,11 +164,11 @@ module = moduledecl? [imports]:import* [classdefs]:classdef* implicit_top_class? implicit_main_class? {-> New module(moduledecl, [imports.import],[classdefs.classdef,implicit_top_class.classdef,implicit_main_class.classdef])}; moduledecl - = [doc]:no kwmodule no id [n2]:n1 {-> New moduledecl(doc.doc, kwmodule, id)}; + = [doc]:no kwmodule no module_name [n2]:n1 {-> New moduledecl(doc.doc, kwmodule, module_name)}; import - = {std} [doc]:no visibility kwimport no id [n2]:n1 {-> New import.std(visibility, kwimport, id)} - | {no} [doc]:no visibility kwimport no kwend [n2]:n1 {-> New import.no(visibility, kwimport, kwend)} + = {std} [doc]:no visibility kwimport no module_name [n2]:n1 {-> New import.std(visibility, kwimport, module_name)} + | {no} [doc]:no visibility kwimport no kwend [n2]:n1 {-> New import.no(visibility, kwimport, kwend)} ; implicit_top_class {-> classdef} @@ -409,8 +409,8 @@ while~withelse {-> expr} ; for~withelse {-> expr} - = kwfor no id [n2]:no kwin [n3]:no expr [n4]:no kwdo stmtso_withend label {-> New expr.for(kwfor, id, expr, kwdo, stmtso_withend.expr, label)} - | {nolabel} kwfor no id [n2]:no kwin [n3]:no expr [n4]:no kwdo stmtso~withelse {-> New expr.for(kwfor, id, expr, kwdo, stmtso~withelse.expr, Null)} + = kwfor no [ids]:idlist [n2]:no kwin [n3]:no expr [n4]:no kwdo stmtso_withend label {-> New expr.for(kwfor, [ids.id], expr, kwdo, stmtso_withend.expr, label)} + | {nolabel} kwfor no [ids]:idlist [n2]:no kwin [n3]:no expr [n4]:no kwdo stmtso~withelse {-> New expr.for(kwfor, [ids.id], expr, kwdo, stmtso~withelse.expr, Null)} ; assert~withelse {-> expr} @@ -553,6 +553,11 @@ idlist_nopar {-> id*} | {more} idlist_nopar no comma [n2]:no id {-> [idlist_nopar.id, id]} ; +module_name {-> module_name} + = {mod} modquad* id {-> New module_name(Null, [modquad.id], id)} + | {root} quad no modquad* id {-> New module_name(quad, [modquad.id], id)} + ; + qualified = {cla} modquad* classquad {-> New qualified([modquad.id], classquad.classid)} | {mod} modquad+ {-> New qualified([modquad.id], Null)} @@ -584,9 +589,9 @@ Abstract Syntax Tree module = moduledecl? [imports]:import* [classdefs]:classdef*; moduledecl - = doc? kwmodule id; + = doc? kwmodule [name]:module_name; -import = {std} visibility kwimport id +import = {std} visibility kwimport [name]:module_name | {no} visibility kwimport kwend ; @@ -651,7 +656,7 @@ expr = {block} expr* | {ifexpr} kwif expr kwthen [then]:expr kwelse [else]:expr | {while} kwwhile expr kwdo [block]:expr? label? | {loop} kwloop [block]:expr? label? - | {for} kwfor id expr kwdo [block]:expr? label? + | {for} kwfor [ids]:id* expr kwdo [block]:expr? label? | {assert} kwassert id? expr [else]:expr? | {once} kwonce expr | {send} expr @@ -728,6 +733,8 @@ closure_id | {break} kwbreak ; +module_name = quad? [path]:id* id; + qualified = id* classid? ; doc = comment+;