3

私は、F# を使用するおもちゃのコンパイラ、つまり FsLex と FsYacc の組み合わせに取り組んでいます。それらに慣れるために、Expert F# (v2) book (いい本です) の Lexer/Parser の章を読みました。現在、私はお勧めの ocamlyacc チュートリアルの途中まで進み、最後の例である Multi-Function Calculator mfcalcに行き詰まっています。特に、次のステートメント

%token <float->float> FNCT

パーサー ファイルで、私のF# バージョンで "error: parse error" というエラーが発生し続けます。ここに欠けているものはありますか? それとも、これは現在 F# でサポートされていない機能ですか?

4

2 に答える 2

4

これはバグのようです。括弧を追加しても役に立ちません。さまざまな回避策を試しましたが、きれいな方法が見つかりませんでした。バグレポートを行う必要があります。

関数が 1 つしかない場合 (チュートリアルの例のように)、プレリュードで型を定義する必要があります。

type floatFunction = float -> float
...
%token <floatFunction> FNCT

多くの関数がある場合は、ジェネリック型を定義することもできます。

type functionType<'a, 'b> = 'a -> 'b
...
%token < ('a, 'b) functionType > FNCT

型に山かっこがあると、解析エラーが発生します ( であってもfunctionType<float,float>)。

于 2011-04-08T13:00:41.057 に答える
0

次のように括弧を付ける必要があるかもしれません

%token <(float->float)> FNCT

私は忘れました (確認するために F# マシンから離れています)。

于 2011-04-08T02:09:47.217 に答える