Clean up debugging, a little more test
This commit is contained in:
@@ -70,7 +70,6 @@ obj regex(Object) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
fun destruct():void {
|
fun destruct():void {
|
||||||
//begin->destruct()
|
|
||||||
regexString.destruct()
|
regexString.destruct()
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -89,22 +88,23 @@ obj regex(Object) {
|
|||||||
var escapeing = false
|
var escapeing = false
|
||||||
|
|
||||||
for (var i = 0; i < regex_string.length(); i++;) {
|
for (var i = 0; i < regex_string.length(); i++;) {
|
||||||
//io::print("i: "); io::print(i); io::print(" : "); io::println(regex_string[i])
|
|
||||||
if (regex_string[i] == '*' && !escapeing) {
|
if (regex_string[i] == '*' && !escapeing) {
|
||||||
for (var j = 0; j < current_end.size; j++;)
|
for (var j = 0; j < current_end.size; j++;)
|
||||||
current_end[j]->next_states.add_all(current_begin)
|
current_end[j]->next_states.add_all(current_begin)
|
||||||
//io::print("previous_begin size: "); io::println(previous_begin.size)
|
|
||||||
current_begin.add_all(previous_begin)
|
current_begin.add_all(previous_begin)
|
||||||
current_end.add_all(previous_end)
|
current_end.add_all(previous_end)
|
||||||
|
|
||||||
} else if (regex_string[i] == '+' && !escapeing) {
|
} else if (regex_string[i] == '+' && !escapeing) {
|
||||||
for (var j = 0; j < current_end.size; j++;)
|
for (var j = 0; j < current_end.size; j++;)
|
||||||
current_end[j]->next_states.add_all(current_begin)
|
current_end[j]->next_states.add_all(current_begin)
|
||||||
//io::print("previous_begin size +: "); io::println(previous_begin.size)
|
|
||||||
} else if (regex_string[i] == '?' && !escapeing) {
|
} else if (regex_string[i] == '?' && !escapeing) {
|
||||||
current_begin.add_all(previous_begin)
|
current_begin.add_all(previous_begin)
|
||||||
current_end.add_all(previous_end)
|
current_end.add_all(previous_end)
|
||||||
|
|
||||||
} else if (regex_string[i] == '|' && !escapeing) {
|
} else if (regex_string[i] == '|' && !escapeing) {
|
||||||
alternating = true
|
alternating = true
|
||||||
|
|
||||||
} else if (regex_string[i] == '(' && !escapeing) {
|
} else if (regex_string[i] == '(' && !escapeing) {
|
||||||
// note that we don't have a ')' case, as we skip past it with our indicies
|
// note that we don't have a ')' case, as we skip past it with our indicies
|
||||||
var perenEnd = i + 1
|
var perenEnd = i + 1
|
||||||
@@ -113,8 +113,6 @@ obj regex(Object) {
|
|||||||
depth++
|
depth++
|
||||||
else if (regex_string[perenEnd] == ')')
|
else if (regex_string[perenEnd] == ')')
|
||||||
depth--
|
depth--
|
||||||
//io::print("unperened: ")
|
|
||||||
//io::println(regex_string.slice(i+1, perenEnd-1))
|
|
||||||
var innerBeginEnd = compile(regex_string.slice(i+1, perenEnd-1))
|
var innerBeginEnd = compile(regex_string.slice(i+1, perenEnd-1))
|
||||||
// NOTE: perenEnd is one past the close peren
|
// NOTE: perenEnd is one past the close peren
|
||||||
i = perenEnd-1
|
i = perenEnd-1
|
||||||
@@ -131,8 +129,10 @@ obj regex(Object) {
|
|||||||
current_end = innerBeginEnd.second
|
current_end = innerBeginEnd.second
|
||||||
}
|
}
|
||||||
alternating = false
|
alternating = false
|
||||||
|
|
||||||
} else if (regex_string[i] == '\\' && !escapeing) {
|
} else if (regex_string[i] == '\\' && !escapeing) {
|
||||||
escapeing = true
|
escapeing = true
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
var next = mem::new<regexState>()->construct(regex_string[i])
|
var next = mem::new<regexState>()->construct(regex_string[i])
|
||||||
if (alternating) {
|
if (alternating) {
|
||||||
@@ -141,14 +141,9 @@ obj regex(Object) {
|
|||||||
current_end.add(next)
|
current_end.add(next)
|
||||||
} else {
|
} else {
|
||||||
current_end.do(fun(it: regexState*, next: regexState*):void { it->next_states.add(next); }, next)
|
current_end.do(fun(it: regexState*, next: regexState*):void { it->next_states.add(next); }, next)
|
||||||
//current_end.do(fun(it: regexState*, next: regexState*):void { io::print("adding: "); io::print(next->character); io::print(" to "); io::println(it->character); it->next_states.add(next); }, next)
|
|
||||||
//io::print("previous_begin size before current: "); io::println(previous_begin.size)
|
|
||||||
//io::print("current_begin size before current: "); io::println(current_begin.size)
|
|
||||||
previous_begin = current_begin
|
previous_begin = current_begin
|
||||||
//io::print("previous_begin size after current: "); io::println(previous_begin.size)
|
|
||||||
previous_end = current_end
|
previous_end = current_end
|
||||||
current_begin = vector::vector(next)
|
current_begin = vector::vector(next)
|
||||||
//io::print("current_begin size after current: "); io::println(current_begin.size)
|
|
||||||
current_end = vector::vector(next)
|
current_end = vector::vector(next)
|
||||||
}
|
}
|
||||||
escapeing = false
|
escapeing = false
|
||||||
|
|||||||
@@ -27,6 +27,10 @@ optional!
|
|||||||
-1
|
-1
|
||||||
1
|
1
|
||||||
2
|
2
|
||||||
|
escape!
|
||||||
|
-1
|
||||||
|
2
|
||||||
|
3
|
||||||
Old Contributed
|
Old Contributed
|
||||||
1
|
1
|
||||||
2
|
2
|
||||||
|
|||||||
@@ -43,6 +43,12 @@ fun main():int {
|
|||||||
println(reg.long_match("b"))
|
println(reg.long_match("b"))
|
||||||
println(reg.long_match("ab"))
|
println(reg.long_match("ab"))
|
||||||
|
|
||||||
|
println("escape!")
|
||||||
|
reg = regex("a\\?+")
|
||||||
|
println(reg.long_match("a"))
|
||||||
|
println(reg.long_match("a?"))
|
||||||
|
println(reg.long_match("a??"))
|
||||||
|
|
||||||
println("Old Contributed")
|
println("Old Contributed")
|
||||||
var re = regex("a*");
|
var re = regex("a*");
|
||||||
println(re.long_match("a"));
|
println(re.long_match("a"));
|
||||||
|
|||||||
Reference in New Issue
Block a user