首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用ocamllex生成的lexer

如何使用ocamllex生成的lexer
EN

Stack Overflow用户
提问于 2015-09-16 03:16:17
回答 1查看 668关注 0票数 0

我从一个教程(http://plus.kaist.ac.kr/~shoh/ocaml/ocamllex-ocamlyacc/ocamllex-tutorial/sec-ocamllex-some-simple-examples.html)中摘取了一个简单的词汇

代码语言:javascript
复制
{ }
rule translate = parse
  | "c"         { print_string (Sys.getcwd ()); translate lexbuf }
  | _ as c      { print_char c; translate lexbuf }
  | eof         { exit 0 }

生成OCaml并创建可执行文件之后,

ocamllex testlexer.mll && ocamlc -o testlexer testlexer.ml

我试图通过stdin echo c | ./testlexer和文件./testlexer input传递内容,但两者都不起作用。

我也没有在生成的testlexer.ml中看到从stdin或文件中读取的任何逻辑,它是作为一个模块包含在另一个程序中,还是由其他代码生成工具(如ocamlyacc )使用?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-09-16 04:00:19

您需要一个main函数(本质上)。您可以根据页面上的其他示例对其进行修改。

下面是我写的一个完整的例子:

代码语言:javascript
复制
{ }
rule translate = parse
  | "c"         { print_string (Sys.getcwd ()); translate lexbuf }
  | _ as c      { print_char c; translate lexbuf }
  | eof         { exit 0 }

{
  let main () =
    let lexbuf = Lexing.from_channel stdin in translate lexbuf

  let () = main ()
}

它似乎是按预期运作的:

代码语言:javascript
复制
$ ocamllex l.mll
4 states, 257 transitions, table size 1052 bytes
$ ocamlc -o l l.ml
$ echo c/itworks | ./l
/home/jeffsco/tryll2/itworks

更新

对不起,我忘了回答你的其他问题。是的,没有main函数,原始代码可以是一个较大程序中的一个模块。它可以是用户ocamlyacc的程序,也可以不是。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32599182

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档