次の 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" を使用していません。