You are on page 1of 42

Cu phap chng trinh

Cu phap v ng nghia

Cu phap cua ngn ng lp trinh: cu truc


hinh thc cua chng trinh nh th no?

Cu phap c inh nghia bng mt vn pham


hinh thc

Ng nghia cua ngn ng lp trinh: chng


trinh lm gi, hoat ng nh th no?

Ng nghia chng trinh kho inh nghia hn cu


phap.
2

Ni dung
Vn pham v vi du v cy cu phap
BNF v inh nghia cy cu phap
Xy dng vn pham
Cu truc cu v t vng
Cac dang vn pham khac

Vn pham ting Anh


Mt cu l mt cu truc:
danh ng + ng t +
danh ng.

<S> ::= <NP> <V> <NP>

Mt danh ng l ...

<NP> ::= <A> <N>

Mt ng t l

<V> ::= loves | hates|eats

Mt mao t l

<A> ::= a | the

Mt danh t l ...

<N> ::= dog | cat | rat

Vn pham hoat ng nh th no
Vn pham l mt tp hp cac qui tc chi ra
cach thc xac inh mt cy cu phap
Cho <S> l gc cua cy
Vn pham xac inh cach thc m cac nut
con co th c thm vo cy
Nh vy, qui tc

<S> ::= <NP> <V> <NP>

cho bit co th thm <NP>, <V>, v <NP>,


theo trt t trn lm cac nut con cua <S>
5

Cy cu phap
<S>
<NP> <V> <NP>
<A> <N>
the dog

loves <A> <N>


the cat

Vn pham ngn ng lp trinh


<exp> ::= <exp> + <exp> | <exp> * <exp> | ( <exp> )
| a | b | c

Mt biu thc co th l tng cua hai biu


thc, hoc tich cua hai biu thc, hoc mt
biu thc trong cp ngoc n
Hoc co th l mt trong cac bin a, b hay
c

Cy cu phap
<exp>
( <exp> )

((a+b)*c)

<exp> * <exp>
( <exp> )

<exp> + <exp>
a

Tng quan
Vn pham v vi du cy cu phap
BNF v inh nghia cy cu phap
Xy dng vn pham
Cu truc cu v t vng
Cac dang vn pham khac

CFG Context Free Grammars (1950)


-

c pht trin bi Noam Chomsky gia thp nin


1950
Language generators : miu t c php cua ngn ng
t nhin
CFG l mt vn pham hnh thc m trong o cc lut
l dang V w

10

BNF - Backus Normal Form (1959)

c tao ra bi John Backus miu t cho Algol 58


BNF tng ng vi CFG (context-free grammars)
Meta language l mt dang ngn ng dng miu t
cho mt ngn ng khc

11

Ky hiu bt u
<S> ::= <NP> <V> <NP>

Mt lut sinh
<NP> ::= <A> <N>
<V> ::= loves | hates|eats

<A> ::= a | the


Cac ky hiu khng kt thuc

<N> ::= dog | cat | rat


tokens
12

inh nghia vn pham BNF

Mt vn pham BNF gm co 4 phn:

M tp hp cac tokens
Mt tp hp cac ky hiu khng kt thuc
Mt ky hiu bt u
Mt tp cac lut sinh (productions)

13

inh nghia vn pham BNF

Cac tokens l nhng n vi nho nht cua cu


phap:

Token co th l mt chui gm mt hay nhiu


ky t
Token l nguyn t: khng phn tach nho hn

Cac ky hiu khng kt thuc:

Cac ky hiu khng kt thuc l cac chui trong


cp ngoc <>, chng han <NP>
Vn pham xac inh cach thc m rng cac ky
hiu khng kt thuc thnh cac token
14

inh nghia vn pham BNF


Ky hiu bt u l mt ky hiu khng kt
thuc c bit, dung lm nut gc cua cy
phn tich
Cac lut sinh la cac lut xy dng cy cu
phap
Mi lut sinh co mt phn bn trai, mt b
tach ::=, v mt phn bn phi

