mirror of
https://github.com/janet-lang/janet
synced 2024-09-27 22:58:13 +00:00
Allow compiling tables as peg grammars.
This commit is contained in:
parent
32103441f1
commit
eb4595158d
@ -1253,6 +1253,18 @@ static uint32_t peg_compile1(Builder *b, Janet peg) {
|
|||||||
emit_bytes(b, RULE_LITERAL, len, str);
|
emit_bytes(b, RULE_LITERAL, len, str);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
case JANET_TABLE: {
|
||||||
|
/* Build grammar table */
|
||||||
|
JanetTable *new_grammar = janet_table_clone(janet_unwrap_table(peg));
|
||||||
|
new_grammar->proto = grammar;
|
||||||
|
b->grammar = grammar = new_grammar;
|
||||||
|
/* Run the main rule */
|
||||||
|
Janet main_rule = janet_table_rawget(grammar, janet_ckeywordv("main"));
|
||||||
|
if (janet_checktype(main_rule, JANET_NIL))
|
||||||
|
peg_panic(b, "grammar requires :main rule");
|
||||||
|
rule = peg_compile1(b, main_rule);
|
||||||
|
break;
|
||||||
|
}
|
||||||
case JANET_STRUCT: {
|
case JANET_STRUCT: {
|
||||||
/* Build grammar table */
|
/* Build grammar table */
|
||||||
const JanetKV *st = janet_unwrap_struct(peg);
|
const JanetKV *st = janet_unwrap_struct(peg);
|
||||||
|
Loading…
Reference in New Issue
Block a user