X-Git-Url: http://git.nguyen.vg/gitweb/?a=blobdiff_plain;f=src%2FOCamlDriver.cpp;h=7a12c7ffc3b4fce220cf78b39af005658873160f;hb=a4b9c7188c2169eddaeabe66a5706a4ec1b6872d;hp=cd7fed45e69d59b02f5ee0058b9844dc76b0954a;hpb=7166a99542af5ad2f5b53fe9fa9e5164dff7cfe5;p=SXSI%2Fxpathcomp.git diff --git a/src/OCamlDriver.cpp b/src/OCamlDriver.cpp index cd7fed4..7a12c7f 100644 --- a/src/OCamlDriver.cpp +++ b/src/OCamlDriver.cpp @@ -899,7 +899,7 @@ BV_QUERY(lessthan, LessThan) //////////////////////////////////////////// Grammar stuff -extern "C" value caml_grammar_load(value file, value load_bp) +extern "C" value caml_grammar_load(value file, value load_bp) { CAMLparam2(file, load_bp); CAMLlocal1(result); @@ -916,3 +916,53 @@ extern "C" value caml_grammar_load(value file, value load_bp) CAMLreturn(result); } +extern "C" value caml_grammar_get_symbol_at(value grammar, value symbol, value preorder) +{ + CAMLparam3(grammar, symbol, preorder); + CAMLreturn(Val_long(GRAMMAR(grammar)->getSymbolAt(Long_val(symbol), Int_val(preorder)))); +} + +extern "C" value caml_grammar_first_child(value grammar, value rule, value pos) +{ + CAMLparam1(grammar); + CAMLreturn(Val_int(GRAMMAR(grammar)->firstChild(Long_val(rule), Int_val(pos)))); +} + +extern "C" value caml_grammar_next_sibling(value grammar, value rule, value pos) +{ + CAMLparam1(grammar); + CAMLreturn(Val_int(GRAMMAR(grammar)->nextSibling(Long_val(rule), Int_val(pos)))); +} + +extern "C" value caml_grammar_is_nil(value grammar, value rule) +{ + CAMLparam1(grammar); + CAMLreturn(Val_bool(GRAMMAR(grammar)->isNil(Long_val(rule)))); +} + +extern "C" value caml_grammar_get_tag(value grammar, value symbol) +{ + CAMLparam1(grammar); + CAMLlocal1(res); + const char * s = (GRAMMAR(grammar)->getTagName(Long_val(symbol) >> 2)).c_str(); + res = caml_copy_string(s); + CAMLreturn(res); +} + +extern "C" value caml_grammar_get_id1(value grammar, value rule) +{ + CAMLparam1(grammar); + CAMLreturn(Val_long(GRAMMAR(grammar)->getID1(Long_val(rule)))); +} + +extern "C" value caml_grammar_get_id2(value grammar, value rule) +{ + CAMLparam1(grammar); + CAMLreturn(Val_long(GRAMMAR(grammar)->getID2(Long_val(rule)))); +} + +extern "C" value caml_grammar_get_param_pos(value grammar, value rule) +{ + CAMLparam1(grammar); + CAMLreturn(Val_int(GRAMMAR(grammar)->getParamPos(Long_val(rule)))); +}