gpt4 book ai didi

string - OCaml:问题处理从文件中读取的字符串

转载 作者:行者123 更新时间:2023-12-05 01:43:29 28 4
gpt4 key购买 nike

我正在尝试在 OCaml 中逐行读取文件。文件中的每一行都代表一个我要解析的字符串,采用解析工具所期望的正确格式。我将每一行保存在列表结构中。

我在解析列表的每个元素中包含的字符串时发现了一个问题。我使用 OCamllex 和 Menhir 作为解析工具。

  • 如果我尝试使用 print_string 打印列表中每个元素的内容,我会得到正确的文件内容。

  • 如果我尝试将我在程序中定义的 string 传递给该函数,那么我会得到所需的输出。

  • 但是,如果我尝试解析刚刚从文件中读取的字符串,则会收到错误消息: fatal error :异常失败(“lexing empty token”)

注意:所有这些都针对同一个字符串进行了测试。

下面是一段代码:

let parse_mon m = Parser.monitor Lexer.token (from_string m)

let parse_and_print (mon: string)=
print_endline (print_monitor (parse_mon mon) 0)

let get_file_contents file =
let m_list = ref [] in
let read_contents = open_in file in
try
while true; do
m_list := input_line read_contents :: !m_list
done; !m_list
with End_of_file -> close_in read_contents; List.rev !m_list

let rec print_file_contents cont_list = match cont_list with
| [] -> ()
| m::ms -> parse_and_print m

let pt = print_file_contents (get_file_contents filename)

最佳答案

当流中的文本与任何扫描仪模式不匹配时,Ocamllex 会抛出异常 Failure "lexing: empty token"。因此,您需要匹配“包罗万象”的模式,例如 ._eof

{ }
rule scan = parse
| "hello" as w { print_string w; scan lexbuf }
(* need these two for catch-all *)
| _ as c { print_char c; scan lexbuf }
| eof { exit 0 }

关于string - OCaml:问题处理从文件中读取的字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49308974/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com