
Расчёт (комплексная лаба) Построение метрики уровня языка программирования / МССвИР_отчет
.pdfcodelen++;
}
codelen--;
}
private void Analyze()
{
int i,j,cpos;
eta1 = 0; eta2 = 0; n1 = 0; n2 = 0; etaR = 0; bool endIdent = false, isRes = false; //char[] liq = new char[7] { ' ', ';', '.',
':', '!', '?', '\n' }; CleanData(); LoadSC(); curpos = 0;
comment = false; literal = false; param = false; uses_program = false; procedure_function = false;
dictOperator[0] = ";"; dictOperator[1] = ":="; dictOperator[2] = "="; dictOperator[3] = "-"; dictOperator[4] = "+"; dictOperator[5] = "*"; dictOperator[6] = "/"; dictOperator[7] = "'"; dictOperator[8] = ","; dictOperator[9] = "(";
for (i = 0; i <= codelen; i++)
{
ParseString(LoadedCode[i]);
}
for (i = 0; i <= curpos; i++)
{
isRes = false;
for (j = 0; j <= 5; j++)
if (dictOperand[i] == blocks[j]) isRes = true;
for (j = 0; j <= 16; j++)
if (dictOperand[i] == DT[j]) isRes = true;
for (j = 0; j <= 7; j++)
if (dictOperand[i] == ReservedWords[j]) isRes = true;
if (isRes) numOperand[i] = 0;
}
cpos = 10;
for (i = 0; i <= curpos - 1; i++)
{
//MessageBox.Show(dictOperand[i]+';'+Convert.ToString(numOperand
[i]));
21
if (dictOperand[i] == "begin")
{
endIdent = true;
}
if (endIdent)
{
dictOperator[cpos] = dictOperand[i]; numOperator[cpos] = numOperand[i]; numOperand[i] = 0;
dictOperand[i] = ""; cpos++;
}
}
numOperator[0]--;
for (i = 0; i <= curpos - 1; i++) if
((!String.IsNullOrEmpty(dictOperand[i]))&&(numOperand[i]!=0))
{
eta2++;
n2+=numOperand[i];
}
for (i = 0; i <= cpos - 1; i++) if
((!String.IsNullOrEmpty(dictOperator[i])) && (numOperator[i] != 0))
{
eta1++;
n1 += numOperator[i];
}
eta2 += numOperator[7]; n2 += numOperator[7]; Vr = VNCalculate();
V = (n1+n2) * Math.Log((eta1 + eta2), 2); //Lambda = L * L * V;
Lambda = Vr * Vr / V; MessageBox.Show("PLL equals
"+Convert.ToString(Lambda));
}
private double VNCalculate()
{
int etatmp = 0,i,j;
for (j = 0;j<=999;j++)
{
for (i = 0; i <= 19; i++)
if (dictOperator[j] == f1[i]) etatmp++;
22
for (i = 0; i <= 32; i++)
if (dictOperator[j] == f2[i]) etatmp++;
for (i = 0; i <= 78; i++)
if (dictOperator[j] == f3[i]) etatmp++;
for (i = 0; i <= 91; i++)
if (dictOperator[j] == f4[i]) etatmp++;
}
return etatmp * (Math.Log(etatmp, 2));
}
private bool NativeChk(string s)
{
int i;
bool c = false;
for (i = 0; i <= 19; i++) if (s == f1[i])
c = true;
for (i = 0; i <= 32; i++) if (s == f2[i])
c = true;
for (i = 0; i <= 78; i++) if (s == f3[i])
c = true;
for (i = 0; i <= 91; i++) if (s == f4[i])
c = true; return c;
}
private void CloseSC()
{
CleanData();
richTextBox1.Clear(); closeSourceCodeToolStripMenuItem.Enabled =
false;
analyzeToolStripMenuItem.Enabled = false; saveToolStripButton.Enabled = false; toolStripButton1.Enabled = false; copyToolStripButton.Enabled = false; toolStripButton2.Enabled = false; this.Text = "Programming Language Level
Metrics";
}
private void closeSourceCodeToolStripMenuItem_Click(object sender, EventArgs e)
{
CloseSC();
23
}
private void OpenDB()
{
string s1; int pos;
if (openFileDialog2.ShowDialog() == System.Windows.Forms.DialogResult.OK)
{
DBFile = new FileInfo(openFileDialog2.FileName);
filename = openFileDialog2.FileName; closeDatabaseToolStripMenuItem.Enabled =
true;
pasteToolStripButton.Enabled = true; toolStripButton3.Enabled = true; DBStream = DBFile.OpenText();
s1 = DBStream.ReadLine();
numstr = Convert.ToInt16(s1.Substring(11,
s1.Length - 11));
s1 = DBStream.ReadLine();
CurPLL = Convert.ToDouble(s1.Substring(4,
s1.Length - 4));
MessageBox.Show("Уровень языка программирования равен " + Convert.ToString(CurPLL));
s1 = DBStream.ReadLine(); pos = 0;
while (s1 != null)
{
DBCoefficients[pos] =
Convert.ToDouble(s1);
s1 = DBStream.ReadLine(); pos++;
}
DBStream.Close(); addToDatabaseToolStripMenuItem.Enabled =
true;
}
this.Text = "Programming Language Level Metrics" + " - [" + openFileDialog1.FileName + "], Database: [" + openFileDialog2.FileName + "]";
}
private void openResultDatabaseToolStripMenuItem_Click(object sender, EventArgs e)
{
OpenDB();
}
private void AddToDB()
{
24
double avg;
StreamWriter SW = File.CreateText(filename); DBCoefficients[numstr] = Lambda;
numstr++; SW.WriteLine("totallines=" +
Convert.ToString(numstr)); avg = 0;
for (int i = 0; i <= numstr - 1; i++) avg += DBCoefficients[i];
avg /= numstr;
SW.WriteLine("PLL=" + Convert.ToString(avg)); for (int i = 0; i <= numstr - 1; i++)
{
SW.WriteLine(Convert.ToString(DBCoefficients[i]));
}
SW.Close();
MessageBox.Show("Средний уровень языка программирования равен " + Convert.ToString(avg));
}
private void addToDatabaseToolStripMenuItem_Click(object sender, EventArgs e)
{
AddToDB();
}
private void CreateDB()
{
if (saveFileDialog1.ShowDialog() == System.Windows.Forms.DialogResult.OK)
{
DBFile = new FileInfo(saveFileDialog1.FileName);
filename = saveFileDialog1.FileName; closeDatabaseToolStripMenuItem.Enabled =
true;
addToDatabaseToolStripMenuItem.Enabled =
true;
toolStripButton3.Enabled = true; pasteToolStripButton.Enabled = true; this.Text = "Programming Language Level
Metrics" + " - [" + openFileDialog1.FileName + "], Database: [" + openFileDialog2.FileName + "]";
}
}
private void createDatabase_Click(object sender,
EventArgs e)
{
CreateDB();
25
}
private void closeDatabaseToolStripMenuItem_Click(object sender, EventArgs e)
{
addToDatabaseToolStripMenuItem.Enabled = false; closeDatabaseToolStripMenuItem.Enabled = false; toolStripButton3.Enabled =false; pasteToolStripButton.Enabled = false;
this.Text = "Programming Language Level Metrics" + " - [" + openFileDialog1.FileName + "]";
}
private void exitToolStripMenuItem_Click(object sender, EventArgs e)
{
Application.Exit();
}
private void aboutToolStripMenuItem_Click(object sender, EventArgs e)
{
About aboutDialog = new About(); aboutDialog.ShowDialog();
}
private void metricsHelpToolStripMenuItem_Click(object sender, EventArgs e)
{
Help helpDialog = new Help(); helpDialog.ShowDialog();
}
private void analyzeToolStripMenuItem_Click(object sender, EventArgs e)
{
Analyze();
}
private void toolStripButton1_Click_1(object sender, EventArgs e)
{
Analyze();
}
private void openToolStripButton_Click(object sender, EventArgs e)
{
openSourceCode();
}
26
private void saveToolStripButton_Click(object sender, EventArgs e)
{
CloseSC();
}
private void copyToolStripButton_Click(object sender, EventArgs e)
{
CreateDB();
}
private void toolStripButton2_Click(object sender,
EventArgs e)
{
OpenDB();
}
private void toolStripButton3_Click(object sender,
EventArgs e)
{
AddToDB();
}
private void pasteToolStripButton_Click(object sender, EventArgs e)
{
addToDatabaseToolStripMenuItem.Enabled = false; closeDatabaseToolStripMenuItem.Enabled = false; toolStripButton3.Enabled = false; pasteToolStripButton.Enabled = false; this.Text = "Programming Language Level
Metrics" + " - [" + openFileDialog1.FileName + "]";
}
private void helpToolStripButton_Click(object sender, EventArgs e)
{
Help helpDialog = new Help(); helpDialog.ShowDialog();
}
private void PLLM_Load(object sender, EventArgs e)
{
if (File.Exists("crt.urf"))
{
f1 = LoadExisting("crt.urf", 20);
f2 = LoadExisting("dos.urf", 33);
f3 = LoadExisting("graph.urf", 79);
f4 = LoadExisting("system.urf", 92);
}
else
27
{
MessageBox.Show("Нет файлов."); this.Close();
}
}
private void formulasToolStripMenuItem_Click(object sender, EventArgs e)
{
Formula frm = new Formula(); frm.ShowDialog();
}
}
}
28
Приложение Б. Пример кода, проанализированного данным ПС.
program bacteries01; var i,g,r,n,k:longint; begin
Writeln('Insert the quantity of red bacteries'); Readln(n);
Writeln('Insert the number of time tacts'); Readln(k);
r:=n;
g:=0;
i:=1; repeat
g:=g+r; r:=g-r; i:=i+1; until i>k;
Writeln(k,' tacts; ',g,' green bacteries; ',r,' red bacteries.');
end.
{
операнды i 5
g 6 r 6 n 3 k 4
literal 5
всего 10 операндов, сумма 29 операторы
; 14 := 6 - 1 + 2
' ' 5 , 9 () 5
writeln 3 readln 2 repeat..until 1
всего 10 операторов, сумма 48
n*=11 (2 имплиментарных функции - readln, writeln с 9
параметрами - n,k,g,r+5 литералов) v*=11log(2)11 = 38.054
v=(29+48)log(2)(10+10)=77log(2)20 = 332.788 PLL = (v*)^2/v=4.351
}
29
Приложение В. Пример базы данных статистики вычислений уровня языка программирования.
totallines=22
PLL=2,16937514598311
3,04556502192603
1,46357964910235
1,49592272289484
1,150768440858
2,91497902406523
1,150768440858
0,428559002805344
0,4038946805358
0,0199243335732832
0,131666098623164
2,73952167239007
1,29801455576374
0,0384208203878047
2,69763038935442
1,07754872480515
0,294577574811578
0,409763417168128
0,431201000129267
17,270122715265
5,52175535835755
0,347407172168881
3,39466239578476
30