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