X-Git-Url: http://git.nguyen.vg/gitweb/?a=blobdiff_plain;f=src%2FOCamlDriver.cpp;h=be4670997a96ace81e4a25c3512a31f17d9092e7;hb=6df6ad6cf27e57872bd5891b49354acb0a5ce6a4;hp=cd7fed45e69d59b02f5ee0058b9844dc76b0954a;hpb=7166a99542af5ad2f5b53fe9fa9e5164dff7cfe5;p=SXSI%2Fxpathcomp.git diff --git a/src/OCamlDriver.cpp b/src/OCamlDriver.cpp index cd7fed4..be46709 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,66 @@ 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 tag) +{ + CAMLparam1(grammar); + CAMLlocal1(res); + const char * s = (GRAMMAR(grammar)->getTagName(Long_val(tag))).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)))); +} + +extern "C" value caml_grammar_translate_tag(value grammar, value tag) +{ + CAMLparam1(grammar); + CAMLreturn(Val_int(GRAMMAR(grammar)->translateTag(Int_val(tag)))); +} + +extern "C" value caml_grammar_register_tag(value grammar, value str) +{ + CAMLparam2(grammar, str); + char * s = String_val(str); + CAMLreturn(Val_int(GRAMMAR(grammar)->getTagID(s))); +}