Clean up debugging, a little more test

This commit is contained in:
Nathan Braswell
2015-06-15 21:32:09 -04:00
parent 7b6e47544a
commit 3ed6a15ab4
3 changed files with 16 additions and 11 deletions

View File

@@ -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

View File

@@ -27,6 +27,10 @@ optional!
-1 -1
1 1
2 2
escape!
-1
2
3
Old Contributed Old Contributed
1 1
2 2

View File

@@ -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"));