-1

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

4

1 回答 1

2

没有看到您的代码,很难回答,但假设您的启动规则被调用start,并且您生成的解析器模块被调用Parser.ml并且您生成的词法分析器模块被调用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)
于 2017-12-12T15:24:05.153 回答