1
Lý thuyết tính toán
(Theory of Computation)
Lý thuy
Lý thuyế
ết t
t tí
ính to
nh toá
án
n
(Theory of Computation)
(Theory of Computation)
PGS.TS. Phan Huy Kh
PGS.TS. Phan Huy Khá
ánh
nh
khanhph@vnn.vn
khanhph@vnn.vn
Chương 3
Văn phm
và ôtômat đy xung
Chương
Chương 3
3
Văn ph
Văn ph
m
m
v
và
à ôtômat đ
ôtômat đ
y x u
y x u
ng
ng
2/2/ 7777
Chương
Chương 3
3 Văn ph
Văn ph
m v
m và
à ôtômat đ
ôtômat đ
y xu
y xu
ng
ng
Kh
Khá
ái ni
i ni
m ngôn ng
m ngôn ng
l
l
p tr
p trì
ình (N
nh (NNLT)
NLT)
Văn ph
Văn ph
m
m
Kh
Khá
ái ni
i ni
m văn ph
m văn ph
m
m
Phân c
Phân c
p c
p cá
ác lo
c lo
i văn ph
i văn ph
m c
m c
a Chomsky
a Chomsky
Văn ph
Văn ph
m ch
m chí
ính qui
nh qui
Ôtômat đ
Ôtômat đ
y xu
y xu
ng
ng
Ngôn ng
Ngôn ng
phi ng
phi ng
c
c
nh
nh
Quan h
Quan h
v
v
i c
i cá
ác ôtômat đ
c ôtômat đ
y xu
y xu
ng
ng
T
Tí
ính ch
nh ch
t c
t c
a c
a cá
ác ngôn ng
c ngôn ng
phi ng
phi ng
c
c
nh
nh
3/3/ 7777
L
L
ch s
ch s
ngôn ng
ngôn ng
l
l
p tr
p trì
ình
nh
T
T
khi m
khi má
áy t
y t í
ính đi
nh đi
n t
n t
xu
xu
t hi
t hi
n,
n, con ngư
con ngư
i ph
i ph
i t
i tì
ìm c
m cá
ách
ch
l
l
p tr
p trì
ình, hay l
nh, hay l
p chương tr
p chương trì
ình (Programming)
nh (Programming)
Nh
Nh
ng ngôn ng
ng ngôn ng
đ
đ
u tiên ch
u tiên ch
l
là
àt
t
h
h
p c
p c
a c
a cá
ác con s
c con s
(bit) 0
(bit) 0
v
và
à1, g
1, g
i l
i là
àngôn ng
ngôn ng
m
má
áy (Machine Language)
y (Machine Language)
Ngôn ng
Ngôn ng
m
má
áy ph
y ph
thu
thu
c ho
c hoà
àn to
n toà
àn v
n và
ào t
o t
ch
ch
c ph
c ph
n c
n c
ng
ng
c
c
a m
a má
áy, v
y, và
àr
r
t sơ c
t sơ c
p
p
Vi
Vi
c l
c l
p tr
p trì
ình r
nh r
t kh
t khó
ó khăn
khăn, nh
, nh
c nh
c nh
n v
n và
àd
d
sai s
sai só
ót
t
T
T
nh
nh
ng năm
ng năm 1950,
1950, đ
đ
gi
gi
m nh
m nh
vi
vi
c l
c l
p tr
p trì
ình :
nh :
Ngư
Ngư
i ta
i ta s
s
d
d
ng
ng k
k
thu
thu
t g
t g
i chương tr
i chương trì
ình con (Subprogram
nh con (Subprogram
hay Subroutine)
hay Subroutine) b
b
ng c
ng cá
ách
ch d
dù
ùng
ng l
l
i nh
i nh
ng chương tr
ng chương trì
ình đã vi
nh đã viế
ết
t
Ngư
Ngư
i ta xây d
i ta xây d
ng c
ng cá
ác thư vi
c thư vi
n (
n (kho chương tr
kho chương trì
ình m
nh m
u)
u) đ
đ
khi c
khi c
n th
n thì
ìg
g
i đ
i đế
ến
n
4/4/ 7777
S
S
ra đ
ra đ
i c
i c
a h
a h
p ng
p ng
Ngôn ng
Ngôn ng
h
h
p d
p d
ch ra đ
ch ra đ
i t
i t
nh
nh
ng năm
ng năm 1950 :
1950 :
G
G
i t
i t
t h
t h
p ng
p ng
(
(Assembly) hay còn
Assembly) hay còn đư
đư
c g
c g
i l
i là
àc
cá
ác ngôn
c ngôn
ng
ng
bi
bi
u tư
u tư
ng (Symbolic Language)
ng (Symbolic Language)
Trong h
Trong h
p ng
p ng
, c
, cá
ác l
c l
nh v
nh và
à đ
đ
a ch
a ch
c
cá
ác to
c toá
án h
n h
ng đư
ng đư
c
c
thay th
thay thế
ếb
b
i c
i cá
ác t
c t
ti
tiế
ếng Anh g
ng Anh g
i nh
i nh
(
(Mnemonic) n
Mnemonic) như DIV
hư DIV,
,
JUMP, MUL...
JUMP, MUL...
C
Cá
ác chương tr
c chương trì
ình vi
nh viế
ết b
t b
ng Assembly :
ng Assembly :
Không th
Không th
ch
ch
y ngay đư
y ngay đư
c m
c mà
àph
ph
i qua giai đo
i qua giai đo
n h
n h
p d
p d
ch
ch
(Assembler) th
(Assembler) thà
ành ngôn ng
nh ngôn ng
m
má
áy
y
Ph
Ph
thu
thu
c v
c và
ào ph
o ph
n c
n c
ng
ng
Xa l
Xa l
v
v
i ngôn ng
i ngôn ng
t
t
nhiên (Natural language)
nhiên (Natural language)
5/5/ 7777
Ngôn ng
Ngôn ng
m
má
áy ti
y tiế
ến g
n g
n đ
n đế
ến ngôn ng
n ngôn ng
t
t
nhiên
nhiên
Năm
Năm 1957 :
1957 :
FORTRAN (FORmula TRANslator/ biên d
FORTRAN (FORmula TRANslator/ biên d
ch c
ch cá
ác công th
c công th
c)
c)
đư
đư
c IBM đ
c IBM đ
ng l
ng là
àm
m
t trong nh
t trong nh
ng NNLT đ
ng NNLT đ
u tiên
u tiên
FORTRAN g
FORTRAN g
n g
n gũ
ũi ngôn ng
i ngôn ng
t
t
nhiên v
nhiên v
i c
i cá
ách di
ch di
n đ
n đ
t
t
To
Toá
án h
n h
c cho ph
c cho phé
ép gi
p gi
i quy
i quyế
ết c
t cá
ác b
c bà
ài to
i toá
án khoa h
n khoa h
c
c
k
k
thu
thu
t v
t và
à đư
đư
c
c
ng d
ng d
ng r
ng r
t r
t r
ng rãi
ng rãi
Ti
Tiế
ếp theo l
p theo là
às
s
ra đ
ra đ
i c
i c
a c
a cá
ác NNLT như
c NNLT như :
:
ALGOL 60 (ALGOrithmic Language) 1960,
ALGOL 60 (ALGOrithmic Language) 1960,
COBOL (Comon Business Orient ed Language) 1964
COBOL (Comon Business Oriented Language) 1964
Simula, v.v...
Simula, v.v...
6/6/ 7777
Ph
Phá
át tri
t tri
n c
n c
a NNLT
a NNLT
Theo s
Theo s
ph
phá
át tri
t tri
n c
n c
a c
a cá
ác th
c thế
ếh
h
m
má
áy t
y tí
ính, c
nh, cá
ác ngôn ng
c ngôn ng
l
l
p tr
p trì
ình c
nh cũ
ũng không ng
ng không ng
ng đư
ng đư
c c
c c
i ti
i tiế
ến v
n và
àho
hoà
àn thi
n thi
n đ
n đ
c
cà
àng ng
ng ngà
ày c
y cà
àng đ
ng đá
áp
p
ng nhu c
ng nhu c
u c
u c
a ngư
a ngư
i s
i s
d
d
ng v
ng và
à
gi
gi
m nh
m nh
công vi
công vi
c l
c l
p tr
p trì
ình
nh
Nhi
Nhi
u ngôn ng
u ngôn ng
đã ra đ
đã ra đ
i v
i và
àh
hì
ình th
nh thà
ành hai lo
nh hai lo
i ngôn ng
i ngôn ng
:
:
Ngôn ng
Ngôn ng
m
má
áy b
y b
c th
c th
p (low
p (low-
-level language)
level language)
H
H
p ng
p ng
Ngôn ng
Ngôn ng
l
l
p tr
p trì
ình b
nh b
c cao
c cao
C
Cá
ác ngôn ng
c ngôn ng
b
b
c th
c th
p v
p và
àh
h
p ng
p ng
, t
, t
ng ch
ng ch
d
dù
ùng đ
ng đ
vi
viế
ết c
t cá
ác tr
c trì
ình đi
nh đi
u khi
u khi
n v
n và
àki
ki
m tra thi
m tra thiế
ết b
t b
,
,
c
cá
ác tr
c trì
ình s
nh s
a l
a l
i (Debugger)...
i (Debugger)...
2
7/7/ 7777
Ngôn ng
Ngôn ng
l
l
p tr
p trì
ình b
nh b
c cao
c cao
C
Cá
ác ngôn ng
c ngôn ng
l
l
p tr
p trì
ình b
nh b
c cao (High
c cao (High-
-level Language) :
level Language) :
Công c
Công c
gi
giú
úp gi
p gi
i quy
i quyế
ết c
t cá
ác v
c v
n đ
n đ
th
th
c t
c tế
ế
L
Là
à nơi m
nơi mà
ành
nh
ng th
ng thà
ành t
nh t
u nghiên c
u nghiên c
u m
u m
i nh
i nh
t c
t c
a Tin h
a Tin h
c
c
đư
đư
c đưa v
c đưa và
ào
o
L
Lĩ
ĩnh v
nh v
c nghiên c
c nghiên c
u ph
u phá
át tri
t tri
n c
n cá
ác ngôn ng
c ngôn ng
l
l
p tr
p trì
ình v
nh v
a c
a có
ó
t
tí
ính truy
nh truy
n th
n th
ng, v
ng, v
a c
a có
ót
tí
ính hi
nh hi
n đ
n đ
i
i
8/8/ 7777
R
R
t nhi
t nhi
u NNLT b
u NNLT b
c cao đã đư
c cao đã đư
c ph
c phá
át tri
t tri
n
n
M
M
t v
t và
ài NNLT quen thu
i NNLT quen thu
c :
c :
Lisp (LISt Processing)
Lisp (LISt Processing) 1960
1960
PL/1 (Programming Language number 1)
PL/1 (Programming Language number 1) 1963
1963
Basic (Beginner
Basic (Beginner
s All
s All-
-Purpose Symbolic I nstruction Code) 1964
Purpose Symbolic I nstruction Code) 1964
Pascal (l
Pascal (l
y tên nh
y tên nhà
àTo
Toá
án h
n h
c Ph
c Phá
áp Blaise PASCAL)
p Blaise PASCAL) 1970
1970
PROLOG (PROgramming in LOGic)
PROLOG (PROgramming in LOGic) 1970
1970
C
C1972
1972
ADA (l
ADA (l
y tên nh
y tên nhà
àn
n
khoa h
khoa h
c Augusta Ada Byron)
c Augusta Ada Byron) 1980
1980
C+ + ,
C+ + , Java, C# ,
Java, C# , Visual Basic
Visual Basic
Cơ s
Cơ s
D
D
li
li
u, l
u, l
p tr
p trì
ình h
nh hà
àm, l
m, l
p tr
p trì
ình logic,
nh logic,
ng đ
ng đ
i tư
i tư
ng,
ng,
v.v...
v.v...
9/9/ 7777
Phân lo
Phân lo
i NNLT theo phương th
i NNLT theo phương th
c
c
C
Có
ónhi
nhi
u NNLT theo phương th
u NNLT theo phương th
c :
c :
M
M
nh l
nh l
nh
nh (imperative) : Fortran (1957), Cobol (1959), Basic
(imperative) : Fortran (1957), Cobol (1959), Basic
(1965), Pascal (1970), C (1971), Ada (1979)...
(1965), Pascal (1970), C (1971), Ada (1979)...
Đ
Đ
nh hư
nh hư
ng đ
ng đ
i tư
i tư
ng
ng (object
(object-
-oriented)
oriented) : Smallt alk (1969), C+ +
: Smallt alk (1969), C+ +
(1983), Eiffel (1986), Java (1991), C# (2000), ...
(1983), Eiffel (1986), Java (1991), C# (2000), ...
H
Hà
àm
m(functional) : Lisp (1958)
(functional) : Lisp (1958),
, ML (1973), Scheme (1975),
ML (1973), Scheme (1975),
Caml (1987), Miranda (1982), ...
Caml (1987), Miranda (1982), ...
Logic
Logic (logic
(logic-
-based) ch
based) ch
y
yế
ếu l
u là
àngôn ng
ngôn ng
Prolog (1970)
Prolog (1970)
Ngôn ng
Ngôn ng
thao t
thao tá
ác cơ s
c cơ s
d
d
li
li
u như SQL
u như SQL (1980)...
(1980)...
X
X
song song
song song (parallel) : Ada, Occam (1982), C
(parallel) : Ada, Occam (1982), C-
-Linda, ...
Linda, ...
Ngo
Ngoà
ài ra còn c
i ra còn có
ó:
:
L
L
p tr
p trì
ình phân b
nh phân b
(Distributed Programming).
(Distributed Programming).
L
L
p tr
p trì
ình r
nh rà
àng bu
ng bu
c
c(Constraint Programming).
(Constraint Programming).
L
L
p tr
p trì
ì
nh hư
nh hư
ng truy c
ng truy c
p
p(Access
(Access-
-Oriented Programming).
Oriented Programming).
L
L
p tr
p trì
ình theo lu
nh theo lu
ng d
ng d
li
li
u
u(Dataflow Programming), v.v...
(Dataflow Programming), v.v... 10/10/ 7777
Đ
Đ
nh ngh
nh nghĩ
ĩa m
a m
t NNLT b
t NNLT b
c cao
c cao
M
M
t NNLT b
t NNLT b
c cao đư
c cao đư
c xây d
c xây d
ng mô ph
ng mô ph
ng
ng
(m
(m
t c
t cá
ách thô thi
ch thô thi
n) ngôn ng
n) ngôn ng
t
t
nhiên
nhiên,
,
thư
thư
ng l
ng là
àti
tiế
ếng Anh (ho
ng Anh (ho
c ti
c tiế
ếng Nga), t
ng Nga), t
b
b
n y
n yế
ếu t
u t
:
:
B
B
t
t
(Character Set)
(Character Set)
B
B
t
t
v
v
ng (Vocabulary)
ng (Vocabulary)
C
Cú
úph
phá
áp (Semantic)
p (Semantic)
Ng
Ng
ngh
nghĩ
ĩa (Semantic)
a (Semantic)
Căn c
Căn c
v
và
ào c
o cú
úph
phá
áp c
p c
a NNLT,
a NNLT, ngư
ngư
i l
i l
p tr
p trì
ình vi
nh viế
ết chương tr
t chương trì
ình
nh
g
g
m c
m cá
ác câu l
c câu l
nh đ
nh đ
gi
gi
i quy
i quyế
ết b
t bà
ài to
i toá
án c
n c
a m
a mì
ình
nh
M
M
i câu l
i câu l
nh vi
nh viế
ết ra kng nh
t ra kng nh
ng đ
ng đú
úng đ
ng đ
n v
n v
m
m
t c
t cú
úph
phá
áp,
p,
m
mà
àcòn ph
còn ph
i đ
i đú
úng đ
ng đ
n c
n c
v
v
m
m
t ng
t ng
ngh
nghĩ
ĩa, hay ý ngh
a, hay ý nghĩ
ĩa logic
a logic
c
c
a câu l
a câu l
nh,
nh, đ
đ
gi
gi
i quy
i quyế
ết b
t bà
ài to
i toá
án
n
Ngo
Ngoà
ài ra, n c
i ra, n có
óy
yế
ếu t
u t
m
m
t th
t th
năm l
năm là
àt
tí
ính th
nh th
c d
c d
ng
ng
(Pragmatic)
(Pragmatic)
11/11/ 7777
B
B
ký t
ký t
B
B
t
t
(Character Set)
(Character Set)
G
G
m m
m m
t t
t t
p h
p h
p h
p h
u h
u h
n c
n cá
ác t
c t
đư
đư
c ph
c phé
ép d
p dù
ùng trong ngôn ng
ng trong ngôn ng
, t
, t
ng l
ng là
àc
cá
ác t
c t
ASCII
ASCII
C
Có
óth
th
hi
hi
u b
u b
t
t
c
có
ó vai trò như b
vai trò như b
ng ch
ng ch
c
cá
ái (Alphabet)
i (Alphabet)
c
c
a m
a m
t ngôn ng
t ngôn ng
t
t
nhiên
nhiên
V
Ví
íd
d
b
b
9 n
9 né
ét cơ b
t cơ b
n d
n dù
ùng vi
ng viế
ết ch
t ch
H
Há
án :
n :
12/12/ 7777
B
B
t
t
v
v
ng
ng
B
B
t
t
v
v
ng (Vocabulary)
ng (Vocabulary)
G
G
m c
m cá
ác t
c t
(
(Word) hay
Word) hay đơn v
đơn v
t
t
v
v
ng (Token) d
ng (Token) dù
ùng đ
ng đ
t
t
o th
o thà
ành
nh
câu l
câu l
nh v
nh và
à đư
đư
c phân lo
c phân lo
i tu
i tu
theo vai trò c
theo vai trò c
a ch
a chú
úng trong NNLT
ng trong NNLT
M
M
i lo
i lo
i t
i t
v
v
ng l
ng l
i đư
i đư
c chia ra th
c chia ra thà
ành c
nh cá
ác nh
c nhó
óm nh
m nh
hơn
hơn
tu
tu
theo ch
theo ch
c năng s
c năng s
d
d
ng
ng
V
Ví
íd
d
:
:
- Tên, hay đnh danh (Ident ifier) :
Read, Write, P, x, y
- Hng (Constants) : 2
- Toán t(Operators) : + , :=
- Du phân cách (Delimiters) :
:, (, ), Begin, End.
- Tkhoá/dành riêng (KeyWord) :
Program, Var, If Then...
Program P;
Var , y : Integer;
Begin
Read(x);
y:= x+ 2;
Write(y)
End.
Các đơn vtvngChương trình Pascal
3
13/13/ 7777
C
Cú
úph
phá
áp
p
C
Cú
úph
phá
áp (
p (Syntax) hay
Syntax) hay văn ph
văn ph
m (Grammar)
m (Grammar)
l
là
àt
t
p h
p h
p c
p cá
ác quy t
c quy t
c cho ph
c cho phé
ép :
p :
Quy đ
Quy đ
nh c
nh cá
ách th
ch th
c k
c kế
ết h
t h
p c
p cá
ác t
c t
th
thà
ành t
nh t
, k
, kế
ết h
t h
p c
p cá
ác
c
t
t
th
thà
ành câu l
nh câu l
nh đ
nh đú
úng (Statement
ng (Statement -
-Instruction), k
Instruction), kế
ết h
t h
p
p
c
cá
ác câu l
c câu l
nh đ
nh đú
úng th
ng thà
ành m
nh m
t chương tr
t chương trì
ình ho
nh hoà
àn ch
n ch
nh
nh
C
Có
óth
th
h
hì
ình dung c
nh dung cá
ách k
ch kế
ết h
t h
p n
p nà
ày gi
y gi
ng c
ng cá
ách đ
ch đ
t câu trong
t câu trong
m
m
t ngôn ng
t ngôn ng
t
t
nhiên
nhiên
Đ
Đ
đ
đ
nh ngh
nh nghĩ
ĩa c
a cú
úph
phá
áp m
p m
t ngôn ng
t ngôn ng
l
l
p tr
p trì
ình, n
nh, n
i ta
i ta
thư
thư
ng s
ng s
d
d
ng :
ng :
Ho
Ho
c sơ đ
c sơ đ
c
cú
úph
phá
áp (Syntax Diagram)
p (Syntax Diagram)
Ho
Ho
c
c d
d
ng chu
ng chu
n Backus
n Backus-
-Naur
Naur (BNF
(BNF
BackusNaur Normal Form),
BackusNaur Normal Form),
hay
hay d
d
ng Backus
ng Backus-
-Naur m
Naur m
r
r
ng
ng (EBNF
(EBNF
Extended BNF)
Extended BNF)
14/14/ 7777
V
Ví
íd
d
văn ph
văn ph
m ti
m tiế
ếng Anh
ng Anh
Gi
Gi
s
s
c
cá
ác câu t i
c câu t iế
ếng Anh đư
ng Anh đư
c xây d
c xây d
ng theo nh
ng theo nh
ng quy
ng quy
t
t
c như sau
c như sau :
:
Câu
Câu (Phrase/Sentence) g
(Phrase/Sentence) g
m c
m có
óhai th
hai thà
ành ph
nh ph
n l
n l
n lư
n lư
t :
t :
Ch
Ch
t
t
(Subject)
(Subject)
Đ
Đ
ng t
ng t
(Verbe)
(Verbe)
Ch
Ch
t
t
c
có
óth
th
l
là
àHe
He ho
ho
c
c She
She
Đ
Đ
ng t
ng t
c
có
óth
th
l
là
àsleep
sleep hay
hay eat
eat
T
T
đ
đó
óc
có
óth
th
xây d
xây d
ng đư
ng đư
c c
c cá
ác câu ki
c câu ki
u S+ V :
u S+ V :
He sleep
He sleep
He eat
He eat
She sleep
She sleep
She eat
She eat
15/15/ 7777
V
Ví
íd
d
sơ đ
sơ đ
c
cú
úph
phá
áp câu ti
p câu tiế
ếng Anh
ng Anh
Trong ti
Trong tiế
ếng Anh, m
ng Anh, m
t câu đơn gi
t câu đơn gi
n g
n g
m 3 th
m 3 thà
ành ph
nh ph
n :
n :
Ch
Ch
t
t
(Subject), ch
(Subject), ch
ng h
ng h
n
n
I
I
v
và
à
You
You
Đ
Đ
ng t
ng t
(Verb), ch
(Verb), ch
ng h
ng h
n
n
like
like
v
và
à
see
see
B
B
ng
ng
(Complement), ch
(Complement), ch
ng h
ng h
n
n
him
him
v
và
à
her
her
D
Dù
ùng sơ đ
ng sơ đ
c
cú
úph
phá
áp, ta c
p, ta có
ó:
:
T
T
đ
đó
óc
có
óth
th
xây d
xây d
ng c
ng cá
ác câu đ
c câu đú
úng :
ng :
I see him
I see him
,
,
I like her
I like her
, v.v...
, v.v...
câu bng
bng
đng t
động t
cht
cht
chtI
You động tlike
see
bnghim
her
16/16/ 7777
Kh
Khá
ái ni
i ni
m BNF
m BNF
BNF g
BNF g
m m
m m
t dãy c
t dãy cá
ác quy t
c quy t
c, hay d
c, hay d
ng th
ng th
c
c
M
M
i quy t
i quy t
c c
c có
ód
d
ng : <
ng : < V
V
ế
ế
tr
trá
ái
i > ::= <
> ::= < V
V
ế
ế
ph
ph
i
i >
>
<
<V
V
ế
ế
tr
trá
ái
i> t
> t
ng l
ng là
àm
m
t ký hi
t ký hi
u ph
u ph
i đư
i đư
c đ
c đ
nh ngh
nh nghĩ
ĩa rõ
a rõ
<
<V
V
ế
ế
ph
ph
i
i> l
> là
àm
m
t dãy ký hi
t dãy ký hi
u, ho
u, ho
c đã đư
c đã đư
c th
c th
a nh
a nh
n,
n,
ho
ho
c đã đư
c đã đư
c đ
c đ
nh ngh
nh nghĩ
ĩa trư
a trư
c đ
c đó
ó, tuân theo m
, tuân theo m
t quy ư
t quy ư
c
c
n
nà
ào đ
o đó
ó
D
D
u ::= (ho
u ::= (ho
c
c
,
,ho
ho
c =
c = )
) đ
đ
c
c
đư
đư
c đ
c đ
nh ngh
nh ngh
ĩ
ĩ
a l
a là
à
N
Nế
ếu
uc
có
ónhi
nhi
u v
u vế
ếph
ph
i c
i cù
ùng đ
ng đ
nh ngh
nh nghĩ
ĩa m
a m
t v
t vế
ếtr
trá
ái,
i, ngư
ngư
i ta
i ta
s
s
d
d
ng d
ng d
u |
u | đ
đ
phân c
phân cá
ách theo ngh
ch theo nghĩ
ĩa lo
a lo
i tr
i tr
D
D
ng BNF m
ng BNF m
r
r
ng s
ng s
d
d
ng hai c
ng hai c
p d
p d
u quy ư
u quy ư
c :
c :
{...} : v
{...} : vế
ếph
ph
i c
i có
óm
m
t chu
t chu
i t
i t
0
0 đ
đế
ến nhi
n nhi
u m
u m
c li
c li
t < ...> *
t < ...> *
[...] : v
[...] : vế
ếph
ph
i c
i có
ó0 ho
0 ho
c c
c có
ó1 m
1 m
c li
c li
t (option)
t (option)
17/17/ 7777
V
Ví
íd
d
d
d
ng BNF
ng BNF
D
D
ng BNF c
ng BNF cá
ác câu ti
c câu tiế
ếng Anh đơn gi
ng Anh đơn gi
n như sau
n như sau :
:
< Câu> ::=
< Câu> ::= < Ch
< Ch
t
t
> <
> < Đ
Đ
ng t
ng t
> |
> |
< Ch
< Ch
t
t
> <
> < Đ
Đ
ng t
ng t
> < B
> < B
ng
ng
>
>
< Ch
< Ch
t
t
> ::=
> ::=
I
I
|
|
You
You
<
<Đ
Đ
ng t
ng t
> ::=
> ::=
like
like
|
|
see
see
< B
< B
ng
ng
> ::=
> ::=
him
him
|
|
her
her
V
Ví
íd
d
: tên trong ngôn ng
: tên trong ngôn ng
Pascal :
Pascal :
< tên> = < ch
< tên> = < ch
> { < ch
> { < ch
> | < s
> | < s
> }
> }
Ho
Ho
c đ
c đ
nh ngh
nh nghĩ
ĩa đ
a đ
quy :
quy :
< tên> = < ch
< tên> = < ch
> | < tên> < ch
> | < tên> < ch
> | < tên> < s
> | < tên> < s
>
>
< ch
< ch
>
>=
=
A
A
| ... |
| ... |
Z
Z
|
|
a
a
| ... |
| ... |
z
z
< s
< s
>
>=
=
0
0
| ... |
| ... |
9
9
18/18/ 7777
Sơ đ
Sơ đ
c
cú
úph
phá
áp c
p c
a tên
a tên
Tên trong ngôn ng
Tên trong ngôn ng
Pascal c
Pascal có
ó sơ đ
sơ đ
c
cú
úph
phá
áp như sau
p như sau :
:
V
Ví
íd
d
c
cá
ác tên vi
c tên viế
ết đ
t đú
úng trong Pascal :
ng trong Pascal :
Delta, x1, x2, Read, v.v...
Delta, x1, x2, Read, v.v...
Tr
Trá
ái l
i l
i, c
i, cá
ác chu
c chu
i ký t
i ký t
sau đây đ
sau đây đ
u không ph
u không ph
i l
i là
àtên :
tên :
1A
1A,
,
,
,
,
, b
bá
án
nk
kí
ính
nh, v.v...
, v.v...
Tên Ch
Ch
S
S
Ch
Ch
A Z
... a z
...
Ch
0 9
...
S
4
19/19/ 7777
V
Ví
íd
d
m
m
t NNLT đơn gi
t NNLT đơn gi
n
n
Văn ph
Văn ph
m c
m c
a m
a m
t NNLT đơn gi
t NNLT đơn gi
n d
n d
ng EBNF như sau
ng EBNF như sau :
:
< program>
< program> ::=
::= program
program < statement>
< statement> **end
end
< statement>
< statement> ::= < assignment> | < loop>
::= < assignment> | < loop>
< assignment>
< assignment> ::= < identifier> := < expression> ;
::= < identifier> := < expression> ;
< loop>
< loop> :=
:= while
while < expression>
< expression> do
do < statement>
< statement> ++done
done
< expression>
< expression> ::= < value>
::= < value>
| < value> + < value> | < value> < = < value>
| < value> + < value> | < value> < = < value>
< value>
< value> ::= < identifier> | < number>
::= < identifier> | < number>
< identifier>
< identifier> ::= < letter>
::= < letter>
| < identifier> < letter> | < identifier> < digit>
| < identifier> < letter> | < identifier> < digit>
< letter>
< letter> ::=
::=
A
A
| ... |
| ... |
Z
Z
|
|
a
a
| ... |
| ... |
z
z
< digit>
< digit> ::=
::=
0
0
| ...
| ... |
|
9
9
< number>
< number> ::= < digit> | < number> < digit>
::= < digit> | < number> < digit>
20/20/ 7777
L
L
p tr
p trì
ình theo c
nh theo cú
úph
phá
áp văn ph
p văn ph
m
m
M
M
t câu, t
t câu, t
c l
c là
àm
m
t chương tr
t chương trì
ình đơn gi
nh đơn gi
n, ch
n, ch
ng h
ng h
n :
n :
program program n := 1 ; n := 1 ; w hilewhile n < = 10 n < = 10 dodo n := n + 1 ; n := n + 1 ; done enddone end
đư
đư
c s
c s
n sinh t
n sinh t
văn ph
văn ph
m đã cho nh
m đã cho nh
á
áp d
p d
ng c
ng cú
úphphááp văn php văn phm m như sau
như sau :
:
< program> =
< program> = program
program < statement> *
< statement> * end
end
program
program < statement> < statement>
< statement> < statement> end
end
program
program < assignment> < loop>
< assignment> < loop> end
end
program
program < identifier> : = < expression> ;
< identifier> : = < expression> ;
while
while < expression>
< expression> do
do < statement > +
< statement> + done end
done end
program
program n : = < value> ;
n : = < value> ;
while
while < value> < = < value>
< value> < = < value> do
do < statement>
< statement> done
done end
end
program
program n : = < number> ;
n : = < number> ;
while
while < identif ier> < = < number>
< identifier> < = < number> do
do < assignment>
< assignment> done end
done end
program
program n : = 1 ;
n : = 1 ; w hile
while n < = 10
n < = 10 do
do < ident ifier> := < expression> ;
< identifier> := < expression> ; done
done
end
end
program
program n : = 1 ;
n : = 1 ; w hile
while n < = 10
n < = 10 do
do n := < value> + < value> ;
n : = < value> + < value> ; done end
done end
program
program n : = 1 ;
n : = 1 ;
while
while n < = 10
n < = 10 do
do n := < identifier > + < number> ;
n : = < identifier> + < number> ; done end
done end
program
program n : = 1 ;
n : = 1 ; w hile
while n < = 10
n < = 10 do
do n := n + 1 ;
n : = n + 1 ; done end
done end
21/21/ 7777
Quan ni
Quan ni
m m
m m
t chương tr
t chương trì
ình
nh l
là
àcâu
câu
C
Có
óth
th
xem chương tr
xem chương trì
ình v
nh v
a r
a r
i như l
i như là
àm
m
t câu trên m
t câu trên m
t b
t b
ng
ng
ch
ch
tu
tu
ý, ch
ý, ch
ng h
ng h
n :
n :
program
program n : = 1 ;
n : = 1 ; while
while n < = 10
n < = 10 do
do n := n + 1 ;
n := n + 1 ; done end
done end
a
a
ab
b
bc
c
cd
d
de
e
ef
f
fg
g
gh
h
h
i
i
ij
j
jk
k
k
s
s
s
22/22/ 7777
Nh
Nh
n x
n xé
ét
t
Ta đã l
Ta đã là
àm quen v
m quen v
i hai phương ph
i hai phương phá
áp :
p :
S
S
d
d
ng văn ph
ng văn ph
m đ
m đ
l
l
p tr
p trì
ình (t
nh (t
o ra câu c
o ra câu c
a ngôn ng
a ngôn ng
)
)
v
và
àm
m
t tr
t trì
ình biên d
nh biên d
ch đ
ch đ
phân t
phân tí
ích c
ch cú
úph
phá
áp,
p,
biên d
biên d
ch th
ch thà
ành tr
nh trì
ình kh
nh kh
thi
thi
S
S
d
d
ng ôtôm
ng ôtômá
át đ
t đ
phân t
phân tí
ích m
ch m
t câu c
t câu c
a ngôn ng
a ngôn ng
v
và
àth
th
a nh
a nh
n câu khi qu
n câu khi quá
átr
trì
ình đo
nh đoá
án nh
n nh
n l
n là
àth
thà
ành công
nh công
Hai phương ph
Hai phương phá
áp n
p nà
ày b
y b
sung cho nhau v
sung cho nhau và
à thông thư
thông thư
ng,
ng,
ngư
ngư
i ta s
i ta s
d
d
ng c
ng c
hai d
hai d
ng th
ng th
c
c văn ph
văn ph
m
m v
và
àôtôm
ôtômá
át
t
C
Có
ós
s
tương
tương
ng gi
ng gi
a mô t
a mô t
s
s
n sinh v
n sinh và
àmô t
mô t
phân t
phân t í
ích,
ch,
ngh
nghĩ
ĩa l
a là
àc
có
óth
th
bi
biế
ến đ
n đ
i m
i m
t mô t
t mô t
phân t
phân t í
ích (m
ch (m
t ôtôm
t ôtômá
át h
t h
u h
u h
n)
n)
th
thà
ành m
nh m
t mô t
t mô t
s
s
n sinh v
n sinh và
à ngư
ngư
c l
c l
i
i
Lý thuy
Lý thuyế
ết NN h
t NN hì
ình th
nh th
c chưa mô t
c chưa mô t
đ
đ
y đ
y đ
c
cá
ác NN t
c NN t
nhiên
nhiên
(ti
(tiế
ếng Anh, ti
ng Anh, tiế
ếng Ph
ng Phá
áp, ti
p, tiế
ếng Vi
ng Vi
t...)
t...) nhưng mô t
nhưng mô t
v
và
àphân t
phân t í
ích
ch
đ
đ
y đ
y đ
c
cá
ác NNLT v
c NNLT và
à đư
đư
c
c á
áp d
p d
ng r
ng r
ng rãi trong Tin h
ng rãi trong Tin h
c
c
23/23/ 7777
Ho
Ho
t đ
t đ
ng c
ng c
a văn ph
a văn ph
m
m
C
Cá
ác quy t
c quy t
c đ
c đ
s
s
n sinh câu trên m
n sinh câu trên m
t b
t b
ng ch
ng ch
đã cho còn
đã cho còn
đư
đư
c g
c g
i l
i là
àvăn ph
văn ph
m
mhay
hay quy t
quy t
c vi
c vi
ế
ế
t l
t l
i
i(Rewriting Rules)
(Rewriting Rules)
M
M
i quy t
i quy t
c ch
c ch
ra m
ra m
t dãy c
t dãy cá
ác hi
c hi
u (Symbols)
u (Symbols)
c
có
óth
th
đư
đư
c thay th
c thay thế
ếb
b
i m
i m
t dãy c
t dãy cá
ác hi
c hi
u kh
u khá
ác
c
Nh
Nh
ng ký hi
ng ký hi
u c
u có
óth
th
đư
đư
c thay th
c thay thế
ếb
b
i m
i m
t y
t y
c
cá
ác hi
c hi
u kh
u khá
ác đgl c
c đgl cá
ác
c ký hi
hi
u s
u s
n sinh,
n sinh, hay
hay chưa k
chưa kế
ết th
t thú
úc
c
Đ
Đ
nh
nh
n đư
n đư
c m
c m
t câu n
t câu nà
ào đ
o đó
ó, n
, ngư
gư
i ta ti
i ta tiế
ến h
n hà
ành như sau
nh như sau :
:
Xu
Xu
t ph
t phá
át t
t t
m
m
t ký t
t ký t
đ
đ
c bi
c bi
t, g
t, g
i l
i là
àt
t
đ
đ
u
u(Start Symbol),
(Start Symbol),
r
r
i
i á
áp d
p d
ng l
ng l
n lư
n lư
t c
t cá
ác quy t
c quy t
c c
c c
a văn ph
a văn ph
m
m
Khi không còn c
Khi không còn có
óth
th
thay th
thay thế
ếc
cá
ác hi
c hi
u b
u b
i c
i cá
ác quy t
c quy t
c c
c c
a
a
văn ph
văn ph
m, ta nh
m, ta nh
n đư
n đư
c câu ch
c câu ch
g
g
m nh
m nh
ng ký hi
ng hi
u c
u c
a
a
đã
đã
cho,
cho, n đgl
n đgl c
cá
ác hi
c hi
u k
u kế
ết th
t thú
úc
c
24/24/ 7777
Đ
Đ
nh ngh
nh nghĩ
ĩa h
a hì
ình th
nh th
c văn ph
c văn ph
m
m
M
M
t văn ph
t văn ph
m l
m là
àm
m
t b
t b
b
b
n G = (N,
n G = (N,
, R
, R, S
, S) t
) t rong đ
rong đó
ó:
:
N l
N là
àt
t
p h
p h
p h
p h
u h
u h
n c
n cá
ác t
c t
không k
không kế
ết th
t thú
úc (
c (Non
Non-
-Terminal
Terminal
Symbols)
Symbols)
N còn đư
N còn đư
c g
c g
i l
i là
àc
cá
ác bi
c biế
ến, ch
n, ch
xu
xu
t hi
t hi
n trong qu
n trong quá
átr
trì
ình
nh
s
s
n sinh câu v
n sinh câu và
àkhông xu
không xu
t hi
t hi
n trong c
n trong cá
ác câu đã đư
c câu đã đư
c
c
văn ph
văn ph
m sinh ra
m sinh ra
l
là
àt
t
p h
p h
p h
p h
u h
u h
n c
n cá
ác t
c t
k
kế
ết th
t thú
úc, hay ký t
c, hay ký t
cu
cu
i
i
(Terminal Symbols),
(Terminal Symbols),
N,
N, hay N
hay N
=
=
Ngư
Ngư
i ta đ
i ta đ
nh ngh
nh nghĩ
ĩa b
a b
ng ch
ng ch
V = N
V = N
R
R
(V
(V++
V
V**) l
) là
àt
t
p h
p h
u h
u h
n c
n cá
ác quy t
c quy t
c (Rules), hay còn g
c (Rules), hay còn g
i
i
l
là
àc
cá
ác s
c s
n xu
n xu
t (Productions), ch
t (Productions), chí
ính l
nh là
àc
cá
ác quy t
c quy t
c vi
c viế
ết l
t l
i v
i v
a
a
n
nó
ói
i
trên
trên, t
, t
ng c
ng có
ód
d
ng (
ng (
,
,
), hay
), hay
S
S
N l
N là
à t
t
đ
đ
u (Start Symbol)
u (Start Symbol)
5
25/25/ 7777
Ý ngh
Ý nghĩ
ĩa c
a c
a c
a cá
ác s
c s
n xu
n xu
t
t
M
M
i s
i s
n xu
n xu
t d
t d
ng (
ng (
,
,
) cho bi
) cho biế
ết :
t :
Ph
Ph
n t
n t
bên tr
bên trá
ái (
i (
V
V++) c
) c
a s
a s
n xu
n xu
t
t
đư
đư
c thay th
c thay thế
ếb
b
i ph
i ph
n t
n t
bên ph
bên ph
i (
i (
V
V**)
)
T
T
S, b
S, b
t đ
t đ
u qu
u quá
átr
trì
ình s
nh s
n sinh câu b
n sinh câu b
ng c
ng cá
ách :
ch :
Á
Áp d
p d
ng s
ng s
n xu
n xu
t đ
t đ
u tiên l
u tiên là
àS
S
Sau đ
Sau đó
ót
tì
ìm trong
m trong
c
cá
ác ph
c ph
n câu
n câu u
u
V
V+ + c
có
óch
ch
a bi
a biế
ến X
n X
N
N
đ
đ
á
áp d
p d
ng tu
ng tu
ý c
ý cá
ác s
c s
n xu
n xu
t
t u
u
v
v
Th
Th
c hi
c hi
n m
n m
t c
t cá
ách đ
ch đ
quy cho đ
quy cho đế
ến khi nh
n khi nh
n đư
n đư
c câu w
c câu w
ch
ch
ch
ch
a c
a cá
ác hi
c hi
u a
u a
, hay n
, hay nó
ói c
i cá
ách kh
ch khá
ác,
c, w
w
**
Thông thư
Thông thư
ng, n
ng, n
i ta t
i ta tì
ìm c
m cá
ác ph
c ph
n câu
n câu u
u đ
đ
á
áp d
p d
ng c
ng cá
ác
c
s
s
n xu
n xu
t l
t l
n lư
n lư
t t
t t
tr
trá
ái qua ph
i qua ph
i
i
26/26/ 7777
M
M
t s
t s
quy ư
quy ư
c
c
Sau đây l
Sau đây là
àm
m
t s
t s
quy ư
quy ư
c khi mô t
c khi mô t
văn ph
văn ph
m G :
m G :
C
Cá
ác bi
c biế
ến A, B, C..., X, Y...
n A, B, C..., X, Y...
N = V
N = V
C
Cá
ác t
c t
thu
thu
c
c
đư
đư
c bi
c bi
u di
u di
n b
n b
i
i a
a,
, b
b, c...
, c...
C
Cá
ác quy t
c quy t
c, hay s
c, hay s
n xu
n xu
t
t
,
,
)
)
R
R,
, đư
đư
c vi
c viế
ết d
t d
ng :
ng :
hay
hay
GG
n
nế
ếu mu
u mu
n ch
n ch
đ
đ
nh đ
nh đó
ól
là
às
s
n xu
n xu
t thu
t thu
c văn ph
c văn ph
m G
m G
khi l
khi là
àm vi
m vi
c c
c cù
ùng l
ng lú
úc v
c v
i nhi
i nhi
u văn ph
u văn ph
m kh
m khá
ác nhau
c nhau
t
t
đ
đ
u luôn luôn bi
u luôn luôn bi
u di
u di
n b
n b
i S
i S
C
Cá
ác câu r
c câu r
ng đư
ng đư
c bi
c bi
u di
u di
n b
n b
i
i
27/27/ 7777
V
Ví
íd
d
Cho văn ph
Cho văn ph
m G = (V,
m G = (V,
, R, S) v
, R, S) v
i :
i :
N = { S, A, B }
N = { S, A, B }
= {
= { a
a,
, b
b} , S l
} , S là
à t
t
đ
đ
u.
u.
R = { S
R = { S
A, S
A, S
B, B
B, B
bB, B
bB, B
, A
, A
aA, A
aA, A
}
}
Đ
Đ
cho g
cho g
n, khi mô t
n, khi mô t
m
m
t văn ph
t văn ph
m,
m, ngư
ngư
i ta t
i ta t
ng nh
ng nhó
óm
m
c
cá
ác quy t
c quy t
c c
c có
óc
cù
ùng ký t
ng ký t
bên tr
bên trá
ái v
i v
i nhau :
i nhau :
S
S
A | B
A | B B
B
bB |
bB |
A
A
aA |
aA |
Thay v
Thay vì
ìli
li
t kê h
t kê hế
ết c
t cá
ác th
c thà
ành ph
nh ph
n c
n c
a văn ph
a văn ph
m G,
m G,
ngư
ngư
i ta ch
i ta ch
li
li
t kê c
t kê cá
ác quy t
c quy t
c R c
c R c
a văn ph
a văn ph
m m
m mà
àthôi
thôi
Ch
Ch
ng h
ng h
n văn ph
n văn ph
m G
m G
trên ch
trên ch
c
c
n li
n li
t kê c
t kê cá
ác quy t
c quy t
c :
c :
G { S
G { S
A | B ; B
A | B ; B
bB |
bB |
;
; A
A
aA |
aA |
}
}
Bài tp: Mô tVP G bng cách thay thếcác ký hiu quy ưc cho các
đơn v tvng trong ví d NNLT đơn gin trưc đây ?
B
Bà
ài t
i t
p
p:
:t
t
VP G b
VP G b
ng c
ng cá
ách thay th
ch thay thế
ếc
cá
ác hi
c hi
u quy ư
u quy ư
c cho c
c cho cá
ác
c
đơn v
đơn v
t
t
v
v
ng trong v
ng trong ví
íd
d
NNLT đơn gi
NNLT đơn gi
n trư
n trư
c đây
c đây ?
?28/28/ 7777
Bài tp:
Tìm cách áp dng ln lưt các sn xut đ sinh ra câu bbbbb ?
Tìm cách biu din các quy tc to tên trong NNLT thành VP và cho ví dsinh câu
B
Bà
ài t
i t
p
p:
:
T
Tì
ìm c
m cá
ách
ch á
áp d
p d
ng l
ng l
n lư
n lư
t c
t cá
ác s
c s
n xu
n xu
t đ
t đ
sinh ra câu bbbbb ?
sinh ra câu bbbbb ?
T
Tì
ìm c
m cá
ách bi
ch bi
u di
u di
n c
n cá
ác quy t
c quy t
c t
c t
o tên trong NNLT th
o tên trong NNLT thà
ành VP v
nh VP và
àcho v
cho ví
íd
d
sinh câu
sinh câu
S
S
n sinh câu trong G
n sinh câu trong G
Cho G { S
Cho G { S
A | B ; B
A | B ; B
bB |
bB |
;
; A
A
aA |
aA |
}
}
B
B
ng c
ng cá
ách
ch á
áp d
p d
ng liên ti
ng liên tiế
ếp c
p cá
ác s
c s
n xu
n xu
t trong R, ta nh
t trong R, ta nh
n
n
đư
đư
c c
c cá
ác câu s
c câu s
n sinh b
n sinh b
i văn ph
i văn ph
m G
m G
V
Ví
íd
d
,
, aaaa
aaaa l
là
àm
m
t câu do G sinh ra b
t câu do G sinh ra b
ng c
ng cá
ách
ch á
áp d
p d
ng l
ng l
n
n
t c
t cá
ác s
c s
n xu
n xu
t :
t :
S
S
A
AÁ
Áp d
p d
ng
ng S
S
A
A
aA
aA
A
A
aA
aA
aaA
aaA
A
A
aA
aA
aaaA
aaaA
A
A
aA
aA
aaaaA
aaaaA
A
A
aA
aA
aaaa
aaaa
A
A
S
S
A
A
a
aA
A
a
aA
A
a
aA
A
a
aA
A
29/29/ 7777
Ph
Phé
ép suy d
p suy d
n m
n m
t bư
t bư
c trong G
c trong G
Cho văn ph
Cho văn ph
m G = (N,
m G = (N,
, R, S),
, R, S),
u
u
V
V++, v
, v
V
V** đgl c
đgl cá
ác d
c d
ng câu
ng câu
Câu v đư
Câu v đư
c s
c s
n sinh t
n sinh t
u b
u b
ng
ng m
m
t bư
t bư
c suy d
c suy d
n
n trong G
trong G
(derives
(derives v from u in one step)
v from u in one step) đư
đư
c bi
c bi
u di
u di
n b
n b
i :
i :
u
u
GGv
vn
n
u
u(n
(nế
ếu v
u và
àch
ch
n
nế
ếu) :
u) :
u = xu
u = xu
y
yu g
u g
m 3 ph
m 3 ph
n x, u
n x, u
v
và
ày, x v
y, x và
ày c
y có
óth
th
r
r
ng
ng
v = xv
v = xv
y
yv g
v g
m 3 ph
m 3 ph
n x, v
n x, v
v
và
ày
y
u
u
v
v
l
là
àm
m
t sx c
t sx c
a G
a G
30/30/ 7777
Ph
Phé
ép suy d
p suy d
n nhi
n nhi
u bư
u bư
c trong G
c trong G
Cho văn ph
Cho văn ph
m G = (N,
m G = (N,
, R, S),
, R, S),
u
u
V
V++, v
, v
V
V** đgl c
đgl cá
ác d
c d
ng câu
ng câu
Câu v đư
Câu v đư
c s
c s
n sinh t
n sinh t
u b
u b
ng
ng nhi
nhi
u bư
u bư
c suy d
c suy d
n
ntrong G
trong G
(derives v from u in several steps)
(derives v from u in several steps) đư
đư
c bi
c bi
u di
u di
n b
n b
i :
i :
u
u
**GGv
vn
n
u
u:
:
k
k
0 v
0 và
àv
v00... v
... vkk
V
V++sao cho :
sao cho :
u = v
u = v00
v = v
v = vkk
v
vii
GGv
vi+ 1i+ 1 v
v
i
i
i, 0
i, 0
i
i
k
k-
-1
1
C
Có
óth
th
vi
viế
ết đ
t đ
y đ
y đ
khi k nh
khi k nh
:
:
u
u
**GGv
vn
n
u
uu =
u = v
v00
GGv
v11
GGv
v22
GG...
...
GGv
vk k = v
= v