Spelling
This commit is contained in:
74
fungll.krak
74
fungll.krak
@@ -283,21 +283,21 @@ fun bs(nonterminal: int, rule_idx: int, idx_into_rule: int, left: int, pivot: in
|
||||
var to_ret.construct(nonterminal, rule_idx, idx_into_rule, left, pivot, right): BS
|
||||
return to_ret
|
||||
}
|
||||
/*fun fungll<T,K>(grammer: ref Grammer<T,K>, start_symbol: *char, input: ref str): set<BS> {*/
|
||||
/*return fungll(grammer, str(start_symbol), input)*/
|
||||
/*fun fungll<T,K>(grammar: ref Grammer<T,K>, start_symbol: *char, input: ref str): set<BS> {*/
|
||||
/*return fungll(grammar, str(start_symbol), input)*/
|
||||
/*}*/
|
||||
/*fun fungll<T,K>(grammer: ref Grammer<T,K>, start_symbol: str, input: ref str): set<BS> {*/
|
||||
/*return fungll(grammer, -1*(grammer.nonterminal_funs.find(start_symbol)+1), input)*/
|
||||
/*fun fungll<T,K>(grammar: ref Grammer<T,K>, start_symbol: str, input: ref str): set<BS> {*/
|
||||
/*return fungll(grammar, -1*(grammar.nonterminal_funs.find(start_symbol)+1), input)*/
|
||||
/*}*/
|
||||
fun fungll<T,K>(grammer: ref Grammer<T,K>, start_symbol: int, input: ref str): set<BS> {
|
||||
var R = descend(grammer, start_symbol, 0)
|
||||
fun fungll<T,K>(grammar: ref Grammer<T,K>, start_symbol: int, input: ref str): set<BS> {
|
||||
var R = descend(grammar, start_symbol, 0)
|
||||
var U = set<Descriptor>()
|
||||
var G = map<pair<int, int>, set<Pending>>()
|
||||
var P = map<pair<int,int>, set<int>>()
|
||||
var Y = set<BS>()
|
||||
while R.size() != 0 {
|
||||
var d = R.pop()
|
||||
var it = process(grammer, input, d, G, P)
|
||||
var it = process(grammar, input, d, G, P)
|
||||
var Rp = it.first.first
|
||||
var Yp = it.first.second
|
||||
var Gp = it.second
|
||||
@@ -325,21 +325,21 @@ fun fungll<T,K>(grammer: ref Grammer<T,K>, start_symbol: int, input: ref str): s
|
||||
}
|
||||
return Y
|
||||
}
|
||||
fun descend<T,K>(grammer: ref Grammer<T,K>, symbol: int, l: int): set<Descriptor> {
|
||||
fun descend<T,K>(grammar: ref Grammer<T,K>, symbol: int, l: int): set<Descriptor> {
|
||||
var to_ret = set<Descriptor>()
|
||||
for (var rhs = 0; rhs < grammer.get_nonterminal_rules(symbol).size; rhs++;)
|
||||
for (var rhs = 0; rhs < grammar.get_nonterminal_rules(symbol).size; rhs++;)
|
||||
to_ret.add(descriptor(symbol, rhs, 0, l, l))
|
||||
return to_ret
|
||||
}
|
||||
fun process<T,K>(grammer: ref Grammer<T,K>, input: ref str, descript: Descriptor, G: ref map<pair<int, int>, set<Pending>>, P: ref map<pair<int,int>, set<int>>): triple<pair<set<Descriptor>, set<BS>>, map<pair<int, int>, set<Pending>>, map<pair<int,int>, set<int>>> {
|
||||
fun process<T,K>(grammar: ref Grammer<T,K>, input: ref str, descript: Descriptor, G: ref map<pair<int, int>, set<Pending>>, P: ref map<pair<int,int>, set<int>>): triple<pair<set<Descriptor>, set<BS>>, map<pair<int, int>, set<Pending>>, map<pair<int,int>, set<int>>> {
|
||||
// if at end / end is emptystr
|
||||
if descript.idx_into_rule == grammer.get_nonterminal_rules(descript.nonterminal)[descript.rule_idx].size {
|
||||
return process_e(grammer, descript, G, P)
|
||||
if descript.idx_into_rule == grammar.get_nonterminal_rules(descript.nonterminal)[descript.rule_idx].size {
|
||||
return process_e(grammar, descript, G, P)
|
||||
} else {
|
||||
return process_symbol(grammer, input, descript, G, P)
|
||||
return process_symbol(grammar, input, descript, G, P)
|
||||
}
|
||||
}
|
||||
fun process_e<T,K>(grammer: ref Grammer<T,K>, descript: Descriptor, G: ref map<pair<int, int>, set<Pending>>, P: ref map<pair<int,int>, set<int>>): triple<pair<set<Descriptor>, set<BS>>, map<pair<int, int>, set<Pending>>, map<pair<int,int>, set<int>>> {
|
||||
fun process_e<T,K>(grammar: ref Grammer<T,K>, descript: Descriptor, G: ref map<pair<int, int>, set<Pending>>, P: ref map<pair<int,int>, set<int>>): triple<pair<set<Descriptor>, set<BS>>, map<pair<int, int>, set<Pending>>, map<pair<int,int>, set<int>>> {
|
||||
var nonterminal: int
|
||||
var rule_idx: int
|
||||
var left: int
|
||||
@@ -351,29 +351,29 @@ fun process_e<T,K>(grammer: ref Grammer<T,K>, descript: Descriptor, G: ref map<p
|
||||
var it = ascend(l,K,k)
|
||||
var R = it.first
|
||||
var Y = it.second
|
||||
if grammer.get_nonterminal_rules(X)[descript.rule_idx].size == 0 {
|
||||
if grammar.get_nonterminal_rules(X)[descript.rule_idx].size == 0 {
|
||||
Y.add(bs(X,descript.rule_idx, 0, l, l, l))
|
||||
}
|
||||
return make_triple(make_pair(R,Y), map<pair<int, int>, set<Pending>>(), map(make_pair(X,l), set(k)))
|
||||
}
|
||||
fun process_symbol<T,K>(grammer: ref Grammer<T,K>, input: ref str, descript: Descriptor, G: ref map<pair<int, int>, set<Pending>>, P: ref map<pair<int,int>, set<int>>): triple<pair<set<Descriptor>, set<BS>>, map<pair<int, int>, set<Pending>>, map<pair<int,int>, set<int>>> {
|
||||
var s = grammer.get_nonterminal_rules(descript.nonterminal)[descript.rule_idx][descript.idx_into_rule]
|
||||
fun process_symbol<T,K>(grammar: ref Grammer<T,K>, input: ref str, descript: Descriptor, G: ref map<pair<int, int>, set<Pending>>, P: ref map<pair<int,int>, set<int>>): triple<pair<set<Descriptor>, set<BS>>, map<pair<int, int>, set<Pending>>, map<pair<int,int>, set<int>>> {
|
||||
var s = grammar.get_nonterminal_rules(descript.nonterminal)[descript.rule_idx][descript.idx_into_rule]
|
||||
var k = descript.pivot
|
||||
var R = P.get_with_default(make_pair(s,k), set<int>())
|
||||
var Gp = map(make_pair(s,k), set(pending(descript.nonterminal, descript.rule_idx, descript.idx_into_rule+1, descript.left)))
|
||||
if grammer.is_terminal(s) {
|
||||
return make_triple(matc(grammer,input,descript), map<pair<int,int>, set<Pending>>(), map<pair<int,int>, set<int>>())
|
||||
if grammar.is_terminal(s) {
|
||||
return make_triple(matc(grammar,input,descript), map<pair<int,int>, set<Pending>>(), map<pair<int,int>, set<int>>())
|
||||
} else if R.size() == 0 { // s in N
|
||||
return make_triple(make_pair(descend(grammer,s,k), set<BS>()), Gp, map<pair<int,int>, set<int>>())
|
||||
return make_triple(make_pair(descend(grammar,s,k), set<BS>()), Gp, map<pair<int,int>, set<int>>())
|
||||
} else { // s in N and R != set()
|
||||
return make_triple(skip(k,pending(descript.nonterminal, descript.rule_idx, descript.idx_into_rule+1, descript.left), R), Gp, map<pair<int,int>, set<int>>())
|
||||
}
|
||||
}
|
||||
fun matc<T,K>(grammer: ref Grammer<T,K>, input: ref str, descript: Descriptor): pair<set<Descriptor>, set<BS>> {
|
||||
/*println("trying to match " + grammer.to_string(grammer.get_nonterminal_rules(descript.nonterminal)[descript.rule_idx][descript.idx_into_rule]))*/
|
||||
var match_length = grammer.match_terminal(grammer.get_nonterminal_rules(descript.nonterminal)[descript.rule_idx][descript.idx_into_rule], input, descript.pivot)
|
||||
fun matc<T,K>(grammar: ref Grammer<T,K>, input: ref str, descript: Descriptor): pair<set<Descriptor>, set<BS>> {
|
||||
/*println("trying to match " + grammar.to_string(grammar.get_nonterminal_rules(descript.nonterminal)[descript.rule_idx][descript.idx_into_rule]))*/
|
||||
var match_length = grammar.match_terminal(grammar.get_nonterminal_rules(descript.nonterminal)[descript.rule_idx][descript.idx_into_rule], input, descript.pivot)
|
||||
if match_length > 0 {
|
||||
/*println("matched " + grammer.to_string(grammer.get_nonterminal_rules(descript.nonterminal)[descript.rule_idx][descript.idx_into_rule]))*/
|
||||
/*println("matched " + grammar.to_string(grammar.get_nonterminal_rules(descript.nonterminal)[descript.rule_idx][descript.idx_into_rule]))*/
|
||||
return make_pair(set(descriptor(descript.nonterminal, descript.rule_idx, descript.idx_into_rule+1, descript.left, descript.pivot+match_length)), set(bs(descript.nonterminal, descript.rule_idx, descript.idx_into_rule+1, descript.left, descript.pivot, descript.pivot+match_length)))
|
||||
} else {
|
||||
return make_pair(set<Descriptor>(), set<BS>())
|
||||
@@ -395,31 +395,31 @@ fun nmatch(k:int, K: ref set<Pending>, R: ref set<int>): pair<set<Descriptor>, s
|
||||
return make_pair(Rp,Y)
|
||||
}
|
||||
/*fun main(argc: int, argv: **char): int {*/
|
||||
/*var grammer.construct(): Grammer<int>*/
|
||||
/*var Number = grammer.add_new_nonterminal("Number", vec(grammer.add_terminal("[0-9]+", fun(input: ref str, l: int, r: int): int { return string_to_num<int>(input.slice(l,r)); })), fun(i: ref vec<int>): int { return i[0]; })*/
|
||||
/*var grammar.construct(): Grammer<int>*/
|
||||
/*var Number = grammar.add_new_nonterminal("Number", vec(grammar.add_terminal("[0-9]+", fun(input: ref str, l: int, r: int): int { return string_to_num<int>(input.slice(l,r)); })), fun(i: ref vec<int>): int { return i[0]; })*/
|
||||
|
||||
/*var mult = grammer.add_terminal("\\*", fun(input: ref str, l: int, r: int): int { return 1; })*/
|
||||
/*var Factor = grammer.add_new_nonterminal("Factor", vec(Number), fun(i: ref vec<int>): int { return i[0]; })*/
|
||||
/*grammer.add_to_nonterminal(Factor, vec(Factor, mult, Number), fun(i: ref vec<int>): int { return i[0]*i[2]; })*/
|
||||
/*var mult = grammar.add_terminal("\\*", fun(input: ref str, l: int, r: int): int { return 1; })*/
|
||||
/*var Factor = grammar.add_new_nonterminal("Factor", vec(Number), fun(i: ref vec<int>): int { return i[0]; })*/
|
||||
/*grammar.add_to_nonterminal(Factor, vec(Factor, mult, Number), fun(i: ref vec<int>): int { return i[0]*i[2]; })*/
|
||||
|
||||
/*var add = grammer.add_terminal("\\+", fun(input: ref str, l: int, r: int): int { return 1; })*/
|
||||
/*var Term = grammer.add_new_nonterminal("Term", vec(Factor), fun(i: ref vec<int>): int { return i[0]; })*/
|
||||
/*grammer.add_to_nonterminal(Term, vec(Term, add, Factor), fun(i: ref vec<int>): int { return i[0]+i[2]; })*/
|
||||
/*var add = grammar.add_terminal("\\+", fun(input: ref str, l: int, r: int): int { return 1; })*/
|
||||
/*var Term = grammar.add_new_nonterminal("Term", vec(Factor), fun(i: ref vec<int>): int { return i[0]; })*/
|
||||
/*grammar.add_to_nonterminal(Term, vec(Term, add, Factor), fun(i: ref vec<int>): int { return i[0]+i[2]; })*/
|
||||
|
||||
/*grammer.set_start_symbol(Term)*/
|
||||
/*grammar.set_start_symbol(Term)*/
|
||||
|
||||
/*var input = str("1+23*44")*/
|
||||
/*var BSR = fungll(grammer, input)*/
|
||||
/*var BSR = fungll(grammar, input)*/
|
||||
|
||||
|
||||
/*println(str("length of BSR is: ") + BSR.size())*/
|
||||
/*for (var i = 0; i < BSR.data.size; i++;) {*/
|
||||
/*var BS = BSR.data[i]*/
|
||||
/*println(str() + i + ": " + grammer.to_string(BSR.data[i]))*/
|
||||
/*println(str() + i + ": " + grammar.to_string(BSR.data[i]))*/
|
||||
/*}*/
|
||||
|
||||
/*var res = grammer.eval_BSR(input, BSR)*/
|
||||
/*println(str("result of grammer.eval_BSR(fungll(grammer, ") + input + ")) = " + res)*/
|
||||
/*var res = grammar.eval_BSR(input, BSR)*/
|
||||
/*println(str("result of grammar.eval_BSR(fungll(grammar, ") + input + ")) = " + res)*/
|
||||
|
||||
/*return 0*/
|
||||
/*}*/
|
||||
|
||||
Reference in New Issue
Block a user