University of Novi Sad Zadaci za 8 cas i... · Web viewUzeti u obzir primere tipičnih semantičkih...

7
PROGRAMSKI PREVODIOCI 2019-20 Predmetni nastavnik i asistent: Doc. dr Ljubica Kazi 8. ČAS VEŽBI ZADATAK Tema: Implementacija PP simulatora za leksičku, sintaksnu i semantičku analizu teksta programskog koda. Završiti implementaciju: Za primer segmenta programskog koda: a) btnSvi_Click private void btnSvi_Click(object sender, EventArgs e) { txbFilterNazivRobe.Text = ""; NapuniGrid(DajSveNarudzbe()); } b) btnFilter_Click private void btnFilter_Click(object sender, EventArgs e) { if (txbFilterNazivRobe.Text.Equals("")) { MessageBox.Show("Niste uneli kriterijum filtriranja!"); txbFilterNazivRobe.Focus(); return; } else { NapuniGrid(DajNarudzbePremaRobi(txbFilterNazivRobe.Text)); } } Realizovati u okviru PP_simulatora deo programa za analizu teksta programskog koda - leksička, sintaksna i semantička provera. Uzeti u obzir primere tipičnih semantičkih grešaka programiranja, koje su date u prilogu. REŠENJE 1. FAZA – REKONSTRUKCIJA ULAZNOG TEKSTA PROGRAMSKOG KODA 1.1. KORAK – rekonstrukcija brisanjem nepotrebnih praznina UNETA VREDNOST

Transcript of University of Novi Sad Zadaci za 8 cas i... · Web viewUzeti u obzir primere tipičnih semantičkih...

PROGRAMSKI PREVODIOCI 2019-20

Predmetni nastavnik i asistent: Doc. dr Ljubica Kazi

8. ČAS VEŽBI

ZADATAK

Tema: Implementacija PP simulatora za leksičku, sintaksnu i semantičku analizu teksta programskog koda.

Završiti implementaciju:

Za primer segmenta programskog koda:

a) btnSvi_Click

private void btnSvi_Click(object sender, EventArgs e)

{

txbFilterNazivRobe.Text = "";

NapuniGrid(DajSveNarudzbe());

}

b) btnFilter_Click

private void btnFilter_Click(object sender, EventArgs e)

{

if (txbFilterNazivRobe.Text.Equals(""))

{

MessageBox.Show("Niste uneli kriterijum filtriranja!");

txbFilterNazivRobe.Focus();

return;

}

else

{

NapuniGrid(DajNarudzbePremaRobi(txbFilterNazivRobe.Text));

}

}

Realizovati u okviru PP_simulatora deo programa za analizu teksta programskog koda - leksička, sintaksna i semantička provera.

Uzeti u obzir primere tipičnih semantičkih grešaka programiranja, koje su date u prilogu.

REŠENJE

1. FAZA – REKONSTRUKCIJA ULAZNOG TEKSTA PROGRAMSKOG KODA

1.1. KORAK – rekonstrukcija brisanjem nepotrebnih praznina

UNETA VREDNOST

OBRISANE PRAZNINE

1.2. Rekonstrukcija brisanjem “ENTER”, tj. CarriageReturn (simbol za novi red, ASCII karakter 13)

2. LEKSIČKA ANALIZA PROGRAMSKOG KODA

S obzirom na C# programski jezik, treba konsultovati pravila:

https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/

Osnove sintakse C# jezika:

https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/language-specification/introduction

Kreiranje tabele dozvoljenih simbola za C# (za podskup karaktera koji su u prvom primeru)

Dodavanje stranice za prikaz karaktera

Klasa clsAnalizatorReci je izmenjena, da bude case sensitive, da bi razlikovao velika i mala slova.

private void FormirajIzlaznuListuSimbolaSaTipovimaKaraktera()

// da bi razlikovao velika i mala slova u okviru Select (filtera) ovo je dodato

dsTabelaDozvoljenihSimbola.Tables[0].CaseSensitive = true;

//

