nitcc: add `Prefixes` operator
authorJean Privat <jean@pryen.org>
Tue, 21 Jun 2016 17:06:36 +0000 (13:06 -0400)
committerJean Privat <jean@pryen.org>
Thu, 23 Jun 2016 20:19:07 +0000 (16:19 -0400)
Signed-off-by: Jean Privat <jean@pryen.org>

contrib/nitcc/src/nitcc.sablecc
contrib/nitcc/src/nitcc_parser_gen.nit
contrib/nitcc/src/re2nfa.nit

index 18d52cc..d435c77 100644 (file)
@@ -64,6 +64,7 @@ re3 {-> re} =
        {plus:} re3 '+' |
        {shortest:} 'Shortest' '(' re ')' |
        {longest:} 'Longest' '(' re ')' |
+       {prefixes:} 'Prefixes' '(' re ')' |
        {id:} id |
        {par:} '(' re ')' |
        {class:} text '.' '.' text |
index bf3d57b..bfbdbb5 100644 (file)
@@ -85,6 +85,7 @@ var t_and = new Token("and")
 var t_except = new Token("except")
 var t_shortest = new Token("shortest")
 var t_longest = new Token("longest")
+var t_prefixes = new Token("prefixes")
 var t_ch_dec = new Token("ch_dec")
 var t_ch_hex = new Token("ch_hex")
 g.tokens.add_all([t_opar,
@@ -111,6 +112,7 @@ g.tokens.add_all([t_opar,
        t_except,
        t_shortest,
        t_longest,
+       t_prefixes,
        t_ch_dec,
        t_ch_hex])
 
@@ -139,6 +141,7 @@ p_re3.new_alt("re_ques", p_re3, t_ques)
 p_re3.new_alt("re_plus", p_re3, t_plus)
 p_re3.new_alt("re_shortest", t_shortest, t_opar, p_re, t_cpar)
 p_re3.new_alt("re_longest", t_longest, t_opar, p_re, t_cpar)
+p_re3.new_alt("re_prefixes", t_prefixes, t_opar, p_re, t_cpar)
 p_re3.new_alt("re_par", t_opar, p_re, t_cpar)
 p_re3.new_alt("re_class", p_text, t_dot, t_dot, p_text)
 p_re3.new_alt("re_openclass", p_text, t_dot, t_dot, t_dot)
index d523e51..12cd600 100644 (file)
@@ -173,6 +173,16 @@ redef class Nre_longest
        end
 end
 
+redef class Nre_prefixes
+       redef fun make_rfa
+       do
+               var a = children[2].make_rfa
+               a.trim
+               a.accept.add_all a.states
+               return a
+       end
+end
+
 redef class Nre_conc
        redef fun make_rfa
        do