3

1 つの命令ツリーからさまざまな動詞を生成するプログラムを作成します。

要約ファイル:

abstract Test = {
      flags startcat = Utterance;
      cat
          Utterance; Imperative; Verb; VerbPhrase;
      fun

      -- verb phrase
      Play_VP : VerbPhrase;


      -- Imp
      Play_Imp : VerbPhrase -> Imperative;


      -- Utt
      Sentence : Imperative -> Utterance;}

具体的なファイル:

concrete TestEng of Test = open SyntaxEng, TestEngSrc, ParadigmsEng in {

lincat
    Utterance   = Utt;
    Imperative  = Imp;
    VerbPhrase  = VP;
    Verb        = V;
lin


-- verb phrase
Play_VP = mkVP ( variants{ mkV(play_Str) ; put_on_V });


--Imp
Play_Imp verbPhrase = mkImp(verbPhrase);

--Utt
Sentence imperative = mkUtt(imperative);}

そして最後にソースファイル:

resource TestEngSrc = open ParadigmsEng, SyntaxEng in {

oper
    -- verb string
    play_Str : Str  = variants{ "broadcast" ; "play"
                    ; "replay" ; "see" ; "view" ; "watch" ; "show"};

    -- verb
    play_V : V = variants {mkV(play_Str) ; put_on_V };


        -- verb part
        put_on_V : V = partV (mkV "put") "on";}

しかし、このプログラムを実行するとすぐに実行が開始され、この状況に固執します コンパイルの問題

この問題が個人的なものか一般的なものかを確認するために、GitHub の GF スレッドを検索しましたが、次のページを見つけました : https://github.com/GrammaticalFramework/GF/issues/32 GFの。このスレッドに関する最新情報はありますか、またはこのスレッドで提供されているものよりも優れた解決策はありますか。あなたの時間と労力に感謝します。

4

2 に答える 2

1

Verb Phrase を使用する必要があるため、単にスキップする方法はありません。したがって、この問題の背後にある理由を見つけようとしたところ、次の結果になりました。

この状態では、バリアントの数は 3 つ以下の文字列ですが、プログラムを実行するたびにフリーズします。

エラーのあるコード

概要:

   abstract Test = {
   flags startcat = VerbPhrase;
   cat
       VerbPhrase; Verb; 
   fun

   Play_VP : VerbPhrase;
}

コンクリート:

   concrete TestEng of Test = open SyntaxEng,  ParadigmsEng, IrregEng in {
   
   lincat
       VerbPhrase  = VP;
       Verb        = V ;
   lin

       Play_VP = mkVP(play_V);


   oper

   play_V : V = variants {mkV(play_Str) ; put_on_V};

   play_Str : Str = variants {"play" ; "brodcast"};

   put_on_V : V = partV put_V "on";
}

しかし、動詞がこのメソッドで抽象的に定義されている他の状況では、プログラムは完全に正常に実行されます。

エラーのないコード

概要:

   abstract Test = {
   flags startcat = VerbPhrase;
   cat
       VerbPhrase; Verb; 
   fun

   Play_V : Verb;

   Play_VP : Verb -> VerbPhrase;
}

コンクリート:

concrete TestEng of Test = open SyntaxEng,  ParadigmsEng, IrregEng in {
   
   lincat
       VerbPhrase  = VP;
       Verb        = V ;
   lin

       Play_V = variants {mkV(play_Str) ; put_on_V};

       Play_VP play_v = mkVP(play_v);


   oper

   play_Str : Str = variants {"play" ; "brodcast"};

   put_on_V : V = partV put_V "on";
}

どうやら、問題は実際には VP 構造にあるのではなく、バリアントを使用して操作を呼び出すときの VP の動作にあるようです。

願わくば、皆さんがこの問題を調べて、解決策を見つけてください。

于 2020-12-16T01:07:12.663 に答える