1

我有以下 ocamllex 代码:

let flt = ['-' '+']?['0'-'9']+ ['.'] ['0'-'9']+
rule token = parse
  [' ' '\t' '\r' '\n']      { token lexbuf } (* Whitespace *)
| ['0'-'9']+ as lxm         { INTEGER(int_of_string lxm) }
| flt as lxm    { FLOAT(float_of_string lxm) }

这行得通!

但是,当我想允许 INTEGER 的 + 和 - 符号时,它给了我一个错误。

let flt = ['-' '+']?['0'-'9']+ ['.'] ['0'-'9']+
rule token = parse
  [' ' '\t' '\r' '\n']      { token lexbuf } (* Whitespace *)
| ['+' '-']['0'-'9']+ as lxm        { INTEGER(int_of_string lxm) }
| flt as lxm    { FLOAT(float_of_string lxm) }

错误如下:

Fatal error: exception Failure("int_of_string")
Undefined symbols for architecture x86_64:
  "_main", referenced from:
     implicit entry/start for main executable
ld: symbol(s) not found for architecture x86_64

有趣的是,在我的 .ml 文件中,我使用的是“float_of_string”,但我没有在任何地方使用“int_of_string”。

4

2 回答 2

4

int_of_string不处理前导+符号,因此您必须在将字符串传递给int_of_string.

于 2014-08-08T21:24:11.333 回答
0

正则表达式工作正常,这是您的呼叫int_of_string失败。您正在使用int_of_string. 查看任一代码块的第四行。

sepp2k 解释了为什么会出现异常。

我看不出没有主程序如何运行程序,所以我无法解释未定义的符号错误。

您可能希望为您的整数设置前导 +/- 可选。在您的定义中,其中之一是必需的。

于 2014-08-08T22:09:39.497 回答