我在这里结束了我的绳索。我无法在ocamllex中获得任何工作,并且这让我疯狂。这是我的.mll
文件:OCaml lex:根本不工作,无论如何
{
open Parser
}
rule next = parse
| (['a'-'z'] ['a'-'z']*) as id { Identifier id }
| '=' { EqualsSign }
| ';' { Semicolon }
| '\n' | ' ' { next lexbuf }
| eof { EOF }
下面是我通过在输入该文件的内容:
a=b;
然而,当我编译和运行的东西,我就非常得到一个错误第一个字符,说这是无效的。我真的不知道发生了什么事情,而Google根本没有帮助我。这怎么可能呢?正如你所看到的,我真的很难过。
编辑:
我工作了这么久,我放弃了解析器。现在这是我的主文件中的相关代码:
let parse_file filename =
let l = Lexing.from_channel (open_in filename) in
try
Lexer.next l;()
with
| Failure msg ->
printf "line: %d, col: %d\n" l.lex_curr_p.pos_lnum l.lex_curr_p.pos_cnum
打印出“line:1,col:1”。
你能否提供你定义构造函数如标识符的ML文件?另外,你能否确认ocamllex和ocamlc在编译时没有投诉? – Surikator 2011-03-27 14:34:12
它们在parser.mly中被定义为标准,并且都没有抱怨。 – marsolk 2011-03-27 17:29:10
@marsolk:我很好奇 - 你有没有想过这个?有什么问题? – lebowski 2017-02-17 17:11:34