DataRow[] drRedoviFiltera = dsTabelaDozvoljenihSimbola.Tables[0].Select("Karakter='" + objStariSimbol.Karakter.ToString() + "'");

Prepoznaje sve, ali neke karaktere ne, a nisu vidljivi. TReba da vidimo koji je njihov ASCII kod, da bismo prilikom rekonstruiranja i njih eliminisali.

OTKLANJANJE NEPREPOZNATIH KARAKTERA, KOJI NISU VIDLJIVI

Dodat je i ASCII kod za karakter u klasu clsSimbol.

Klasa clsAnalizator je prosirena da detektuje ASCII kod za svaki izdvojeni karakter:

Izmenjen deo metode

private void FormirajIzlaznuListuSimbolaSaTipovimaKaraktera()

DataRow[] drRedoviFiltera = dsTabelaDozvoljenihSimbola.Tables[0].Select("Karakter='" + objStariSimbol.Karakter.ToString() + "'");

// ovaj deo svakako uradi

objDopunjeniSimbol.Karakter = objStariSimbol.Karakter;

objDopunjeniSimbol.ASCIIKaraktera =Encoding.ASCII.GetBytes(objStariSimbol.Karakter)[0];

// ovaj deo proverava da li je uspesno nasao karakter ili nije

try

{

prepoznatiTipKaraktera = drRedoviFiltera[0].ItemArray[1].ToString();

objDopunjeniSimbol.TipKaraktera = prepoznatiTipKaraktera;

}

catch (Exception greska)

{

objDopunjeniSimbol.TipKaraktera = "nije prepoznat";

}

objSimbolListaIzlaz.DodajElementListe(objDopunjeniSimbol);

U osnovnom programu izmenjeno prikazivanje:

for (int brojacElemenataListe = 0; brojacElemenataListe < ukupanBrojElemenataListe; brojacElemenataListe++)

{

rtbPrepoznavanjeKaraktera.AppendText(objSimbolListaIzlaz.DajElementListe(brojacElemenataListe).Karakter + " - tip:" + objSimbolListaIzlaz.DajElementListe(brojacElemenataListe).TipKaraktera + " ASCII:" + objSimbolListaIzlaz.DajElementListe(brojacElemenataListe).ASCIIKaraktera + System.Environment.NewLine);

}

Treba uključiti u rekonstrukciju i karakter sa ASCII vrednosti 10, da se izbaci.

Dodavanje provere da li su generalno svi karakteri korektni:

PROVERA KLJUCNIH RECI

private void btnSvi_Click(object sender, EventArgs e)

{

txbFilterNazivRobe.Text = "";

NapuniGrid(DajSveNarudzbe());

}

Ime – PRAVILO sastoji se od slova velikih I malih I _, brojeva, ali da ne pocinje brojem…

Imena grafickih kontrola – posebna tabela za to…I onda imaju osobine u skladu sa tipom kontrole.

Kljucne reci:

Private, void, _Click, object, sender, EventArgs, e, .Text

SINTAKSNA PRAVILA

· Svaka procedura mora da ima () sa ili bez parametara, parameter moze biti ime jedno ili vise ili procedura.

· Svaka otvorena zagrada { mora imati svoj par zatvorenu }.

SEMANTICKA PRAVILA

· Procedura mora biti definisana u okviru istog fajla I navodi se samo imenom ili this.ImeProcedure.

· Ako procedura nije definisana u istom fajlu, onda se mora navesti naziv klase.nazivprocedure.

· Procedura treba da je definisane negde u istom fajlu, ali se preporucuje da bude napisana pre mesta koriscenja, gledano odozgo dole.

· Ako procedura ne vraca vrednost, ne mora se pisati promenljiva pre nje s leve strane I znak jednakosti.

· Ako procedura vraca vrednost, mora biti promeljiva I znak jednakosti da primi vrednost I ta promenljiva mora biti istog tipa kao I tip vrednosti koju vraca procedura.

· Ako se procedura navodi kao parameter poziva druge procedure, onda ona svojim pozivom vraca vrednost I to onog tipa kog je I parameter procedure na poziciji na kojoj se nalazi.