【发布时间】:2019-10-28 01:33:04
【问题描述】:
我正在读取一个多行的输入文件。每一行的格式如下:
Greeting "hello"
Greeting " Good morning"
Sit
Smile
Question "How are you?"
我的当前可以将每一行读入一个字符串列表。然后我使用这个函数处理它,这个函数应该把它分解成一个字符串列表:
let rec process (l : string list) (acc : string list list) : string list list =
match l with
| [] -> acc
| hd :: tl -> String.split_on_char ' ' hd :: (process tl acc)
不幸的是,这不起作用,因为它还会在引号内分割空格。任何人都想到了这样做的正确方法,可能使用 map 或 fold_left 等?这将是我的预期输出:
[["Greeting"; "/"hello/""];[Greeting; "/" Good morning"];["Sit"]]
等等。谢谢!
【问题讨论】:
-
您要求进行真正的(尽管非常基本的)词法分析,而不仅仅是简单的拆分操作。这是为了学校作业吗?如果是这样,您可能应该尝试编写自己的小型扫描仪。 OCaml 有词法分析工具,但对于这个简单的问题,它们可能有点矫枉过正。 (或者它们可能正是您应该使用的。)
-
不,这不是学校作业。我简化了我的问题以使其更通用。 “扫描仪”是什么意思?我考虑过获取第一次出现的 ' ' 然后拆分,从 - 到它的索引,但我认为某处必须有更简单的方法。
标签: ocaml