var p_re1 = new Production("re1")
var p_re2 = new Production("re2")
var p_re3 = new Production("re3")
+var p_text = new Production("text")
var p_par = new Production("parser")
var p_ign = new Production("ignored")
var p_rej = new Production("rejected")
var p_elems = new Production("elems")
var p_elem_list = new Production("elem_list")
var p_elem = new Production("elem")
-g.prods.add_all([p_gr, p_re, p_re1, p_re2, p_re3, p_lex, p_exprs, p_expr, p_par, p_ign, p_rej, p_prods, p_prod, p_ptrans_o, p_alts, p_alt, p_altid_o, p_altid, p_elems, p_elem_list, p_elem])
+g.prods.add_all([p_gr, p_re, p_re1, p_re2, p_re3, p_text, p_lex, p_exprs, p_expr, p_par, p_ign, p_rej, p_prods, p_prod, p_ptrans_o, p_alts, p_alt, p_altid_o, p_altid, p_elems, p_elem_list, p_elem])
g.prods.add(new Production("atrans"))
g.prods.add(new Production("elemid"))
g.prods.add(new Production("nelem"))
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_par", t_opar, p_re, t_cpar)
-p_re3.new_alt("re_str", t_str)
-p_re3.new_alt("re_ch_dec", t_ch_dec)
-p_re3.new_alt("re_class", t_str, t_dot, t_dot, t_str)
+p_re3.new_alt("re_class", p_text, t_dot, t_dot, p_text)
p_re3.new_alt("re_any", t_any)
p_re3.new_alt("re_id", t_id)
+p_re3.new_alt("re_text", p_text)
+
+p_text.new_alt("re_str", t_str)
+p_text.new_alt("re_ch_dec", t_ch_dec)
p_par.new_alt("par", t_kw, p_ign, p_rej, p_prods)
p_elem_list.new_alt("elem_list_one", p_elem)
p_elem.new_alt("elem_id", t_id)
-p_elem.new_alt("elem_str", t_str)
+p_elem.new_alt("elem_str", p_text)
p_elem.new_alt("elem_par", t_opar, p_alts, t_cpar)
p_elem.new_alt("elem_star", p_elem, t_star)
p_elem.new_alt("elem_ques", p_elem, t_ques)
print inspect
abort
end
+
+ # The real value of the string
+ fun value: String do
+ print inspect
+ abort
+ end
end
redef class Nstr
- # The real value of the string
- fun value: String do return text.substring(1, text.length-2).unescape_nit
+ redef fun value: String do return text.substring(1, text.length-2).unescape_nit
redef fun make_rfa: Automaton
do
var a = new Automaton.epsilon
end
redef class Nch_dec
- # The real value of the char
- fun value: String do return text.substring_from(1).to_i.ascii.to_s
+ redef fun value: String do return text.substring_from(1).to_i.ascii.to_s
redef fun make_rfa: Automaton
do
var a = new Automaton.atom(self.value.first.ascii)
redef class Nre_class
redef fun make_rfa: Automaton
do
- var c1 = children[0].as(Nstr).value
- var c2 = children[3].as(Nstr).value
+ var c1 = children[0].children[0].value
+ var c2 = children[3].children[0].value
if c1.length != 1 or c2.length != 1 then
print "Classes only works on single char"
exit(1)