Sunteți pe pagina 1din 5

Tema 1 LFA 2015-2016

Limbaje regulate
George Daniel MITRA
17 decembrie 2015
Rezumat
Tema const
a n implementarea unui program care afis, eaz
a toate subs, irurile
dintr-un text care apart, in unui limbaj dat.

Specificat, ii tem
a

1.1

Cerint,
a

S
a se implementeze un program care, primind o reprezentare a unui automat
finit determinist s, i un text, sa afis, eze toate subs, irurile textului care apart, in
limbajului automatului.
Solut, iile care nu folosesc FLEX vor fi depunctate dupa cum e ment, ionat n
sect, iunea 4.

1.2

Cont, inutul arhivei

Arhiva trebuie s
a cont, in
a:
surse, a c
aror organizare nu va e impusa
un fis, ier Makefile care s
a aiba target de build s, i run (Putet, i folosi o versiune
modificat
a a celui din tema 0)
un fis, ier README care sa cont, ina numele s, i grupa s, i maxim 20 de linii
de maxim 80 de caractere n care sa ment, ionat, i algoritmul aplicat pentru
construct, ia automatului s, i sa descriet, i abordarea pentru lexer. Cu cat mai
scurt, cu at
at mai bine!
Absent, a oric
arui element mai sus ment, ionat va duce la nepunctarea temei.
Arhiva trebuie s
a fie zip. Nu rar, 7z, ace sau alt format ezoteric. Fis, ierul
Makefile trebuie s
a fie n r
ad
acina arhivei.

1.3

Format README

Prima linie din README trebuie sa cont, ina numele vostru, as, a cum apare pe
cs.curs.pub.ro. Prenumele trebuie sa fie complet, numele sa fie scris cu majuscule, dac
a avet, i diacritice n nume, ele trebuie sa apara s, i salvat, i fis, ierul ca
UTF-8. Prima linie ar trebui sa arate as, a, cu ment, iunea ca folositi numele
vostru:
1

Nume: MITRA George Daniel


A doua linie trebuie s
a cont, ina seria s, i grupa. Seria s, i grupa trebuie sa fie
lipite, f
ar
a spat, ii ntre ele, seria aparand nainte. Exemplu:
Grupa: CB334
Restant, ierii de anul patru s, i vor scrie grupa curenta, nu grupa n care erau
c
and au f
acut LFA, pun
and un R n fat, a. Exemplu:
Grupa: R342C4
Restul textului trebuie s
a ncapa n maxim 20 de linii s, i fiecare linie sa aiba
cel mult 80 de caractere.
Scriet, i doar ceea ce e esent, ial!
Fis, ierul trebuie s
a se numeasca README, nu readme, ReadMe, README.txt,
readme.txt, read-me.doc, rEADME, README.md sau alte variante asemanatore
sau nu. Nerespectarea acestor cerint, e duce la nepunctarea temei.

1.4
1.4.1

Specificat, ii program
Intr
ari

Programul va citi dintr-un fis, ier numit input automatul finit, n formatul

specificat mai jos. Programul va citi dintr-un fis, ier numit text un text din

care va afis, a subs, irurile din limbaj.


Se consider
a corect orice primes, te programul ca intrare pentru punctajul
maxim. Pentru bonus, programul trebuie sa poata raporta erori sintactice s, i
semantice n automat.
Simbolurile din text care nu apar n alfabet se trateaza ca separatori. Adica
o trecere prin automat care ncepe nainte de separator se ntrerupe s, i dupa
separator va ncepe o alta. Acest lucru va asigura timpi mai mici de rulare fara
prea multe optimiz
ari s, i v
a permite sa citit, i fisierul linie cu linie, fara a fi nevoie
s
a le concatenat, i.
1.4.2

Ies, iri

Programul va afis, a la ies, irea standard rezultatul, cate un subs, ir pe linie. S, irul
vid nu se va afis, a fiindc
a nu are sens sa cautam s, irul vid ntr-un text.
1.4.3

Erori

In cazul n care automatul nu respecta sintaxa specificata n sect, iunile 2.2 s, i


3.2, programul trebuie s
a afis, eze mesajul Syntax error. Daca fis, ierul lex e

bine f
acut, cazurile de erori sintactice se rezolva cu o singura regula la final.
In cazul n care automatul nu are erori sintactice, dar foloses, te undeva stari
care nu sunt n mult, imea st
arilor, K, simboluri care nu sunt n alfabet, , sau
are num
arul de tranzit, ii pentru o combinatie (stare sursa, simbol) diferit de
1, programul trebuie s
a afis, eze mesajul Semantic error. Erorile semantice

