Скачиваний:
13
Добавлен:
15.06.2014
Размер:
414.04 Кб
Скачать

codelen++;

}

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