这就是我目前拥有的mll
运行良好的文件。
{ type token = EOF | Word of string }
rule token = parse
| eof { EOF }
| ['a'-'z' 'A'-'Z']+ as word {Word(word)}
| _ { token lexbuf }
{
let lexbuf = Lexing.from_channel stdin in
let wordlist =
let rec next l =
match token lexbuf with
EOF -> l
| Word(s) -> next (s::l)
in next []
in
List.iter print_endline wordlist
}
我做ocamllex a.mll
然后ocamlc -o a a.ml
。运行./a < a.mll
将打印出 mll 文件中存在的所有字符串,这正是我所期望的。
但是,如果我module StringMap = Map.Make(String)
在调用之前添加List.iter
,我会得到一个语法错误......
File "a.mll", line 17, characters 4-10:
其中第 17 行是 with 的行,module
而 4-10 是 word module
。
我无法弄清楚为什么添加这一行会给我一个语法错误...如果我在顶层输入相同的代码,它就可以正常工作。