pot ap
area la nivel de tranzit, ii(tranzit, ii lipsa, tranzit, ii duplicat, stari incorecte,
simboluri incorecte), stare init, iala sau stari finale.
Erorile se afis, eaz
a la ies, irea standard; e mai simplu as, a.

Not, iuni introductive

2.1

Limbajul de descriere

Limbajul este descris printr-o gramatica BNF s, i foloses, te aceeas, i convent, ie de


culori ca articolul Wikipedia despre BNF:
albastru - neterminali
verde - operatori ai limbajului BNF s, i paranteze ajutatoare
rosu - terminali (elemente care fac parte efectiv din limbajul descris)

2.2
2.2.1

Simbol, Alfabet, S, ir
Simbol

Atent, ie, se folosesc simboluri diferite fat, a de tema 0:


<symbol> ::= <upper-case letter> | <lower-case letter> | <digit> | <other>
<lower-case letter> ::= ( a | b | c | d | e | f | g | h | i | j | k | l | m | n | o | p
|q|r|s|t|u|v|w|x|y|z)
<upper-case letter> ::= ( A | B | C | D | E | F | G | H | I | J | K | L | M |
N|O|P|Q|R|S|T|U|V|W|X|Y|Z)
<digit> ::= ( 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 )
<other> ::= ( ! | # | $ | % | & | - | . | / | : | ; | < | > | = | @ | [ | ] | ? | + |
|||| ||||)
2.2.2

Alfabet

<alphabet> ::= { <symbol> ( , <symbol> )* }


2.2.3

S, ir

Atent, ie, un cuv


ant e definit diferit fat, a de cazul expresiilor regulate, nemaiavand
s, irul vid:
<word> ::= ( <symbol> )+

Automate Finite Deterministe(AFD)

3.1

Descriere

Un automat finit este un model de calcul care primes, te la intrare o banda de


simboluri s, i s, i modific
a starea interna n funct, ie de ce are la intrare. Acesta
poate fi privit ca o cutie neagra cu nis, te stari ntre care face tranzit, ii n funct, ie
de intrare, la fiecare tranzit, ie mis, cand capul de citire la dreapta.
Formal, un automat finit determinist este un tuplu M = (K, , , s, F ), cu
urm
atoarele propriet
at, i:
K este mult, imea st
arilor. K este finita, de unde vine s, i numele automatului;
este alfabetul din care sunt formate cuvintele acceptate de automat;

se numes, te funct, ie de tranzit, ie. : K K. (p, a) = q; p, q


K; a nseamn
a c
a automatul, daca se afla n starea p s, i primes, te pe
band
a a, trece n starea q. Fiindca este funct, ie, toate tranzit, iile din
fiecare stare pentru fiecare simbol trebuie sa fie definite.
s K este starea de start. Aceasta este starea n care se afla automatul
nainte de a primi ceva pe banda.
F K este mult, imea starilor finale. Daca automatul se afla ntr-o stare
f F dup
a ce a terminat de citit s, irul nseamna ca accepta s, irul.

3.2

Specificat, ii

In tem
a, un automat finit determinist este dat ca un tuplu, conform definit, iei:
<DFA> ::= ( <states> , <alphabet> , <transitions> , <state> , ( <states>
| {} ) )
<states> ::= { <state> ( , <state> )* }
<state> ::= <name>
<name> ::= ( <upper-case letter> | <lower-case letter> | <digit> | ) +
<transitions> ::= ( <transition> ( , <transition> ) * )
<transition> ::= d( <state> , <symbol> )= <state>

4
4.1

Punctaj
Checker

Checker-ul va oferi un punctaj ntre 0 s, i 150. Ce este peste 100 intra n categoria
bonus. Testele sunt publice.

4.2

Bonus s, i Depunct
ari

Implement
arile care nu folosesc flex primesc maxim 50% din punctaj.
Pentru temele care nu respecta specificat, iile la rularea automata, punctajul
va fi 0.
Deadline: 20.01.2016, 23:59. Upload-ul va ramane deschis pana la ora 05:00.

Sugestii

V
a recomand s
a ncepeti c
at mai repede. E mai us, or decat credeti.

Bibliografie
[1] flex homepage
[2] Lexical Analysis with Flex
[3] Using flex
[4] jflex homepage
[5] jflex user manual
[6] jflex user manual in japanese
[7] Laborator 1 SO: Makefile

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