Sunteți pe pagina 1din 3

LABORATOR 1 LIMBAJE FORMALE SI TEHNICI DE COMPILARE Cerinte problema: Scrierea unui analizator lexical pentru un minilimbaj de programare 1.

. Se cer textele sursa a 2 programe (functionale) - Care respecta specificatiile MLP date - Si care evalueaza valoarea unor expresii aritmetice date. (versiune electronica) 2. Specificarea minilimbajului de programare Limbajul trebuie sa contina anumite instructiuni si tipuri de date: a) Declaratii de variabile intregi b) Instructiuni de citire: a. Se citeste un intreg de la intrare c) Instructiuni de scriere: a. Se afiseaza valoarea unei variabile d) Expresii aritmetice e) Instructiune de atribuire 3. Implementarea unui analizator lexical accepta la intrare un fisier text reprezentand un program sursa si intocmeste ca date de iesire tabelele - FIP forma interna a programului sursa - TS tabelul de simboluri In plus, programul va trebui sa semnaleze erorile lexical si locul in care apar. Programul care efectueaza analiza lexicala trebuie sa fie insotit de documentatie.

Program primul_program

Program al_doilea_program var a, b, suma: Integer; begin Read(a); Read(b); suma := 0; For b := 1 To b Do begin suma := suma + a; end Write(suma); end.

Var a,b,c: Integer; Begin Read(a); Read(b); c:=a+b+5; Write(c); End.

Specificarea minilimbajului de programare BNF:

program=var variabile ; executie variabile ID{,ID} : Integer executie = begin instructiuni end instructiuni = instructiuni | instructiuni ;instructiuni input_output= "read" ID | "Write" ID atribuire = ID ":=" expresie instructiuni_FOR = for ID:=termen to begin instructiuni end expresie = termen | termen {operatie termen} operatie = + | - | *| / termen = ID | constanta constanta = intreg_semn intreg_semn = [+ | -] cifra| cifra {cifra} cifra = 0 | 1| 2| 3| 4 | 5|6|7|8|9 Analiza lexicala: Litere: Cifre: Operatori aritmetici: Separatori Relatii ID [a-z | A-Z] [0-9] [ '+' | '-' | '*' | '/' ] "(" | ")" "<" | "<=" | "=" | "<>" | ">=" | ">" identificator - nume variabila: litera | litera{litera}{cifra} "*/" | */"

Comentarii Cuvinte rezervate: o 'program' o sintaxa: program nume_program o 'var' se definesc variabilele

Tabel de atomi:
Tip atom ID Constanta Program Var Integer Begin End Read Write Do For To ; , . ( ) + :=

o 'Begin' de aici incepe executia programului o 'End' sfarsitul executiei o 'Write' instructiune care se foloseste pentru o afisare pe ecran o 'Read' - instructiune care se foloseste pentru citirea unei valori de la tastatura (prin valoare intelegandu-se atat cifre cat si litere) o ':=" - instructiune de atribuire in Pascal o 'Integer" tipul variabilei definire (exista si alte tipuri rezervate, cum ar fi: String, Char, Boolean, etc) o 'For" instructiune repetitiva o To de la o Do - executie

Cod 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18

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