C ファイルが与えられた場合、いくつかの基準について後方スライスを計算し、そのスライスを元のコードと比較したいと考えています。最初からスライシング プログラムを実装したくないので、このタスクに役立つと思われる Frama-C に慣れようとしました。
ただし、私の問題は、Frama-C のスライス プラグインが前処理された入力コードを変更するため、元のどの行がスライスにも表示されるかを識別するのが難しくなることです。
例:
入力ファイルtest1.c
:
double func1(double param) {
return 2+param;
}
int main() {
int a=3;
double c=4.0;
double d=10.0;
if(a<c)
c=(double)a/4.0;
double res = func1(c);
return 0;
}
前処理されたファイル (によって生成frama-c test1.c -print -ocode test1_norm.c
):
/* Generated by Frama-C */
double func1(double param)
{
double __retres;
__retres = (double)2 + param;
return __retres;
}
int main(void)
{
int __retres;
int a;
double c;
double d;
double res;
a = 3;
c = 4.0;
d = 10.0;
if ((double)a < c) c = (double)a / 4.0;
res = func1(c);
__retres = 0;
return __retres;
}
スライス ( によって生成frama-c -slice-calls func1 test1.c -then-on 'Slicing export' -print
):
/* Generated by Frama-C */
double func1_slice_1(double param)
{
double __retres;
__retres = (double)2 + param;
return __retres;
}
void main(void)
{
int a;
double c;
double res;
a = 3;
c = 4.0;
c = (double)a / 4.0;
res = func1_slice_1(c);
return;
}
の署名がmain
異なり、 の名前がfunc1
に変更されたことに注意してくださいfunc1_slice_1
。
スライスと(前処理された)オリジナルを(計算可能な差分に関して)より簡単に比較できるようにするために、その動作を抑制する方法はありますか?