如何创建一个结合了Parser和Lexer的程序

时间:2015-08-05 13:23:50

标签: ocaml yacc lex ocamllex ocamlyacc

我想使用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

但它并没有真正发挥作用。

1 个答案:

答案 0 :(得分: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

1+2放入" add.txt"给了我3