0

Ocamllex/Ocamlyacc を使用してコンパイラを構築し、OcamlParser と OcamlLexer の両方を結合するメイン プログラムを作成したいと考えています。問題は、次のコードのようなコマンドラインでの入力を使用してそれを行う方法を知っているということです:

let _ =
  try
    let lexbuf = Lexing.from_channel stdin in
    while true do
      let result = Parser.main Lexer.token lexbuf in
      print_int result; print_newline(); flush stdout
    done
  with Lexer.Eof ->
    exit 0

しかし、ファイルを入力として使用したい場合はどうすればよいですか。私はこのようなことを試しました:

let file ="add.txt"
    let _ =
     let ic = open_in file in 
      try
        let lexbuf = Lexing.from_channel file in
        while true do
          let result = Parser.main Lexer.token lexbuf in
          print_int result; print_newline(); flush stdout
        done
      with Lexer.Eof ->
        exit 0

しかし、実際には機能していません。

4

1 に答える 1

1

次のコードは私にとってはうまくいきます。お使いのバージョンでは、いくつかの構文エラーがあります。

let _ =
      let file ="add.txt" in
      let i = open_in file in 
      try
        let lexbuf = Lexing.from_channel i in
        while true do
          let result = Parser.main Lexer.token lexbuf in
          print_int result; print_newline(); flush stdout
        done
      with Lexer.Eof ->
        exit 0

「 add.txt 1+2」を入れると3.

于 2015-08-05T13:44:15.867 に答える