在OCaml扫描程序中,为什么负整数的正则表达式不起作用?

时间:2014-08-08 21:15:43

标签: regex ocaml ocamllex

我有以下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”。

2 个答案:

答案 0 :(得分:4)

int_of_string无法处理前导+个符号,因此您必须在将字符串传递给int_of_string之前将其取出。

答案 1 :(得分:0)

正则表达式工作正常,您对int_of_string的调用失败了。您正在使用int_of_string。看看两个代码块的第四行。

sepp2k解释了为什么你会得到例外。

我没有看到如何在没有main的情况下运行你的程序,所以我无法解释未定义的符号错误。

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