如何使用ocamlyacc在OCaml中解析内存中的字符串(字符串类型)?

如何使用ocamlyacc在OCaml中解析内存中的字符串(字符串类型)?,ocaml,ocamlyacc,Ocaml,Ocamlyacc,我有一个解析器,它使用Ocamlyacc和lex解析std输入。如何在OCaml中触发字符串的开始解析规则?如果没有看到您的代码,很难回答,但假设您的开始规则名为start,生成的解析器模块名为parser.ml,您生成的lexer模块名为lexer.ml,您应该执行以下操作: let parse_from_string s = let lex = Lexing.from_string s in try Lexing.(lex.lex_curr_p <- {lex.

我有一个解析器,它使用Ocamlyacc和lex解析std输入。如何在OCaml中触发字符串的开始解析规则?

如果没有看到您的代码,很难回答,但假设您的开始规则名为
start
,生成的解析器模块名为
parser.ml
,您生成的lexer模块名为
lexer.ml
,您应该执行以下操作:

let parse_from_string s =
  let lex = Lexing.from_string s in
    try
      Lexing.(lex.lex_curr_p <- {lex.lex_curr_p with pos_cnum = 0});
      Parser.start Lexer.token lex
    with
    | Failure s ->
        Printf.eprintf "Error near %s\n\n"
        (string_of_position lex.lex_start_p)
让我们从\u字符串解析\u=
让lex=Lexing.from_字符串s in
尝试
Lexing.(lex.lex\u curr\p
Printf.eprintf“靠近%s的错误\n\n”
(位置lex.lex\u start\p的字符串)

您的代码是什么样子的?在标准输入上调用lexer的部分?