2016-09-26 3 views
3

funset_avltreeライブラリを使用しようとしていますが、コンパイラが無効なCコードを生成しています。私はATS/Postiatsバージョン0.2.10を使用しています。funset_avltreeライブラリの使用方法は?

私のコードは非常に簡単です:

(* ast.sats *) 
staload "libats/SATS/funset_avltree.sats" 

datatype ast = 
    | ast_var of string 

fun free_vars (ast : ast) :<> set string 
(* ast.dats *) 
#include "share/atspre_staload.hats" 
staload "./ast.sats" 
staload "libats/SATS/funset_avltree.sats" 
dynload "libats/DATS/funset_avltree.dats" 

implement free_vars (ast : ast) : set string = 
    case+ ast of 
    | ast_var name => funset_sing name 

コンパイラの出力は、しかし、かなり混乱して:

 
ast_dats.c:359:51: warning: implicit declaration of function 'S2EVar' is invalid 
     in C99 [-Wimplicit-function-declaration] 
ATSINSmove(tmpret0, PMVtmpltcstmat[0](funset_sing<S2EVar(4713)>)(tmp1)) ; 
               ^

ast_dats.c:359:39: error: use of undeclared identifier 'funset_sing' 
ATSINSmove(tmpret0, PMVtmpltcstmat[0](funset_sing<S2EVar(4713)>)(tmp1)) ; 
            ^

ast_dats.c:359:64: error: expected expression 
ATSINSmove(tmpret0, PMVtmpltcstmat[0](funset_sing<S2EVar(4713)>)(tmp1)) ; 
                  ^

私はfunsetfunset_listordと同様のエラーを取得します。私は何か些細なことを見逃しているに違いない。コンパイラに何かを含めるかフラグを渡す必要がありますか?

答えて

3

根本原因は、ライブラリによって提供されるAVLツリーテンプレートを静的にロードしていないことです。

エラーメッセージで、PMVtmpltcstmatは通常、テンプレートに問題があることを示します。プログラマがテンプレートを含めることを忘れたり、テンプレート変数を提供するのを忘れたりするのは、たいていの場合です。あなたは最初のケースです。

staload _ = "libats/DATS/funset_avltree.dats" 

が静的​​テンプレートをロードして、コンパイラにそれらを利用できるように、この行を追加してください。 https://glot.io/snippets/eiu6f3dd2r


また、dynloadはあなたが評価を必要とする「グローバル」の値を持つときに必要とされ、ここでの実施例を参照してください。あなたの場合、avlツリーライブラリdynloadは必要ありません。また、自分のファイルast.datsには、そのようなグローバル値はありません。あなたはast.datsのための動的ローディングコードを生成しないようにコンパイラに指示する

#define ATS_DYNLOADFLAG 0 

を定義することができます。ここで

+0

こんにちは、ありがとうございます。テンプレート定義でdatファイルをstaloadする必要があるかどうかはわかりませんでした。私はこれを「ATSのプログラミング入門」で見つけることができませんでした。 – rightfold

+0

ようこそ。テンプレートシステムはかなり新しいです。私は著者がまだ関連章を終えていると思う。 –

+1

@rightfold、あなたのサイトにアクセスしました。 ATSに関するドキュメントを保管するのは本当にいいことです。 http://discourse.ats-lang.org/c/documentationは公式なものであり、ますますユーザーが投稿した文書を含める予定です。あなたの貢献は大歓迎です。ありがとう。 –

関連する問題