Phn bn trai l mt n ky hiu khng kt thuc

15

inh nghia vn pham BNF

Phn bn phi l mt day, mi thnh phn cua


day ny co th l mt token hay mt ky hiu
khng kt thuc

Mi lut sinh xac inh mt kh nng xy


dng cy cu phap.

16

inh nghia vn pham BNF


Khi co nhiu hn mt lut sinh co cung mt
phn bn trai ging nhau thi co th dung
dang thu gon
Vn pham BNF co th t phn bn trai, b
tach ::=, v mt danh sach cac phn bn
phi mi thnh phn trong danh sach o
cach nhau bi ky hiu |

17

Vi du
<exp> ::= <exp> + <exp> | <exp> * <exp> | ( <exp> )
| a | b | c

Chu y rng co 6 lut sinh trong vn pham trn


Vn pham trn tng ng vi:
<exp> ::= <exp> + <exp>
<exp> ::= <exp> * <exp>
<exp> ::= ( <exp> )
<exp> ::= a
<exp> ::= b
<exp> ::= c
18

Empty
Ky hiu khng kt thuc c bit <empty>
c dung chi ra l vn pham khng sn
sinh bt c gi vi tri no xut hin
Vi du, vn pham sau inh nghia mt cu
truc if-then vi mt phn else tuy chon:

<if-stmt> ::= if <expr> then <stmt> <else-part>


<else-part> ::= else <stmt> | <empty>

19

Cy cu phap
xy dng mt cy cu phap, thit lp ky
hiu bt u nut gc
Thm cac ky hiu khng kt thuc vo, da
trn cac lut sinh trong vn pham
Kt thuc khi tt c cac nut la l token
oc cac nut la t trai sang phi, y chinh
l chui phat sinh t cy cu phap

20

ng dung
<exp> ::= <exp> + <exp> | <exp> * <exp> | ( <exp> )
|a|b|c

Ve cy phn tich cu phap cho cac chui sau:


a+b
a*b+c
(a+b)
(a+(b))

21

inh nghia ngn ng


Vn pham c dung inh nghia cu phap
cua cac ngn ng lp trinh
Ngn ng c inh nghia bng mt vn
pham l mt tp cac chui co th phat sinh
t mt cy cu phap no o cua vn pham

22

Ni dung
Vn pham v vi du cy cu phap
BNF v inh nghia cy cu phap
Xy dng vn pham
Cu truc cu v t vng
Cac dang vn pham khac

23

Xy dng vn pham
Vi du: cac khai bao trong ngn ng Java:
tn kiu, danh sach cac bin cach nhau bi
du phy, v mt du chm phy
Mi bin co th c theo sau bi mt b
khi tao:

float a;
boolean a,b,c;
int a=1, b, c=1+2;
24

Vi du (tip theo)

Nu cha k n b khi tao:

<var-dec> ::= <type-name> <declarator-list> ;

Cac kiu d liu c bn:

<type-name> ::= boolean | byte | short | int


| long | char | float | double
<declarator-list> ::= <declarator>
| <declarator> , <declarator-list>
<declarator> ::= <variable-name>
| <variable-name> = <expr>
25

Ni dung
Vn pham v vi du cy cu phap
BNF v inh nghia cy cu phap
Xy dng vn pham
Cu truc cu v t vng
Cac dang vn pham khac

26

Token
Cac token l nhng mu vn bn trong
chng trinh m chung khng th c chia
nho hn na
inh danh (count), t khoa (if), toan t
(==), hng s (123.4), etc.
Chng trinh may tinh l mt day cac ky t
Lm th no mt day cac ky t co th phn
tich thnh cac token?

Chapter Two

Modern Programming Languages

27

Cu truc t vng v cu truc cu


Vn pham inh nghia cu truc cu: chng
trinh c xy dng nh th no t mt
chui cac token ?
Vn pham cung inh nghia cu truc t
vng: mt tp tin vn bn c phn tach
thnh cac token nh th no?

