Sunteți pe pagina 1din 2

Laboratorul 2.

Analiză lexicală

Configurare proiect
Descărcat, i secheletul de laborator de pe Moodle. Dacă folosit, i IntelliJ sau
Eclipse, asigurat, i-vă că JDK-ul s, i calea către jar-ul de ANTLR sunt configurate
corect ı̂n cadrul proiectului. În mas, ina virtuală, jar-ul se află la
/usr/local/bin/antlr4.jar.

Exercit, iul 0
În cadrul laboratorului, vom utiliza limbajul CPLang. Începet, i prin a parcurge
manualul acestuia de pe Moodle.
De asemenea, familiarizat, i-vă cu scheletul de laborator, implementat la cursul
anterior, s, i rulat, i clasa Test pe fis, ierul program.txt. Parcurget, i s, i comentariile
din fis, ierul CPLangLexer.g4.
Obiectivul laboratorului este ca analizorul lexical implementat de voi să
recunoască ı̂n final tot, ii token-ii din fis, ierul manual.txt, care cont, ine secvent, a
de cod din manualul CPLang. Un exemplu de ies, ire posibilă a analizorului
pentru acest fis, ier se găses, te ı̂n reference.txt.

Exercit, iul 1
Implementat, i analizorul lexical astfel ı̂ncât să poată clasifica identificatori (nume
de variabile s, i de funct, ii), numere ı̂ntregi, operatori (aritmetici, de comparat, ie,
de atribuire), simbolul ;” s, i cuvintele cheie (if, then, else, fi, true, false).

Observat, ii:
• Analizorul lexical va considera tot, i literalii ı̂ntregi ca fiind numere pozitive.
Semnul minus” va fi tratat doar ca operator aritmetic.

• Identificatorii ı̂ncep cu litera mică, s, i pot cont, ine apoi litere mici, litere
mari s, i underscore.

1
Exercit, iul 2
Extindet, i analizorul astfel ı̂ncât să trateze corect numele de tipuri de date,
parantezele, acoladele s, i comentariile pe un singur rând.

Observat, ii:

• Numele de tipuri de date ı̂ncep mereu cu o literă mare. Verificarea


validităt, ii tipurilor se va face ı̂n pasul de analiză semantică.
• Comentariile vor fi ignorate (act, iunea skip).

Exercitiul 3
Implementat, i tratarea literalilor cu virgula mobilă s, i a comentariilor bloc imbricate
ı̂mperecheate.
Observat, ii:
• Comentariile care nu au simbol-pereche (ex: ”/* /* */”) sunt considerate
erori lexicale. Prin urmare vet, i afis, a un mesaj la stderr dacă ı̂ntâlnit, i
o astfel de situat, ie. Utilizat, i pentru aceasta act, iuni introduse direct ı̂n
specificat, a lexicală (vezi ca exemplu regula STRING) s, i token-ul predefinit
EOF.

• Valoarea Float .25 este echivalentă la nivel semantic cu 0.25. Valoarea


3. este echivalentă cu 3.0. Valoarea ”.” nu reprezintă un literal Float
valid. Pentru recunoas, terea literalilor de forma .25 va trebui să extindet, i
regula existentă din schelet.

S-ar putea să vă placă și