CS153/hw6/oatprograms/regex.oat

35 lines
846 B
Text
Raw Normal View History

int reg_match(int[] str, int[] reg, int p1, int p2, int last) {
if (str[p1] == 0 & reg[p2] == 0) {
return 1;
}
if (str[p1] == 0 & reg[p2] != 0) {
return 0;
}
if (str[p1] != 0 & reg[p2] == 0) {
return 0;
}
if (reg[p2+1] == 42) {
return reg_match(str, reg, p1, p2+1, reg[p2]);
}
if (reg[p2] == 42) {
var result = reg_match(str, reg, p1, p2+1, 0);
if (result == 1) {
return 1;
}
if (str[p1] == last | last == 46) {
return reg_match(str, reg, p1+1, p2, last);
}
return 0;
}
if (str[p1] == reg[p2] | reg[p2] == 46) {
return reg_match(str, reg, p1+1, p2+1, 0);
}
return 0;
}
int program(int argc, string[] argv) {
var str = new int[]{97, 98, 99, 99, 99, 99, 99, 100, 101, 102, 0};
var reg = new int[]{97, 103, 42, 46, 99, 42, 99, 42, 100, 101, 42, 102, 0};
return reg_match(str, reg, 0, 0, 0);
}