我有一个解析器,它使用Ocamlyacc和lex解析std输入。如何在OCaml中的字符串上触发启动解析规则?
答案 0 :(得分:2)
在没有看到您的代码的情况下,很难回答,但假设您的启动规则被称为Parser.ml
,并且您生成的解析器模块被称为Lexer.ml
并且您生成的词法分析器模块被称为{{ 1}},你应该做类似的事情:
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)