Skip to content
Snippets Groups Projects
Commit 8a5c4b6b authored by Meredith L. Patterson's avatar Meredith L. Patterson
Browse files

beginnings of translating parser combinators to regex vm instructions

parent f5245eaa
No related branches found
No related tags found
No related merge requests found
......@@ -21,10 +21,19 @@ static bool opt_isValidCF(void *env) {
return p->vtable->isValidCF(p->env);
}
static bool opt_ctrvm(struct HRVMProg_ *prog, void* env) {
uint16_t insn = h_rvm_insert_insn(prog, RVM_FORK, 0);
if (!h_compile_regex(prog, (HParser*)env->env))
return false;
h_rvm_patch_arg(prog, insn, h_rvm_get_ip(prog));
return true;
}
static const HParserVtable optional_vt = {
.parse = parse_optional,
.isValidRegular = opt_isValidRegular,
.isValidCF = opt_isValidCF,
.compile_to_rvm = opt_ctvrm,
};
const HParser* h_optional(const HParser* p) {
......
......@@ -42,10 +42,20 @@ static bool sequence_isValidCF(void *env) {
return true;
}
static bool sequence_ctrvm(struct HRVMProg_ *prog, void* env) {
HSequence *s = (HSequence*)env;
for (size_t i=0; i<s->len; ++i) {
if (!s->p_array[i]->vtable->compile_to_rvm(prog, s->p_array[i]->env))
return false;
}
return true;
}
static const HParserVtable sequence_vt = {
.parse = parse_sequence,
.isValidRegular = sequence_isValidRegular,
.isValidCF = sequence_isValidCF,
.compile_to_rvm = sequence_ctrvm,
};
const HParser* h_sequence(const HParser* p, ...) {
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment