1

さまざまな種類のカテゴリを含むレコードを作成しましたが、これにより GF が巨大なgfoファイル (150Mb) を生成したり、10 分以上コンパイルした後に一部の言語で壊れたりすることさえありました。私のレコードには 9 つの要素 (8 つの異なるカテゴリ) しか含まれていません。

次の小さな例を見てみましょう。GF を使用して自己紹介テキストを作成したいとします。このようなテキストを生成するために、レコードを作成し、それに Person という名前を付けました。Person レコードには、名前、年齢、住所、趣味、人間の特徴などのさまざまな情報が含まれます。この小さなレコードを作成するだけで、GF は 1.28 MB のgfoファイルを生成し、コンパイルに 1 秒以上かかります。

これが私のコードです

アブストラクト:test.gf

abstract Test = {
    flags
        startcat = Sentence;
    cat
        Sentence; Human;

    fun
        MySentence : Human -> Sentence; 
        Joan : Human;   
}

コンクリート:TestSpa.gf

concrete TestSpa of Test = open SyntaxSpa, ParadigmsSpa, Predef, DictSpa in{
    lincat
        Sentence = Text;
        Human = Person;
    lin
        MySentence person =  generateIntro person;


        Joan = {name = "Joan" ; det = aSg_Det ; job = mkN ("Doctor") ; age = mkNumeral("22") ; hobby = bailar_V ; lastMeal = mkV2(hablar_V) ; 
                food = mkN ("spaghetti") ; prep = mkPrep ("at") ; location = mkN("resturant") ; meal = Lunch ; feeling = mkA("happy")};



    oper
        Person : Type = {name : Str ;
                            det : Det;
                            job : N ;
                            age : Numeral ;
                            hobby : V ;
                            lastMeal : V2 ;
                            food : N;
                            prep : Prep;
                            location : N;
                            meal : Meal;
                            feeling : A};

        generateIntro : Person -> Text =
            \per -> mkText (mkUtt (mkNP (mkDet(i_Pron)) (per.job)));

    param 
        Meal = Breakfast | Lunch | Dinner;

}

いくつかのカテゴリを 1 つのレコードにまとめて追加すると、ランタイムが長くなる原因となりますが、他のカテゴリはそれほど影響しないことに気付きました。

質問:

1-レコードを使用して異なるカテゴリ値をまとめて保持する以外に、抽象の依存型を使用しない方法はありますか?

2- この問題を解決し、レコード内のこれらの値がすべて必要であることを認識して GF を高速に実行する方法はありますが、すべての文に表示されるわけではありませんか?

4

2 に答える 2