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... Mỗi số nguyên được biểu diễn trong máy dưới dạng
Trang 1Giảng viên hướng dẫn: Phan Thị Thu Hồng
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
II Các phép toán
1 Các phép toán logic
Các phép tính NOT, AND, OR, XOR xử lý các bít nhị phân được xác định như sau :
NOT 1 = 0
1 AND 1=1 1 OR 1=1 1 XOR 1=0
NOT 0 = 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’)
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
Trang 5LPAR ( ‘(’
TRUE True, true, TRUE
FALSE FALSE, False,
Trang 7return(numreal,vtrí bdb)
digit
other
6 8 8
digit
0
2 7 8
other
return(num,vtrí ))))) )bdb)
returnnum,vtrí bdb)
4 9 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
16) exp -> exp OP1 term |exp OP2 term |term
Trang 1017) 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
10)lenh -> body
Trang 1111)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
27) 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,Ɛ)
5 Tính FOLLOW của những kí hiệu chưa kết thúc
Trang 151) 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
9) n_lenh ->.lenh SEMI n_lenh
Trang 1610) 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
Trang 1730) 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 | Ɛ
Trang 18l_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
factor -> TRUE
Trang 19S’->S
*- - -
-I02=goto(I0,ten)
S -> 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
* -I09 = goto (I0,lenh)
Trang 21N_lenh -> lenh SEMI n_lenh
* -I014 = goto (I0, REPEAT)
L_repeat_until -> REPEAT r_body UNTIL r_until
Trang 22Lenh ->.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)
R_body -> n_lenh
Trang 23
* -I017 = goto (I0, exp)
Exp ->exp OP1 term
Exp -> exp OP2 term
Trang 24factor -> 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
* -I31 = goto (I03, body)
Program -> kbao body DOT
Trang 25* -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
* -I44 =goto (I04, ID)
N_ID -> ID
N_ID -> ID COMA n_ID
I81 = goto (I08,n_lenh)
* -Body -> BEGIN n_lenh END
* -I87 = goto (I08, ID)
L_gan -> ID ASSGN exp SEMI
* -I89 = goto (I08, REPAET) =I014
Trang 27* -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
* -I149 = goto (I014, REPAET) =I014
* -I1410 = goto (I014, BEGIN) =I08
* -I151 = goto (I015, exp)
Factor -> LPAR exp RPAR
* -I157 = goto (I015, factor)
Factor -> OP1 factor
Trang 29
* -I201 = goto (I020, factor) = I157
* -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
factor -> FALSE
Trang 31Factor -> 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 33factor -> 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* -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:
Phân tích từ vựng
Trang 35 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