X-Git-Url: http://nitlanguage.org diff --git a/src/parser/nit.sablecc3xx b/src/parser/nit.sablecc3xx index 1931792..603133c 100644 --- a/src/parser/nit.sablecc3xx +++ b/src/parser/nit.sablecc3xx @@ -204,6 +204,7 @@ ge = '>='; gg = '>>'; starship = '<=>'; bang='!'; +quest='?'; at='@'; semi=';'; @@ -317,12 +318,16 @@ propdef~toplevel {-> propdef} ; annotation_withend~nonull {-> annotations?} = {oneliner} kwis annotation_list {-> New annotations(kwis, Null, Null, [annotation_list.annotation], Null, Null)} - | {more} kwis n1 line_annotation+ kwend {-> New annotations(kwis, Null, Null, [line_annotation.annotation], Null, kwend) } + | {more} kwis n1 line_annotations kwend {-> New annotations(kwis, Null, Null, [line_annotations.annotation], Null, kwend) } !nonull | {null} {-> Null} ; annotation_noend {-> annotations} = {oneliner} kwis annotation_list {-> New annotations(kwis, Null, Null, [annotation_list.annotation], Null, Null)} - | {more} kwis n1 line_annotation+ {-> New annotations(kwis, Null, Null, [line_annotation.annotation], Null, Null) } + | {more} kwis n1 line_annotations {-> New annotations(kwis, Null, Null, [line_annotations.annotation], Null, Null) } + ; + +line_annotations {-> annotation*} + = {some} line_annotation* n? {-> [line_annotation.annotation] } ; visibility @@ -638,6 +643,7 @@ expr_new~nopar~nobra {-> expr} = expr_atom~nopar~nobra {-> expr_atom~nopar~nobra.expr} | {new} kwnew no type_atom~nobra_nopar args {-> New expr.new(kwnew, type_atom~nobra_nopar.type, Null, args.exprs)} | {isset_attr} kwisset recv~nopar~nobra qualified_o attrid {-> New expr.isset_attr(kwisset, recv~nopar~nobra.expr, attrid)} + | {callref} amp recv~nopar~nobra qid args {-> New expr.callref(amp, recv~nopar~nobra.expr, qid, args.exprs)} ; expr_atom~nopar~nobra {-> expr} @@ -669,6 +675,8 @@ expr_single~nopar~nobra {-> expr} | {char} char annotations_o {-> New expr.char(char, annotations_o.annotations)} | {string} string annotations_o {-> New expr.string(string, annotations_o.annotations)} | {superstring} superstring {-> superstring.expr} + | {lambdan} kwmeth signature kwdo no stmts [n2]:no kwend {-> New expr.lambda(kwmeth, signature, kwdo, stmts.expr)} + | {lambda0} kwmeth signature kwdo no endblock {-> New expr.lambda(kwmeth, signature, kwdo, endblock.expr)} !nopar | {par} expr_par {-> expr_par.expr} // !nopar to unambiguise 'foo[5].bar' between '(foo[5]).bar' and 'foo([5].bar), !nobra!nopar | {range} obra no expr [n2]:no dotdot [n3]:no [expr2]:expr_nobra [n4]:no cbra annotations_o {-> New expr.crange(obra, expr, dotdot, expr2.expr, cbra, annotations_o.annotations)} @@ -792,6 +800,7 @@ atid~forclass {-> atid} recv~nopar~nobra {-> expr} = expr_atom~nopar~nobra dot no {-> expr_atom~nopar~nobra.expr} + | {safe} expr_atom~nopar~nobra quest dot no {-> New expr.safe(expr_atom~nopar~nobra.expr, quest)} | {implicit} {-> New expr.implicit_self()} ; @@ -1019,6 +1028,7 @@ expr = {block} expr* kwend? | {attr_assign} expr [id]:attrid assign [value]:expr | {attr_reassign} expr [id]:attrid assign_op [value]:expr | {call} expr qid [args]:exprs + | {callref} amp expr qid [args]:exprs | {call_assign} expr qid [args]:exprs assign [value]:expr | {call_reassign} expr qid [args]:exprs assign_op [value]:expr | {super} qualified? kwsuper [args]:exprs @@ -1046,6 +1056,7 @@ expr = {block} expr* kwend? | {mid_string} [string]:mid_string | {end_string} [string]:end_string | {superstring} [exprs]:expr* annotations? + | {lambda} kwmeth signature kwdo expr | {par} opar expr cpar annotations? | {as_cast} expr kwas opar? type cpar? | {as_notnull} expr kwas opar? kwnot kwnull cpar? @@ -1053,6 +1064,7 @@ expr = {block} expr* kwend? | {debug_type} kwdebug kwtype expr type | {vararg} expr dotdotdot | {namedarg} id assign expr + | {safe} expr quest | {type} type | {methid} expr [id]:methid | {at} annotations