X-Git-Url: http://nitlanguage.org diff --git a/src/parser/nit.sablecc3xx b/src/parser/nit.sablecc3xx index 0e1094b..10c0bb6 100644 --- a/src/parser/nit.sablecc3xx +++ b/src/parser/nit.sablecc3xx @@ -83,6 +83,7 @@ kwif = 'if'; kwthen = 'then'; kwelse = 'else'; kwwhile = 'while'; +kwloop = 'loop'; kwfor = 'for'; kwin = 'in'; kwand = 'and'; @@ -319,6 +320,7 @@ stmt~withelse {-> expr} | {do} do~withelse {-> do~withelse.expr} | {if} if~withelse {-> if~withelse.expr} | {while} while~withelse {-> while~withelse.expr} + | {loop} loop~withelse {-> loop~withelse.expr} | {for} for~withelse {-> for~withelse.expr} | {assert} assert~withelse {-> assert~withelse.expr} | {call} recv id args_nopar closure_defs~withelse? {-> New expr.call(recv.expr, id, [args_nopar.expr], [closure_defs~withelse.closure_def])} @@ -386,6 +388,11 @@ elsepartblock {-> expr?} | {empty} kwend {-> Null} ; +loop~withelse {-> expr} + = kwloop stmtso~withelse_withend label? {-> New expr.loop(kwloop, stmtso~withelse_withend.expr, label)} + | {noend} kwloop stmt~withelse {-> New expr.loop(kwloop, stmt~withelse.expr, Null)} + ; + while~withelse {-> expr} = kwwhile no expr [n2]:no kwdo stmtso~withelse_withend label? {-> New expr.while(kwwhile, expr, kwdo, stmtso~withelse_withend.expr, label)} | {noend} kwwhile no expr [n2]:no kwdo stmt~withelse {-> New expr.while(kwwhile, expr, kwdo, stmt~withelse.expr, Null)} @@ -627,6 +634,7 @@ expr = {block} expr* | {if} kwif expr [then]:expr? [else]: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? | {assert} kwassert id? expr | {once} kwonce expr