Giảng viên hướng dẫn: Phan Thị Thu HồngCác biểu thức trong các phát biểu gồm các phép toán logic Not, And, Or và các phép so sánh.. Các toán hạng gồm các định danh, hằng số thực, nguy
Trang 1Giảng viên hướng dẫn: Phan Thị Thu Hồng
Các biểu thức trong các phát biểu gồm các phép toán logic
Not, And, Or và các phép so sánh Các toán hạng gồm các định danh, hằng số thực, nguyên, true, false (kể cả biểu thức) Độ ưu tiên các phép toán tương tự Pascal
Thực hiện chuyển đổi kiểu từ nguyên sang thực khi cần thiết
A Tìm hiểu những nội dung liên quan đến yêu cầu đề bài
I Phát biểu gán, repeat until trong pascal
Trang 22 Phát biểu repeat…until
Câu lệnh REPEAT UNTIL dùng trong các trường hợp khi biến điều khiển không có kiểu rời rạc và đặc biệt trong các trường hợp số lần lặp không biết trước Repeat
1 1 AND 0=0 1 OR 0=1 1 XOR 0=1
0 AND 1=0 0 OR 1=1 0 XOR 1=1
0 AND 0=0 0 OR 0=0 0 XOR 0=0
Trang 3Mỗi số nguyên được biểu diễn trong máy dưới dạng một dãy các bít nhị phân Số kiểu Integer được biểu diễn bằng 16 bit Ví dụ, số 1 và số 2 có biểu diễn trong máy lần lượt là :
Trang 4B Nội dung thực hiện
M Program,ProGram… (‘p’|’P’)(‘r’|’R’)(‘o’|’O’)(‘g’|’G’)(‘a’|’A’)
VAR Var, var , (‘v’|’V’)(‘a’|’A’)(‘r’|’R’)
BEGIN beGin,Begin, (‘b’|’B’)(‘e’|’E’)(‘g’|’G’) (‘i’|’I’)
(‘n’|’N’)
END End,end, eNd, (‘e’|’E’)(‘n’|’N’)(‘d’|’D’)
REPEAT Repeat, RePeat… (‘R’|’r’)(‘e’|’E’)(‘P’|’p’)(‘A’|’a’)(‘t’|’T’)
UNTIL until,Until,UnTil… (‘u’|’U’)(‘n’|’N’)(‘t’|’T’)(‘i’|’I’)(‘l’|’L)
NOT not,Not,… (‘n’|’N’) (‘o’|’O’) (‘t’|’T’)
AND and,And,… (‘a’|’A’) (‘n’|’N’) (‘d’|’D’)
OR or,Or,… (‘o’|’O’) (‘r’|’R’)
TYPE Integer, iNteger, …
Real, rEal, … Boolean, BooLean
(‘i’|’I’)(‘n’|’N’)(‘t’|’T’)(‘e’|’E’)(‘g’|’G’) (‘e’|’E’) (‘r’|’R’) |
(‘r’|’R’)(‘e’|’E’)(‘a’|’A’)(‘l’|’L’) | (‘B’|’b’)(‘O’|’o’)(‘L’|’l’)(‘E’|’e’) (‘A’|’a’)(‘N’|’n’)
Integer Real Boolean
NUMREA
L 1.2, 2E-3 ,0.5e+4 digit
+ digit + | digit + (.digit + |)(‘e’|’E’) (‘+’|’- ‘|)digit + vtrí BDB
Trang 5RPAR ) ‘)’
TRUE True, true, TRUE
FALSE FALSE, False,
Trang 6num → digits optional_fraction optional_exponent
Trang 7return(numreal,vtrí bdb)
digit
other 6 8 8
digit
0
2 7 8
Trang 8>
return(relop, GT) 22
return(relop, EG) return(relop, EQ)
*
Trang 92) Ten -> PROGRAM ID
3)kbao -> Var n_kbao
4)n_kbao -> kbk SEMI n_kbao // a:integer; b:real;
5)kbk -> n_ID CONON TYPE SEMI //a:integer;
6)n_ID -> ID | ID COMA n_ID // a|a,b (truong hop nhieu bien co cung
kieu)
7)Body -> BEGIN n_lenh END
8)n_lenh -> lenh SEMI n_lenh | Ɛ // Thuc hien 1 hoac nhieu lenh | khong co lenh nao
9)lenh -> l_gan
10)lenh -> body
11)lenh -> l_repeat_until
12) l_gan -> ID ASSGN exp SEMI //a:=0;
13) l_repeat_until -> Repeat r_body UNTIL r_until
14) r_until ->LPAR ID RELOP NUM RPAR | LPAR ID RELOP
NUMREAL RPAR | LPAR ID RELOP NUM AND ID RELOP NUM
RPAR | LPAR ID RELOP NUMREAL AND ID RELOP NUMREAL
RPAR | LPAR ID RELOP NUM OR ID RELOP NUM RPAR | LPAR ID RELOP NUMREAL OR ID RELOP NUMREAL RPAR
// (n<=4) | (n<=4.4) | (n> 2 or n<10) | (n> 2 and m<5)
15) r_body -> n_lenh
Trang 1016) exp -> exp OP1 term |exp OP2 term |term
17) term -> factor
18)factor -> ID
19) factor -> NUM
20) factor -> NUMREAL
21) factor -> LPARA exp RPARA //a:=a * (c-d);
22) factor -> OP1 factor // a:= - b;
23) factor -> NOT factor //
24) factor -> TRUE // a:=true
25) factor -> FALSE //a:=false
1.2 Văn phạm sau khi loại bỏ đệ quy trái:
1)S -> ten kbao body DOT
2)ten -> PROGRAM ID
3)kbao -> Var n_kbao
4)n_kbao -> kbk SEMI n_kbao // a:integer; b:real;
5)kbk -> n_ID CONON TYPE SEMI //a:integer;
6)n_ID -> ID | ID COMA n_ID // a|a,b (truong hop nhieu bien co cung
kieu)
7)Body -> BEGIN n_lenh END
8)n_lenh -> lenh SEMI n_lenh | Ɛ // Thuc hien 1 hoac nhieu lenh | khong co lenh nao
9)lenh -> l_gan
Trang 1110)lenh -> body
11)lenh -> l_repeat_until
12) l_gan -> ID ASSGN exp SEMI //a:=0;
13) l_repeat_until -> Repeat r_body UNTIL r_until
14) r_until ->LPAR ID RELOP NUM RPAR | LPAR ID RELOP
NUMREAL RPAR | LPAR ID RELOP NUM AND ID RELOP NUM
RPAR | LPAR ID RELOP NUMREAL AND ID RELOP NUMREAL
RPAR | LPAR ID RELOP NUM OR ID RELOP NUM RPAR | LPAR ID RELOP NUMREAL OR ID RELOP NUMREAL RPAR
// (n<=4) | (n<=4.4) | (n> 2 or n<10) | (n> 2 and m<5)
15) r_body -> n_lenh
16) Exp -> term exp1
17) exp1 -> OP1 term exp1 |Ɛ
18) Exp -> term exp2
19) exp2 -> OP2 term exp2 |Ɛ
20) term -> factor
21)factor -> ID
22) factor -> NUM
23) factor -> NUMREAL
24) factor -> LPAR exp RPAR //a:=a * (c-d);
25) factor -> OP1 factor // a:= - b;
26) exp ->term
Trang 1227) factor -> NOT factor //
Trang 144) FIRST (body) = BEGIN
5) FIRST (n_lenh) =FIRST(r_body)= (ID, BEGIN,REPEAT, Ɛ)
6) FIRST (l_gan) = (ID)
7) FIRST (l_repeat_until) = (REPEAT)
8) FIRST (exp)=FIRST(term)=FIRST(factor)= (ID,NUM, NUMREAL,
LPARA, OP1, NOT, TRUE, FALSE)
9) FIRST(l_until) = (LPAR)
10) FIRST (lenh) = (ID, BEGIN,REPEAT)
11) FIRST (exp1)= (OP1,Ɛ)
12) FIRST (exp2)= (OP2,Ɛ)
Trang 155 Tính FOLLOW của những kí hiệu chưa kết thúc
1) FOLLOW (ten) = FOLLOW (kbao)= FOLLOW (n_kbao)= ($)
2) FOLLOW (body) = (SEMI, END, DOT)
3) FOLLOW(kbk) = FOLLOW (lenh) = FOLLOW (l_gan)= FOLLOW
(l_repeat_until)= FOLLOW (r_until)=(SEMI)
4) FOLLOW (n_ID) = (COMAN)
5) FOLLOW (n_lenh)= ( END, SEMI)
6) FOLLOW (exp)= =(RPARA, SEMI)
7) FOLLOW(term) = FOLLOW(factor) = (LPAR, SEMI, OP1, OP2)
6 Tính action, goto
/* Các luật:
1)S -> Ten kbao body DOT
2)Ten -> PROGRAM ID
3)kbao -> VAR n_kbao
4) n_kbao -> kbk SEMI n_kbao
5) kbk -> n_ID CONON TYPE SEMI
6) n_ID -> ID
7) n_ID ->ID COMA n_ID
8) Body -> BEGIN n_lenh END
Trang 169) n_lenh ->.lenh SEMI n_lenh
10) n_lenh -> Ɛ
11) lenh -> l_gan
12) lenh ->body
13) lenh -> l_repeat_until
14) l_gan -> ID ASSGN exp SEMI
15) l_repeat_until -> Repeat r_body UNTIL r_until
16) r_until ->LPAR ID RELOP NUM RPAR
17) r_until ->LPAR ID RELOP NUMREAL RPAR
18) r_until -> LPAR ID RELOP NUM AND ID RELOP NUM RPAR
19) r_until -> LPAR ID RELOP NUMREAL AND ID RELOP NUMREAL RPAR
20) r_until ->LPAR ID RELOP NUM OR ID RELOP NUM RPAR
21) r_until ->LPAR ID RELOP NUMREAL OR ID RELOP NUMREAL RPAR
22) r_body -> n_lenh
23) exp -> exp OP1 term
24) exp -> exp OP2 term
25) term -> factor
26) factor -> ID
27) factor -> NUM
28) factor -> NUMREAL
Trang 1729) factor -> LPARA exp RPARA
30) factor -> OP1 factor
31) factor -> NOT factor
kbao -> VAR n_kbao
n_kbao -> kbk SEMI n_kbao
kbk -> n_ID CONON TYPE SEMI
n_ID -> ID
n_ID -> ID COMA n_ID
Body -> BEGIN n_lenh END
n_lenh -> lenh SEMI n_lenh | Ɛ
lenh -> l_gan
lenh ->.body
lenh -> l_repeat_until
Trang 18l_gan -> ID ASSGN exp SEMI
l_repeat_until -> Repeat r_body UNTIL r_until
r_until ->.LPAR ID RELOP NUM RPAR
r_until ->.LPAR ID RELOP NUMREAL RPAR
r_until -> LPAR ID RELOP NUM AND ID RELOP NUM RPAR
r_until -> LPAR ID RELOP NUMREAL AND ID RELOP NUMREAL
RPAR
r_until ->.LPAR ID RELOP NUM OR ID RELOP NUM RPAR
r_until ->.LPAR ID RELOP NUMREAL OR ID RELOP NUMREAL
RPAR
r_body -> n_lenh
exp -> exp OP1 term
exp -> exp OP2 term
term -> factor
factor -> ID
factor -> NUM
factor -> NUMREAL
factor -> LPARA exp RPARA
factor -> OP1 factor
factor -> NOT factor
exp ->.term
factor -> FALSE
Trang 19S -> ten Kbao body DOT
Kbao -> VAR n_kbao
* -I021’=goto(I02,kbao)
S -> ten kbao body DOT
body ->.BEGIN n_lenh END
* -I04=goto(I0,VAR)
Kbao ->VAR n_kbao
N_kbao ->.kbk SEMI n_kbao
Kbk -> n_ID CONON TYPE SEMI
Trang 20* -I06= goto (I0, n_ID)
Kbk ->n_ID COMA n_ID
* -I07 = goto (I0, ID)
n_ID ->ID
N_ID -> ID COMA n_ID
L_gan -> ID ASSGN exp SEMI
Factor -> ID
* -I08= goto (I0, BEGIN)
Body -> BEGIN n_lenh END
N_lenh -> lenh SEMI n_lenh
N_lenh -> Ɛ
Lenh -> l_gan
Lenh -> body
Lenh ->.l_repeat_until
L_gan -> ID ASSGN exp SEMI
L_repeat_until -> REPEAT r_body UNTIL r_until
Body ->.BEGIN n_lenh END
Trang 21
* -I09 = goto (I0,lenh)
N_lenh -> lenh SEMI n_lenh
* -I014 = goto (I0, REPEAT)
L_repeat_until -> REPEAT r_body UNTIL r_until
R_body ->.n_lenh
N_lenh -> lenh SEMI n_lenh
N_lenh -> Ɛ
Lenh -> l_gan
Trang 22Lenh -> body
Lenh ->.l_repeat_until
L_gan -> ID ASSGN exp SEMI
L_repeat_until -> REPEAT r_body UNTIL r_until
Body ->.BEGIN n_lenh END
* -I015 = goto (I0, LPAR)
R_until -> LPAR
Factor -> LPAR exp RPAR
exp -> exp OP1 term
exp -> exp OP2 term
factor -> LPARA exp RPARA
factor -> OP1 factor
* -I016 = goto (I0, n_lenh)
Trang 23R_body -> n_lenh.
* -I017 = goto (I0, exp)
Exp ->exp OP1 term
Exp -> exp OP2 term
Trang 24factor -> NUM
factor -> NUMREAL
factor -> LPAR exp RPAR
factor -> OP1 factor
* -I023 =goto (I0, NOT)
Factor -> NOT factor
factor -> ID
factor -> NUM
factor -> NUMREAL
factor -> LPAR exp RPAR
factor -> OP1 factor
Trang 25Program -> kbao body DOT
* -I32 = goto (I03, BEGIN)
Body -> BEGIN n_lenh END
N_lenh -> lenh SEMI n_lenh
N_lenh -> Ɛ
Lenh -> l_gan
Lenh -> body
Lenh ->.l_repeat_until
L_gan -> ID ASSGN exp SEMI
L_repeat_until -> REPEAT r_body UNTIL r_until
Body ->.BEGIN n_lenh END
* -I41 = goto (I04, n_kbao)
Kbao -> VAR n_kbao
* -I42 =goto (I04, kbk)
N_kbao -> kbk SEMI n_kbao
* -I43 =goto (I04, n_ID)
Kbk -> nID CONON TYPE SEMI
Trang 26* -Body -> BEGIN n_lenh END
* -I87 = goto (I08, ID)
L_gan -> ID ASSGN exp SEMI
Trang 27
* -I89 = goto (I08, REPAET) =I014
* -I810 = goto (I08, BEGIN) =I08
* -I141 =goto (I014, r_body)
R_repeat_until -> REPEAT r_body UNTIL r_until
* -I148 = goto (I014, ID)
L_gan -> ID ASSGN exp SEMI
Trang 28* -I151 = goto (I015, exp)
Factor -> LPAR exp RPAR
* -I157 = goto (I015, factor)
Factor -> OP1 factor
Trang 29* -I205 = goto (I020, LPAR)
Factor -> LPAR exp RPAR
exp -> exp OP1 term
exp -> exp OP2 term
factor -> LPARA exp RPARA
factor -> OP1 factor
factor -> NOT factor
Trang 31* -I231 = goto (I023, factor)
Factor -> NOT factor
* -I311 = goto (I31, DOT)
Program -> kbao body DOT
* -Lenh -> body
Lenh ->.l_repeat_until
L_gan -> ID ASSGN exp SEMI
L_repeat_until -> REPEAT r_body UNTIL r_until
Body ->.BEGIN n_lenh END
Trang 32* -I321 = goto (I32, n_lenh)
Body -> BEGIN n_lenh END
* -I322 = goto (I32, lenh)
N_lenh -> lenh SEMI n_lenh
Trang 33* -I205 = goto (I020, LPAR)
factor -> LPAR exp RPAR
factor -> OP1 factor
factor -> NOT factor
* -I2051 = goto (I205, exp)
Factor -> LPAR exp RPAR
exp -> exp OP1 term
exp -> exp OP2 term
Trang 34* -I0256 = goto (I205, NUM) = I020
* -I21’1 = goto (I021’, body )
S -> ten kbao body DOT
C Kết luận
- Nhóm đã hoàn thiện quá trình phân tích bài toán xây dựng trình biên dịch theo yêucầu đề bài Gồm các nội dung:
Trang 35 Phân tích từ vựng
Phân tích cú pháp
Phân tích ngữ nghĩa
- Bước đầu tìm hiểu demo xây dựng bộ phân tích từ vựng
- Hạn chế: Chưa demo được chương trình hoàn thiện