【发布时间】:2018-03-15 20:51:36
【问题描述】:
我正在尝试在 OCaml 中逐行读取文件。文件中的每一行都代表我要解析的字符串,采用解析工具所期望的正确格式。我将每一行保存在列表结构中。
我在解析列表的每个元素中包含的字符串时发现了一个问题。我使用 OCamllex 和 Menhir 作为解析工具。
如果我尝试使用
print_string在每个元素处打印列表的内容,我会得到正确的文件内容。如果我尝试将我在程序中定义的
string传递给函数,那么我会得到所需的输出。但是,如果我尝试解析刚刚从文件中读取的字符串,则会收到错误消息:
Fatal error: exception Failure ("lexing empty token")
注意:所有这些都已针对相同的字符串进行了测试。
这是一个sn-p的代码:
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)
【问题讨论】:
-
如果不查看您的 lex 模式,您似乎还没有涵盖基本匹配项,例如
eol或_。看我的回答。