V . : {0,1}, {a,b,c,d}. . , , , - . - . {0,1} .
a b , ab. . +, →, : a+b → ab; ab+b2 → abb2. -, y , y, , , y . , x = dog, y = house, = doghouse.
V V , V. , , . (sentence) (word) "". s, |s|, . , banana . , ε (, ), , ε.
. V={1,2,3}. 2, 31 12331 V, a, 341 1b301 V.
, .
x y +. +?
) + . : +b→b ;
) : (x+y)+z = x+(y+z)=x+y+z. (+b)+c= +(b+c)=+b+c=bc;
) () , , +=. 0. , ε ( , , λ, Ω).
V2 = V+V 2, V;
V3 = V2 + V 3, V;
Vn= Vn-1 + V n, V;
:
V V+ = V ᴜ V2 ᴜ V3 ᴜ
ᴜ Vn-1 ᴜ Vn ᴜ
V V* = ε ᴜ V ᴜ V2 ᴜ = ε ᴜ V+
|
|
, ' , . 2.3.
s (prefix) | , s; , ban banana | ||
s (suffix) | , s; , nn banana | ||
ϳ s (substring) | , s; , nan banana. , . s s ε , s. | ||
, s | - , , s s | ||
ϳ s (subsequence) | - , ( ' ) s. , b banana | ||
. 2.3. ,
.
(language) - . . Ø( ) {ε} (, ) . Pascal, (, , ) .
, - s s ε = ε s = s.
"", " " . , s=ε, i >0 s s-1s. ε s s, s1=s. ³, s2=ss, s3=sss ..
, . ', (. 2.4). , L0 {ε}, a L L-1L. , L L, -1 .
' (union) L L U M | L U M = { s|s ϵ L s ϵ M } |
(concatenation) L LM | LM = { st|s ϵ L t ϵ M } |
(Kleene closure); L L*. | L*= U L, i= 0, ∞ L* L |
(positive closure). | L+= U L, i= 1, ∞ L+ " L" |
. 2.4.
2.2
L {, ,..., Z, , b,..., z}, D {0, 1, 2,..., 9}. L D . , L , , a D , . , , L D . , L D , . 2.4.
|
|
1. L U D .
2. LD , , .
3. L4 .
4. L * , ε.
5. L (L U D)* , .
6. D+ .
. , .
Pascal , ; , , . 5 2.2. , , . Pascal
letter(letter|digit)*
"", , letter , , .
. r L(r). , , r, L(r).
, V.
1. ε , {ε}, , .
2. V, , { }, , . , . , - .
3. , r s , L(r) L(s).
(r)|(s) , L(r) U L(s).
(r)(s) , L(r)L(s).
(r)* - , (L(r))*.
(r) , L(r).
, , .
. (1) (2) ; ε V, ' . (3) .
, .
1. * .
2. .
3. | (') .
()|((b)*()) | b*. , , b, .
2.3
V = { a,b }.
1. | b { ,b }.
2. ( | b)( | b) { , ab, ba, bb }, b
2. aa | ab | ba | bb.
3. * , {ε, , , ,... }.
4. ( | b)* ,
b, b. ( *| b *)*.
5. | *b , ,
, b.
r s , r s , r = s. , ( | b) = (b | ).
, . . 2.5 r, s t.
|
|
r | s = s | r | | |
r | (s | t) = (r | s)| t (rǀs)ǀ t | | |
(rs) t = r (st) | |
r (s | t) = rs | rt (s | t) r = sr | tr | | |
ε r = r r ε = r | ε |
r* = (r |ε) * | ' * ε |
r** = r* | * |
. 2.5.
2.2.4
, . V ,
d1 → r1, d2 → r2, d3 → r3, , dn → rn,
di ', ri VU{ d1,d2,...,di-1 }, . ri V , V - ri, (, ) . ri d j ≥ i, ri , .
, .
2.4
, Pascal , . :
letter → A | B |... | Z | a | b | |z
digit → 0 | 1 | |9
id → letter(letter | digit)*
2.5
Pascal 5280, 39.37, 6.3364 1.894-4. :
digit → 0 | 1 | |9
digits → digit digit*
optional_fraction →. digits|ε
optional_exponent → (E(+| - | ε)digits) |ε
num → digits optional_fraction optional_exponent
, optional_fraction , , ( ). optional_exponent , ' + - . , , 1. , 1.0.
2.2.5
, .
1. . + "
". r - , L (r), (r)+ , (L (r))+. , + . + , *.
r*=r+ |ε r+=rr* ' .
2. . ? " ". r? r |ε. r , (r)? - , L (r)U{ε}. , + ?, num 2.5
|
|
digit → 0 | 1 | |9
digits → digit +
optional_ffaction → (.digits)?
optional_exponent → (E(+| -)?digits)?
num → digits optional_fraction optional_exponent
3. . [abc], a, b , a | b | . [a- z ] | b |... | z. , [A-Za-z] [A-Za-z0-9]*.
. , .
. , , . , - .
.
{ wcw | w b }
- , - .
( ) . ', .
() . , . , .
2.6
:
stmt → if expr then stmt
| if expr then stmt else stmt
expr → term relop term
| term
term → id
| num
stmt, expr term , , if, then, else, relop, id num , :
if → if
then → then
else → else
relop → < | <= | = | <> | > | >=
id → letter (letter | digit)*
num → digit+ (. digit+)? ( E (+ | -)? digit+)?
letter digit , .
if, then, else, , relop, id num. , , , . 2.5, num Pascal.
, " ", , . ws, :
ws → delim+
delim → blank | tab | newline
ws, . , , .
- | ||
ws | ||
if | if | |
then | then | |
else | else | |
id | id | |
num | num | |
< | relop | LT |
<= | relop | LE |
= | relop | EQ |
<> | relop | NE |
> | relop | GT |
>= | relop | GE |
. 2.10.
, , . 2.10, , -. - LT,LE,EQ,NE, GT,GE.
ij
-, (transition diagram). ij 䳿, , . 2.1, , , . , forward. , .
|
|
(states). ' , (edges). , s, , , ' s. ̳ other - , .
, ( ).
start . 䳿, . , , , . , , .
. 2.11 >= >.
. 2.11. ij >= >
ij . 0, . , >, 6, ">". > >=. 6 . , =, 6 7, "=". other 8. , 7, , - , >=.
, > , , 8. , , .
, , . , forward , , . forward , , lexeme_beginning. , .
2.7
ij relop . 2.12. , . 2.11 .
. 2.12. ij ()
2.8
, , , , . . . 2.13 , , , , - .
. 2. 13. ij
, . . 2.10 if, then else . . , ' (. 2.13), gettoken() install_id() - . install_id() , . , , installed() 0. , install_id() . , , install_id() .
gettoken() . , ; id.
, .
. , .
. 2.14.ij Pascal
2.9
,
num → digit* (. digit+)? (E(+ | -)? digit+)?
, digits fraction? exponent?, fraction exponent ' .
( , ). , , 12 12.3, 12.34. 25, 20 12 . 2.14, 12.34, , 12, 12.3 12.34 . ij 25, 20 12 digits, digits fraction digits fraction? exponent, 12, 20, 25.
19, 24 27 install_num(), . num
.
, , . , 1,< 14 22 . 2.14 "<". , 1, , 1.0< . , , .
. 2.14. , , ' ( ). - . ϳ, , , , .
2.10
2.6 ' , . 2.12-2.14. .
, ' . ws, , , - . ij , , .
, , ; .
, ,
. , , .