Documente Academic
Documente Profesional
Documente Cultură
Un ir (string) este o secven nit de zero sau mai multe elemente care sunt puse unele lng altele prin juxtapunere
JUXTAPNE, juxtapn, vb. III. Tranz. A pune mai multe obiecte al!turi, unul lng! altul; JUXTAPNERE, juxtapuneri, s. f. Ac"iunea de a juxtapune #i rezultatul ei; Dic"ionar Explicativ (DEX) al Limbii Romne
Exemplu de ir
Dup James Hein Discrete Structures, Logic and Computability Section 1.3 (String Subsection pp.36 - 37) Section 3.1 (Strings Subsection pp. 117-118) Section 3.3 (Strings Subsection pp. 157- 158) Section 3.2 (Language Construction pp. 126-128 without Combining Languages) Section 3.2 (Subsection Grammar and Derivation pp. 130-143 without pages138-140)
1
1232233122
Elementele lui sunt 1,2,3,2,2,3,3,1,2,2 Numrul de elemente dintr-un ir se numete lungimea (length) acelui ir, i uneori e referit prin |irul| e.g. |1232233122|=10 irul gol este referit prin (lambda)
2
Alfabet Elementele individuale care compun un ir sunt luate dintr-un set nit denumit alfabet Dac A este un alfabet atunci un ir de elemente din A se spune c este un ir peste A
Exemplu Dac A = {0,1,2,3,4,5,6,7,8,9} este alfabetul cifrelor zecimale (digii zecimali) iruri peste A sunt : 0, 10, 1232233122, 1, 22, 223
digit |dijit| noun 1 any of the numerals from 0 to 9, esp. when forming part of a number DGIT, digi!i, s. m. (Inform., Electron.) Cifr! NUMERL, -$ I. adj. care desemneaz!, exprim! un num!r. ! sistem ~ = ansamblu de simboluri care reprezint! numere Dic"ionarul Mac OS X & DEX al Limbii Romne
3
Setul tuturor irurilor peste un Alfabet Setul tuturor irurilor peste un alfabet A se noteaz cu A*
Exemple A = {1,2,3} A* = { , 1, 2, 3, 11, 12, 21, 13, 31, 23, 32, 111, ... } B = {a} B* = { , a, aa, aaa, aaaa, ...}
Reprezentarea
Operaii de Baz append ( ) nseamn adugarea unui element din alfabet la captul stng a unui ir, n juxtapunere
Este asociativ la dreapta (adic a b = a (b )) i este o operaie de construcie pentru iruri Exemple A = {a, b} a ab = aab a=a
Inducia:
if a A i s A* then a s A*
i ii iul nc en fu e om ism e ult cu d ecan ioar i m e m er tru siv i nt ns cur cela ile a r co re a m ri d su te edu izn cur u c il n P o t pr A* u utat c dis
8
Alte operaii Operaia de alturare a dou iruri unul lng altul se numete concatenare (cat)
Exemple Concatenarea lui abb cu cd (altfel spus cat(abb,cd)) este abbcd a = a = a cat(x,y) = if x = then y else head(x) cat(tail(x),y)
append right este similar cu append dar pune elementul la captul drept al unui ir
Uneori e referit prin acelai simbol appendRight(s,x) = if s = then x else head(s) appendRight(tail(s),x)
12
Testarea Deniiei
Digii = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9} Baza: Digits D Inducia: if n D i d Digits i n 0 then n d D
O alt opiune este s utilizm o gramatic Informal, o gramatic este o mulime de reguli utilizate pentru a denii structura irurilor dintr-un limbaj
Componentele gramaticii
O gramatic pentru un limbaj L const din:
1. Un alfabet N de simboluri gramaticale denumite neterminale (de obicei litere mari) 2. Un alfabet T de simboluri terminale (TN=) 3. Un simbol neterminal S denumit simbolul de start 4. Un set nit de reguli (producii) de forma unde , sunt iruri peste N T, . Exist cel puin o producie doar cu S n partea stng. Fiecare neterminal trebuie s apar n partea stng a unei producii
Not 1. Cnd avem o producie i o alt producie putem scrie | 2. se citete nlocuim cu , produce , se rescrie n
15
16
aS
aaS
aacS
aacbS
aS
aaS
aacS
aacbS
Utilizm S aS
Thursday, November 8, 2012
Utilizm S aS
Utilizm S cS
Utilizm S bS
Utilizm S
Utilizm S aS
Thursday, November 8, 2012
Utilizm S aS
Utilizm S cS
Utilizm S bS
| aS | bS | cS
19
| aS | bS | cS
20
| aS | bS | cS
21
| aS | bS | cS
22
aacbS
aacbS
aacb
| aS | bS | cS
23
| aS | bS | cS
24
Exemplu
S AB A | aA B | bB O derivare leftmost pentru aab S AB aAB aaAB aaB aabB aab
xy
derivare n unul sau mai muli pai derivare n zero sau mai muli pai
aacb (exist o derivare pentru aacb care ia unul sau mai muli pai)
Alte noiuni derivarea leftmost: rescriem n ecare pas neterminalul cel mai din stnga derivarea rightmost: rescriem n ecare pas neterminalul cel mai din dreapta
25
Limbaje
Dac G este o gramatic atunci limbajul lui G este setul de iruri derivate din simbolul de start al lui G. Limbajul e referit prim L(G). Formal, L(G) = {s | s T* i S unde T - set de terminale S - simbolul de start
+
Gramatici Recursive
O producie este numit recursiv dac partea ei stng apare n partea ei dreapt
Exemplu S aS
s}
O producie A este recursiv indirect dac A deriv ntr-o form ce-l conine pe A
Exemplu S b | aA A c | bS S aA abS
27
O gramatic este recursiv dac i numai dac ea conine o producie recursiv sau indirect recursiv
28
Observaie
Exemplul 1
O gramatic pentru numeralele zecimale
S D | DS D0|1|2|3|4|5|6|7|8|9 Derivarea lui 7801 S DS 7S 7DS 78S 78DS 780S 780D 7801 Deci paii de derivare sunt : S DS 7S 7DS 78S 78DS 780S 780D 7801
30
29
Exemplul 2
O gramatic pentru expresii aritmetice simple
Ea|b|E-E Derivare leftmost pentru a - b - a E E-E a-E a-E-E a-b-E E E a E b E E a E a E a-b-a E E b E a E a Ea|b|E-E Derivare leftmost pentru a - b - a E E-E a-E a-E-E a-b-E E E b E E E E a-b-a
Exemplul 2
O gramatic pentru expresii aritmetice simple
E E E
a-b-a
31
te 2 a es in ic l pu ost at e am c tm in gr ist righ ir d o a a ,b ex t/ os un it en dac ftm tru en es le n d n igu ri pe jul b riv ite ba Alt derivare leftmost pentru a - am - da er lim b e if E E-E E-E-E a-E-E a - bd- E a-b-a
32
Examplul 2 (cont)
nelesul unui ir dintr-un limbaj este strns legat de arborele de derivare al irului. Dorim ca ecare ir dintr-un limbaj s aib exact un neles / arbore de derivare. ET|E-T Ta|b Derivare pentru a - b - a E E E a E b a - b - a = a - (b - a) ? E a or E a E b a - b - a = (a - b) - a ? a
Exemplul 2 (cont)
E E E E
E -
Dezambiguarea: vrem ca primul - s e evaluat naintea celui de-al doilea ET|E-T Ta|b
33 34
Exemplul 2 (cont)
ET|E-T Ta|b Derivare pentru a - b - a E E-T ET|E-T Ta|b Derivare pentru a - b - a E E-T E-T-T
Exemplul 2 (cont)
E E T E E -
E T T
35
36
Exemplul 2 (cont)
ET|E-T Ta|b Derivare pentru a - b - a E E-T E-T-T T-T-T ET|E-T Ta|b Derivare pentru a - b - a E E-T E-T-T T-T-T a-T-T
Exemplul 2 (cont)
E E E T T T E T a
37
E E T T
38
Exemplul 2 (cont)
ET|E-T Ta|b Derivare pentru a - b - a E E-T E-T-T T-T-T a-T-T a-b-T ET|E-T Ta|b Derivare pentru a - b - a E E-T E-T-T T-T-T a-T-T
Exemplul 2 (cont)
a-b-T
a-b-a
E E E T a
39
E T E T a
40
T b
E -
T b
T a
Exemplul 2 (cont)
ET|E-T Ta|b Derivare pentru a - b - a E E-T E-T-T T-T-T a-T-T a-b-T a-b-a ... for a = 0; a < 10; a++) { x++; } ...
Un program poate vzut ca un ir. Este acest program corect sintactic ?
De ce ?
Nu
E E E T a
Thursday, November 8, 2012
T b
T a
n esen, putem nlocui nodurile neterminalele cu un copil terminal. n acest mod obinem aa numitul arbore sintactic abstract a b
41
42
De ce ?
... for a = 0; a < 10; a++) { x++; } ...
Un program poate vzut ca un ir. Este acest program corect sintactic ?
Nu
ar do e u! sta pl ce em i a ex ... un
43