Add + and * to add_grammer_rule. Realized that rules should actually be passed to functions as params, with option for variadac, that will be up next

This commit is contained in:
Nathan Braswell
2020-05-12 00:32:12 -04:00
parent 77ce4095c0
commit 25801b3d3a
4 changed files with 119 additions and 164 deletions

View File

@@ -51,12 +51,13 @@ obj Grammer<T,K> (Object) {
nonterminal_funs.add(vec(make_pair(d,f)))
return -1*nonterminals.size
}
fun add_to_or_create_nonterminal(name: ref str, rule: ref vec<int>, d: K, f: fun(ref K,ref vec<T>): T) {
fun add_to_or_create_nonterminal(name: ref str, rule: ref vec<int>, d: K, f: fun(ref K,ref vec<T>): T): int {
var idx = nonterminal_names.find(name)
if idx >= 0 {
add_to_nonterminal(-1*(idx+1), rule, d, f)
return -1*(idx+1)
} else {
add_new_nonterminal(name, rule, d, f)
return add_new_nonterminal(name, rule, d, f)
}
}
fun add_to_nonterminal(nonterminal: int, rule: ref vec<int>, d: K, f: fun(ref K,ref vec<T>): T) {