28

Mt vn pham cho cu truc t


vng v cu truc cu
Theo quan im ny, s dung mt vn
pham chung cho cu truc cu v cu truc t
Khng hiu qu trong thc t: cac khong
trng hay cac ghi chu lm cho vn pham
kho oc v rm r

<if-stmt> ::= if <white-space> <expr> <white-space>


then <white-space>
<stmt> <white-space> <else-part>
<else-part> ::= else <white-space> <stmt> | <empty>
29

Hai vn pham tach bit

Thng thng, cac ngn ng s dung hai


vn pham tach bit

Mt vn pham chi ra cach thc cu truc cac


token t mt vn bn cac ky t
Mt vn pham chi ra cach xy dng cy cu
phap t mt day cac token

<program-file> ::= <end-of-file> | <element> <program-file>


<element> ::= <token> | <one-white-space> | <comment>
<one-white-space> ::= <space> | <tab> | <end-of-line>
<token> ::= <identifier> | <operator> | <constant> |
30

Lu y

Cac ngn ng lp trinh trc y thng


khng tach bach cu truc t vng vi cu
truc cu

Trong cac th h Fortran v Algol u tin,


khong trng co th bt ky vi tri no, ngay c
gia mt t khoa
Cac ngn ng khac nh PL/I cho phep cac t
khoa c dung lm cac inh danh

31

Lu y

Mt s ngn ng co inh dang c inh cho


cu truc t vng theo cac vi tri ct

Mi dong mt phat biu


Mt vi ct u tin dnh cho nhan cua phat
biu

Vi du: mt vi th h u cua Fortran,


Cobol, v Basic
Hu ht cac ngn ng lp trinh hin nay co
inh dang t do cho cu truc t vng

32

Ni dung
Vn pham v vi du cy cu phap
BNF v inh nghia cy cu phap
Xy dng vn pham
Cu truc cu v t vng
Cac dang vn pham khac

33

Cac dang vn pham khac


Cac bin th cua BNF
Cac bin th cua EBNF
Cac s cu phap

34

Cac bin th cua BNF


Mt s dung hay = thay vi ::=
Mt s cho phep dung cp du nhay n
bao cac tokens, vi du phn bit | nh l
mt token vi | nh l meta-symbol

35

Cac bin th cua BNF

Cu phap b sung cho BNF:

{x} nghia l khng hay lp lai x nhiu ln


[x] co nghia x l tuy chon (i.e. x | <empty>)
() cho nhom
| chon mt trong s cac chon la
Cp du ngoc kep bao ky hiu phn bit vi
cac meta-symbols

36

EBNF Examples
<if-stmt> ::= if <expr> then <stmt> [else <stmt>]
<stmt-list> ::= {<stmt> ;}
<thing-list> ::= { (<stmt> | <declaration>) ;}

Cac m rng cua BNF c goi l Extended


BNF: EBNF
Co nhiu bin th cua BNF

37

Cac s cu phap
Vn pham EBNF
Mt lut sinh n gin l mt chui cac ky
hiu kt thuc v khng kt thuc:

<if-stmt> ::= if <expr> then <stmt> else <stmt>


if-stmt
if

expr

then

stmt

else

stmt

38

ng vong

<if-stmt> ::= if <expr> then <stmt> [else <stmt>]


if-stmt
if

expr

then

stmt

else

stmt

39

Re nhanh
<exp> ::= <exp> + <exp> | <exp> * <exp> | ( <exp> )
|a|b|c

exp

exp

exp

exp

exp

exp

a
b
c
40

Vong lp

<exp> ::= <addend> {+ <addend>}

exp
addend
+

41

Vi du
WhileStatement:
while ( Expression ) Statement
DoStatement:
do Statement while ( Expression ) ;
ForStatement:
for ( ForInitopt ; Expressionopt ; ForUpdateopt)
Statement
[The Java Language Specification,
James Gosling et. al.]
42

You might also like