1

生のサンプルデータは次のようになります。

neg      
test  
-1.0 1.0    
-2.1 3.45

そして私はそれをflexを使って次のような認識されたocaml入力リストに変換しなければなりません:

let test  
=[  
[ -1.0 ; 1.0 ; 1.0; -1.0 ];  
[ -2.1 ; 3.45 ; 1.0; -1.0 ]  
];;

私はそれを次のように変換することができます:

let test  
=[  
[ -1.0 ; 1.0 ; 1.0 ; ]; 
[ -2.1 ; 3.45 ; 1.0 ; ]
];;

私が持っている主な質問は:

  1. 各リストの最後の要素を、生データがnegと表示されている場合は-1として、生データがposと表示されている場合は1として配置するにはどうすればよいですか?
4

1 に答える 1

0

あなたは<<EOF>>正規表現でそれを正しく理解しました。見逃した唯一のことは、<<EOF>>コードブロック内でスキャナーを直接または間接的に終了する必要があるということです。

私の場合、jflexを使用していますが、問題は非常に単純で、デフォルトの%standaloneモードで使用しています。だから私<<EOF>>は次のとおりです:

<<EOF>>    {
               printJson(System.out);
               System.out.flush();
               System.exit(0);
           }

グローバルデータ構造をシリアル化する場合printJson()、スキャナーは指定されたファイルストリームまで構築されています。あなたの場合、物事は十分に単純であるように聞こえますが、おそらくさらに単純です。

<<EOF>>    {
               printf(" ]\n];;");
               flush(stdout);
               exit(0);
           }

スタンドアロンでない場合は、生成されたスキャナーを呼び出しているプロセスによって適切に処理されるEOFトークンを返す必要があります。

幸運を。

于 2013-03-11T04:37:15.707 に答える