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

0

正規表現は正常に機能しています。それはあなたの呼び出しint_of_stringが失敗していることです。を使用してint_of_stringいます。コードのいずれかのチャンクの 4 行目を見てください。

sepp2k は、例外が発生する理由を説明します。

メインなしでプログラムを実行する方法がわからないため、未定義のシンボルエラーについて説明できません。

整数の先頭の +/- をオプションにしたい場合があります。あなたの定義では、そのうちの1つが必要です。

于 2014-08-08T22:09:39.497 に答える