Signed-off-by: Alexandre Terrasa <alexandre@moz-code.org>
end
is_building = false
var nre = self.children[2]
end
is_building = false
var nre = self.children[2]
redef class Nre_id
# The named expression
var nexpr: nullable Nexpr
redef class Nre_id
# The named expression
var nexpr: nullable Nexpr
redef fun accept_check_name_visitor(v) do
var id = children.first.as(Nid)
var name = id.text
redef fun accept_check_name_visitor(v) do
var id = children.first.as(Nid)
var name = id.text
v.nexpr.precs.add(node)
end
v.nexpr.precs.add(node)
end
do
return nexpr.nfa.dup
end
do
return nexpr.nfa.dup
end
redef class Node
# Build the NFA of the regular expression
redef class Node
# Build the NFA of the regular expression
- fun make_rfa: Automaton do
+ fun make_nfa: Automaton do
redef class Nstr
redef fun value do return text.substring(1, text.length-2).unescape_nit
redef class Nstr
redef fun value do return text.substring(1, text.length-2).unescape_nit
do
var a = new Automaton.epsilon
for c in self.value.chars do
do
var a = new Automaton.epsilon
for c in self.value.chars do
redef class Nch_dec
redef fun value do return text.substring_from(1).to_i.code_point.to_s
redef class Nch_dec
redef fun value do return text.substring_from(1).to_i.code_point.to_s
do
var a = new Automaton.atom(self.value.chars.first.code_point)
return a
do
var a = new Automaton.atom(self.value.chars.first.code_point)
return a
redef class Nch_hex
redef fun value do return text.substring_from(2).to_hex.code_point.to_s
redef class Nch_hex
redef fun value do return text.substring_from(2).to_hex.code_point.to_s
do
var a = new Automaton.atom(self.value.chars.first.code_point)
return a
do
var a = new Automaton.atom(self.value.chars.first.code_point)
return a
- assert children.length == 1 else print "no make_rfa for {self}"
- return children.first.make_rfa
+ assert children.length == 1 else print "no make_nfa for {self}"
+ return children.first.make_nfa
end
end
redef class Nre_alter
end
end
redef class Nre_alter
- var a = children[0].make_rfa
- var b = children[2].make_rfa
+ var a = children[0].make_nfa
+ var b = children[2].make_nfa
a.alternate(b)
return a
end
end
redef class Nre_minus
a.alternate(b)
return a
end
end
redef class Nre_minus
- var a = children[0].make_rfa
- var b = children[2].make_rfa.to_dfa
+ var a = children[0].make_nfa
+ var b = children[2].make_nfa.to_dfa
for t in b.start.outs do
if not t.to.outs.is_empty then
# `b` is not a single char, so just use except
for t in b.start.outs do
if not t.to.outs.is_empty then
# `b` is not a single char, so just use except
do
print "{children.first.position.to_s}: NOT YET IMPLEMENTED: token `End`; replaced with an empty string"
return new Automaton.epsilon
do
print "{children.first.position.to_s}: NOT YET IMPLEMENTED: token `End`; replaced with an empty string"
return new Automaton.epsilon
- var a = children[0].make_rfa
+ var a = children[0].make_nfa
var ta = new Token("1")
a.tag_accept(ta)
var ta = new Token("1")
a.tag_accept(ta)
- var b = children[2].make_rfa
+ var b = children[2].make_nfa
var tb = new Token("2")
b.tag_accept(tb)
var tb = new Token("2")
b.tag_accept(tb)
end
redef class Nre_except
end
redef class Nre_except
- var a = children[0].make_rfa
- var b = children[2].make_rfa
+ var a = children[0].make_nfa
+ var b = children[2].make_nfa
return a.except(b)
end
end
redef class Nre_shortest
return a.except(b)
end
end
redef class Nre_shortest
- var a = children[2].make_rfa
+ var a = children[2].make_nfa
a = a.to_dfa
for s in a.accept do
for t in s.outs.to_a do t.delete
a = a.to_dfa
for s in a.accept do
for t in s.outs.to_a do t.delete
end
redef class Nre_longest
end
redef class Nre_longest
- var a = children[2].make_rfa
+ var a = children[2].make_nfa
a = a.to_dfa
for s in a.accept.to_a do
if not s.outs.is_empty then a.accept.remove(s)
a = a.to_dfa
for s in a.accept.to_a do
if not s.outs.is_empty then a.accept.remove(s)
end
redef class Nre_prefixes
end
redef class Nre_prefixes
- var a = children[2].make_rfa
+ var a = children[2].make_nfa
a.trim
a.accept.add_all a.states
return a
a.trim
a.accept.add_all a.states
return a
- var a = children[0].make_rfa
- var b = children[1].make_rfa
+ var a = children[0].make_nfa
+ var b = children[1].make_nfa
a.concat(b)
return a
end
end
redef class Nre_star
a.concat(b)
return a
end
end
redef class Nre_star
- var a = children[0].make_rfa
+ var a = children[0].make_nfa
a.close
return a
end
end
redef class Nre_ques
a.close
return a
end
end
redef class Nre_ques
- var a = children[0].make_rfa
+ var a = children[0].make_nfa
a.optionnal
return a
end
end
redef class Nre_plus
a.optionnal
return a
end
end
redef class Nre_plus
- var a = children[0].make_rfa
+ var a = children[0].make_nfa
a.plus
return a
end
end
redef class Nre_par
a.plus
return a
end
end
redef class Nre_par
- return children[1].make_rfa
+ return children[1].make_nfa
end
end
redef class Nre_class
end
end
redef class Nre_class
do
var c1 = children[0].children[0].value
var c2 = children[3].children[0].value
do
var c1 = children[0].children[0].value
var c2 = children[3].children[0].value
end
redef class Nre_openclass
end
redef class Nre_openclass
do
var c1 = children[0].children[0].value
if c1.length != 1 then
do
var c1 = children[0].children[0].value
if c1.length != 1 then
do
var a = new Automaton.cla(0, null)
return a
do
var a = new Automaton.cla(0, null)
return a