21/1/2010
1
Bài 5
B
p
h
â
n
t
í
c
h
t
v
n
g
1
B
phân
tích
t
vng
Nhim v ca b phân tích t vng
Phát hin các t t
2
B qua các ký t không cn thiết
Khong trng
Du tab
Ký t xung dòng (CR,LF)
Chú thích
T t có cu trúc cú pháp
3
Ti sao không x lý các lut này trong giai
đon phân tích cú pháp ?
X lý các lut t vng trong b phân tích cú pháp ?
Làm cho b phân tích cú pháp tr nên quá
phc tp
Phân bittênvàtkhoá
4
Phân
bit
tên
t
khoá
Phi có nhng lut phc tp để xchui
các ký t không cn thiết (khong trng, tab,
chú thích . . . .)
21/1/2010
2
Các t t ca KPL
S nguyên
Định danh
T khóa: begin,end, if,then, while, do, call, const, var, procedure,
program,type, function,of,integer,char,else,for, to,array
Hng ký t
D t á
5
D
u p
p
t
o
á
n:
s hc
+ - */
so sánh
= != < > <= >=
Du phân cách
( ) . : ; (. .)
Du phép gán :=
Ôtômat hu hn ca b PTTV
6
Sau mi t t được nhn biết, b t vng li quay li trng thái s0
X lý các loi t t
switch(state)
{
case 0 // B qua khong trng
case 1// X các phép toán quan h
7
case
1//
X
các
phép
toán
quan
h
case 10
// X lý tên
case 13
// X lý s
. . .
}
Các phép toán quan h
case 0 : c= nextchar();
if(c==blank || c= =tab || c= =newline ){
state = 0;
lexeme_beginning++;
//chuyn con tr đến đầu t t)
}
case 1:
8
if(c= = '<') state = 1a;
else if (c= = '=') state = 4;
else if (c= = ‘!') state = 5;
else if (c= = ‘>') state = 7;
else state =fail();break;
case 1a: c:=nextchar();
if (c= = '=') state = 2;
Else state=3;
case 2: return (leq)
21/1/2010
3
S nguyên
case 13: c = nextchar();
if(isdigit(c)) state = 14;
case 14: c
=
nextchar();
9
case
14:
c nextchar();
if(isdigit(c)) state = 14;
else state = 15; break;
case 15 : retract(1);
install_num();
return(num);
Định danh
case 10:
c = nextchar();
if(isletter(c)) state =11;
else state = fail; break;
1 0
case 11:
c = nextchar();
if(isletter(c)) state =11;
else if (isdigit(c)) state = 11;
else state = 12; break;
case 12: retract(1) ;
install_id();
return (gettoken());
Các thông tin trong bng ký hiu
Tên: xâu ký t
Thuc tính: tên kiu,tên biến, tên th tc,
tên hn
g
. . .
1 1
g
Kiu d liu
Phm vi s dng
Địa ch vùng nh,kích c vùng nh
. . .
X lý tên / t khoá
1 2
21/1/2010
4
Cu trúc d liu
enum symbol
{
nul, ident, number,
plus,minus, times, slash,
eql,neq, lss,leq,grt,geq,
1 3
eql,neq,
lss,leq,grt,geq,
lparen, rparen, comma, semicolon, period, becomes,
quote, colon, lsquare,rsquare,
beginsym, endsym, ifsym,thensym, whilesym,dosym,
callsym,constsym,varsym,procsym,programsym,typesym,
funcsym,ofsym,integersym,charsym,elsesym,forsym,
tosym, arraysym
};