X-Git-Url: http://git.nguyen.vg/gitweb/?a=blobdiff_plain;f=src%2FOCamlDriver.cpp;fp=src%2FOCamlDriver.cpp;h=0f15f493d6b854b110bfef3c22e23b44e0c659cd;hb=7b50894295e91036042de481e02edb71842a6e7a;hp=cd7fed45e69d59b02f5ee0058b9844dc76b0954a;hpb=7166a99542af5ad2f5b53fe9fa9e5164dff7cfe5;p=SXSI%2Fxpathcomp.git diff --git a/src/OCamlDriver.cpp b/src/OCamlDriver.cpp index cd7fed4..0f15f49 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,36 @@ 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); +}