Introduction to Nit generators
authorAit younes Mehdi Adel <overpex@gmail.com>
Wed, 3 Feb 2016 21:38:37 +0000 (16:38 -0500)
committerAit younes Mehdi Adel <overpex@gmail.com>
Wed, 3 Feb 2016 22:08:14 +0000 (17:08 -0500)
Introduce the `yield` keyword in Nit grammar

src/parser/nit.sablecc3xx
src/parser/parser_nodes.nit

index f532e7d..c0a9fd6 100644 (file)
@@ -158,6 +158,7 @@ kwisset = 'isset';
 kwlabel = 'label';
 kwwith = 'with';
 kwdebug = '__debug__';
+kwyield = 'yield';
 
 opar = '(';
 cpar = ')';
@@ -440,6 +441,7 @@ stmt~withelse~noexpr~nopar {-> expr}
        = {vardecl} vardecl {-> vardecl.expr}
        | {assign} assignment~nopar {-> assignment~nopar.expr}
        | {return} kwreturn expr? {-> New expr.return(kwreturn, expr)}
+       | {yield} kwyield expr {-> New expr.yield(kwyield, expr)}
        | {break} kwbreak label? {-> New expr.break(kwbreak, label)}
        | {abort} kwabort {-> New expr.abort(kwabort)}
        | {continue} kwcontinue label? {-> New expr.continue(kwcontinue, label)}
@@ -957,6 +959,7 @@ label = kwlabel id?;
 expr   = {block} expr* kwend? 
        | {vardecl} kwvar? id type? assign? expr? annotations?
        | {return} kwreturn? expr?
+       | {yield} kwyield expr
        | {break} kwbreak label?
        | {abort} kwabort
        | {continue} kwcontinue? label?
index 55d4606..9fe32f6 100644 (file)
@@ -696,6 +696,11 @@ class TKwwith
        super TokenKeyword
 end
 
+# The keyword `yield`
+class TKwyield
+       super TokenKeyword
+end
+
 # The special keyword `__DEBUG__`
 class TKwdebug
        super Token
@@ -1780,6 +1785,17 @@ class AReturnExpr
        var n_expr: nullable AExpr = null is writable
 end
 
+# A `yield` statement. eg `yield x`
+class AYieldExpr
+       super AExpr
+
+       # The `yield` keyword
+       var n_kwyield: nullable TKwyield = null is writable
+
+       # The return value, if any
+       var n_expr: nullable AExpr = null is writable
+end
+
 # Something that has a label.
 abstract class ALabelable
        super Prod