syntax: enable empty expression-expansion in super-strings
authorJean Privat <jean@pryen.org>
Mon, 10 Mar 2014 13:40:41 +0000 (09:40 -0400)
committerJean Privat <jean@pryen.org>
Mon, 10 Mar 2014 13:40:41 +0000 (09:40 -0400)
Allows `"a{}b"` to be `"ab"`, ie with an empty expansion in the body.

The point of this commit is to allow line-breaks or comments in strings

~~~
print "this {
      }is a { # some comment
      }string"
~~~
outputs "this is a string"

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

src/parser/nit.sablecc3xx

index 8ccaa08..5326b1b 100644 (file)
@@ -562,11 +562,15 @@ expr_atom~nopar~nobra {-> expr}
 superstring {-> expr} 
        = superstring_start superstring_middle* superstring_end annotations? {-> New expr.superstring([superstring_start.expr, superstring_middle.expr, superstring_end.expr], annotations)};
 superstring_start {-> expr*}
-       = start_string_p no expr [n2]:no {-> [start_string_p.expr, expr]};
+       = start_string_p no expr [n2]:no {-> [start_string_p.expr, expr]}
+       | {noexpr} start_string_p no {-> [start_string_p.expr]}
+       ;
 start_string_p {-> expr}
        = start_string {-> New expr.start_string(start_string)};
 superstring_middle {-> expr*}
-       = mid_string_p no expr [n2]:no {-> [mid_string_p.expr, expr]};
+       = mid_string_p no expr [n2]:no {-> [mid_string_p.expr, expr]}
+       | {noexpr} mid_string_p no {-> [mid_string_p.expr]}
+       ;
 mid_string_p {-> expr}
        = mid_string {-> New expr.mid_string(mid_string)};
 superstring_end {-> expr}