3
我已经实现了this example,它运行良好。通过Lexing.from_string解析字符串
现在,我想从一个字符串读取,而不是从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
作为结果。如果我从lexer.mll
中删除| eof { raise Eof }
,它会告知Fatal error: exception Failure("lexing: empty token")
。我想end-of-input
条件有什么不对...有人知道如何更改词法分析器,以便它可以lex一个字符串?
谢谢,这确实工作。但是我想解析没有EOL的正常刺痛。我改成'main:expr {$ 1};'在'parser.mly'中,奇怪地用'1 + 3''仍然返回'Lexer.Eof','Lexing.from_string'只接受以' “\ n”'? – SoftTimur
我编辑了我的答案。 – cago