我已经实现了这个示例,并且效果很好。
现在,我想从字符串中读取而不是从 读取stdin
,所以我更改了calc.ml
:
let _ =
try
let lexbuf = Lexing.from_string "1+3" in
let result = Parser.main Lexer.token lexbuf in
print_int result
with Lexer.Eof ->
print_string "Lexer.Eof";
exit 0
奇怪的是,它Lexer.Eof
作为结果返回。如果我| eof { raise Eof }
从lexer.mll
and 中删除,它会告诉Fatal error: exception Failure("lexing: empty token")
. 我想end-of-input
条件有问题...有谁知道如何更改词法分析器以便它可以对字符串进行词法分析?