Tải bản đầy đủ (.doc) (29 trang)

Viết trình biên dịch để dịch 1 đoạn chương trình gồm các phát biểu sau sang mã 3 địa chỉ

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (176.36 KB, 29 trang )

BÁO CÁO CHƯƠNG TRÌNH DỊCH
Giáo viên hướng dẫn : Phan Thị Thu Hồng
Sinh viên thực hiện :
Đào Thị Thanh Dung
Phương Ngọc Hoa
Nguyễn Thị Hoài Thu
Phạm Thị Tuyến
Lớp : THC-K52
Đề 5:
Viết trình biên dịch để dịch 1 đoạn chương trình gồm các phát biểu sau sang
mã 3 địa chỉ:
 Phát biểu ghép, gán, if then else trong Pascal
 Các phát biểu kết thúc bằng dấu ;
 Các biểu thức trong các phát biểu là các biểu thức số học và logic, gồm
các phép toán +, -, *, / vàcác phép so sánh. Các toán hạng gồm các danh
hiệu, 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.
 Các danh hiệu phải khai báo trước.
Yêu cầu:
 Viết chương trình bằng tay.
 Quá trình phân tích cú pháp được thực hiện theo phương pháp từ dưới
lên
 Giai đoạn xử lý ngữ nghĩa sinh viên phải thực hiện bằng cách đặt các
hành vi ngữ nghĩa vào bản đặc tả cú pháp.
I. PHÂN TÍCH TỪ VỰNG
1.Tìm hiểu các lệnh trong Pascal
a. Lệnh gán (Assignment statement)
Một trong các lệnh đơn giản và cơ bản nhất của Pascal là lệnh gán. Mục
đích của lệnh này là gán cho một biến đã khai báo một giá trị nào đó cùng kiểu
với biến.


* Ý nghĩa:
Biến và các phát biểu gán là các khái niệm quan trọng của một họ các ngôn
ngữ lập trình mà Pascal là một đại diện tiêu biểu. Chúng phản ánh cách thức
hoạt động của máy tínhhiện nay, đó là:- Lưu trữ các giá trị khác nhau vào một
ô nhớ tại những thời điểm khác nhau Một quá trình tính toán có thể coi như
là một quá trình làm thay đổi giá trị của một (haymột số) ô nhớ nào đó, cho
đến khi đạt được giá trị cần tìm.
b. Lệnh ghép (Compound statement)
Một nhóm câu lệnh đơn được đặt giữa 2 chữ BEGIN và END sẽ tạo thành
một câu lệnhghép.Trong Pascal ta có thể đặt các lệnh ghép con trong các lệnh
ghép lớn hơn bao ngoài của nó và có thể hiểu tương tự như cấu trúc ngoặc đơn
( ) trong các biểu thức toán học.
Một khối lệnh bắt đầu bằng BEGIN và chấm dứt ở END; . Trong một khối
lệnh cũng có thể có các khối lệnh con nằm trong nó. Một khối chương trình
thường được dùng để nhóm từ 2 lệnh trở lên để tạo thành một của các lệnh có
cấu trúc.
c. Phát biểu If <…> then <…> else <…>
Dạng thiếu:
IF <điều kiện> THEN <câu lệnh>;
Dạng đủ
IF <điều kiện> THEN <câu lệnh 1>
ELSE <Câu lệnh 2>;
2.BẢNG TOKEN
2.BẢNG TOKEN
TOKEN
Lexeme Thông tin mô tả pattern Attribute
id a1,d_e3c,ba2, (letter|’_’)(letter|digit|’_’)* vtrí BDB
ASSIGN
:= ‘:=’
Semi ; ‘;’

Colon : ‘:’
Var Var, var , (‘v’|’V’)(‘a’|’A’)(‘r’|’R’)
Begin beGin,Begin, (‘b’|’B’)(‘e’|’E’)(‘g’|’G’)
(‘i’|’I’)(‘n’|’N’)
DOT .
End End,end, eNd, (‘e’|’E’)(‘n’|’N’)(‘d’|’D’)
IF if, If, IF (‘i’|’I’)(‘f’|’F’)
THEN then,Then, tHen,… (‘t’|’T’)(‘h’|’H’)(‘e’|’E’)
(‘n’|’N’)
ELSE else,Else, eLse, (‘e’|’E’)(‘l’|’L’)(‘s’|’S’)(‘e’|’E’)
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’)
Program PROGRAM,
program
(‘p’|’P’)(‘o’|’O’)(‘r’|’R’)
(‘g’|’G’)(‘a’|’A’)
Lpar ( ‘(‘
Rpar ) ‘)’
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’)(‘o’|’O’)
(‘l’|’L’)(‘e’|’E’)(‘a’|’A’)
(‘n’|’N’)
Integer

Real
Boolean
True TRUE,TrUE,true… (‘T’|’t’)(‘R’|’r’)(‘U’|’u’)(‘e’|’E’)
False FALSE,False,
false….
(‘F’|’f’)(‘A’|’a’)(‘L’|’l’)(‘S’|’s’)
(‘e’|’E’)
Num 1,33,10,490,… digit(digit)* vtrí BDB
NumReal 1.2, 2E-3 ,0.5e+4
digit
+
.digit
+
| digit
+
(.digit
+
|∈)
(‘e’|’E’)(‘+’|’- ‘|∈)digit
+
vtrí BDB
OP1 +,- ‘+’, ‘-‘ plus,minus
OP2 *,/ ‘+’, ‘-‘ ‘*’,’/’ multi,div
Relop =, <, >, <=, >=, <> ‘=’, ’<’, ’>’, ’<=’, ’>=’, ’<>’
EQ, LT, GT,
LE,GE,NE
letter → ‘a’| |’z’|’A’| |’Z’
digit → ‘0’| |’9’
delim→ blank | tab |newline
id → letter(letter|digit)*

ws → delim
+
endline → newline
unsco → “_”
• Ghi chú:
- BDB: bảng danh biểu.
- Các từ khóa(keyword) được insert vào bảng danh biểu trước khi phân tích từ
vựng.
- Thứ tự ưu tiên của các phép toán trong Pascal (tương ứng với các phép toán
đề bài đưa ra):
• Dấu ngoặc ( )
• Phép toán một ngôi: NOT.
• Phép toán *, /, AND.
• Phép toán +, -, OR
• Phép toán so sánh =, <, >, <=, >=, <>
LƯỢC ĐỒ DỊCH
LƯỢC ĐỒ DỊCH
* Sơ đồ dịch nhận dạng token relop:
* Sơ đồ dịch nhận dạng token relop:
*
*
Start
0
2
1
return(relop, LE)
3
4
return(relop, NE)
return(relop, LT)

5
6
7
8
return(relop, EQ)
return(relop, EG)
return(relop, GT)
< =
>
other
=
=>
other


Sơ đồ dịch của id và từ khóa:
Sơ đồ dịch của id và từ khóa:


Sơ đồ dịch nhận dạng hằng số:
Sơ đồ dịch nhận dạng hằng số:
• Sơ đồ dịch nhận dạng khoảng trắng:
*
*
Start
letter | digit
|‘_’
letter | ‘_’
return(id, lookup(id))
other

9 1
0
1
1
*
2 7
7
‘.’
other
return(numreal,vtrí
)bdb)
digit
digit

‘+’|’-

5 6
digit
‘E’
|’e’
3 4
digit
return(numreal,vtrí
bdb)
digit
other
1
0
8
8

other
*
*
‘E’
|’e’
Sta
rt
digit
1
digit
0
8
8
other
return(num,vtrí
bdb)
return(num,vtrí
bdb)
9
8
Start
delim
delim
other
2
3
2
4
25
*

II. PHÂN TÍCH CÚ PHÁP
1 Các luật sinh
s → program
1) program → decl body
2) program → body
3) decl → VAR n_decl
4) n_decl → one_decl n_decl
5) n_decl → one_decl
6) one_decl → n_id COLON TYPE SEMI
7) n_id → ID COMMA n_id
8) n_id → ID
9) body → BEGIN n_stmt END
10) n_stmt → smt SEMI n_stmt
11) n_stmt → stmt SEMI
12) stmt → pbgan
13) stmt → body
14) stmt → if_else_stmt
15) pbgan → ID ASSGN exp
16) if_else_stmt → IF if_body THEN body
17) if_else_stmt → IF if_body THEN body ELSE body
18 if_body → cond1
19) if_body → cond2
20) cond1 → cond1 AND cond3
21) cond1 → cond1 OR cond3
22) cond1 → NOT cond3
23) cond1 → cond3
24) dieukien3 → LPARA dieukien4 RPARA
25) cond2 → one_if
26) one_if → one_if RELOP exp
27) one_if → exp

28) exp → exp OP1 term
29) exp → term
30) term → term OP2 factor
31) term → factor
32) factor → ID
33) factor → NUM
34) factor → NUMREAL
35) factor → LPARA exp RPARA
36) factor → OP1 factor
37)factor -> TRUE
38)factor -> FALSE
2. Ký hiệu kết thúc:
1) VAR
2) COLON
3) TYPE
4) SEMI
5) ID
6) COMMA
7) BEGIN
8) END
9) ASSGN
10) IF
11) THEN
12) ELSE
13) AND
14) OR
15) NOT
16) RELOP
17) OP1
18) OP2

19) NUM
20) NUMREAL
21)LPARA //(
22)RPARA //)
23) DOT
24)TRUE
25)FALSE
26)$
3. Ký hiệu không kết thúc:
1) program
2) decl
3) body
4) n_decl
5) one_decl
6) n_id
7) n_stmt
8) stmt
9) pbgan
10) if_else_stmt
11) if_body
12) cond1
13) cond2
14) cond3
15) one_if
16) exp
17) term
18) factor
4. First của những ký hiệu không kết thúc:
1) first(program)=(VAR,BEGIN)
2) first(decl)=(VAR)

3) first(body)=(BEGIN)
4) first(n_decl)=(ID)
5) first(one_decl)=(ID)
6) first(n_id)=(ID)
7) first(n_stmt)=(BEGIN,ID,IF)
8) first(stmt)=(BEGIN,ID,IF)
9) first(pbgan)=(ID)
10) first(if_else_stmt)=(IF)
11) first(if_body)=( NOT , LPARA, ID, NUM, NUMREAL, LPARA, OP1)
13) first(cond1)=( NOT , LPARA)
14) first(cond2)=( ID, NUM, NUMREAL, LPARA, OP1)
15) first(cond3)=( LPARA)
16) first(one_if)=(ID, NUM, NUMREAL, LPARA, OP1)
17) first(exp)=(ID, NUM, NUMREAL, LPARA, OP1)
18) first(term)=( ID, NUM, NUMREAL, LPARA, OP1)
19) first(factor)=( ID, NUM, NUMREAL, LPARA, OP1)
5. Follow của những ký hiệu không kết thúc:
1) Follow(program)=($)
2) Follow(decl)=( $, BEGIN)
3) Follow(body)=( $, ELSE, SEMI)
4) Follow(n_decl)=( $, BEGIN)
5) Follow(one_decl)=( $, ID,BEGIN)
6) Follow(n_id)=( $, COLON)
7) Follow(n_stmt)=( $, END)
8) Follow(stmt)=( $, SEMI)
9) Follow(pbgan)=( $, SEMI)
10) Follow(if_else_stmt)=( $, SEMI)
11) Follow(if_body)=( $, THEN)
12) Follow(cond1)=( $, THEN, AND, OR)
13) Follow(cond2)=( $, THEN)

14) Follow(cond3)=( $, THEN, AND, OR)
15) Follow(one_if)=( $, THEN , RPARA, RELOP)
16) Follow(exp)=( $, OP1, THEN , RPARA, RELOP, COMMA, SEMI,
CLOSE)
17) Follow(term)=( $, OP1, OP2, THEN, RPARA, RELOP, COMMA,
SEMI, CLOSE)
18) Follow(factor)=( $, OP1, OP2, THEN, RELOP, RPARA, COMMA,
SEMI, CLOSE)
6. Tính tập tuyển:
I0:
s→.program
program→.decl body
program→.body
decl→.VAR n_decl
body→.BEGIN n_stmt END

I1=goto[I0,program]:
s→program .

I2=goto[I0,decl]:
program→decl .body
body→.BEGIN n_stmt END

I3=goto[I0,body]:
program→body .

I4=goto[I0,VAR]:
decl→VAR .n_decl
n_decl→.one_decl n_decl
n_decl→.one_decl

one_decl→.n_id COLON TYPE SEMI
one_decl→.n_id COLON array_decl SEMI
n_id→.ID COMMA n_id
n_id→.ID

I5=goto[I0,BEGIN]
body→BEGIN .n_stmt END
n_stmt→.stmt SEMI n_stmt
n_stmt→.stmt SEMI
stmt→.pbgan
stmt→.body
stmt→.if_else_stmt
pbgan→.ID ASSGN exp
pbgan→.array_id ASSGN exp
body→.BEGIN n_stmt END
if_else_stmt → .IF if_body THEN body
if_else_stmt → .IF if_body THEN body ELSE body

I6=goto[I2,body]:
program→decl body .

I7=goto[I4,n_decl]:
decl→VAR n_decl .

I8=goto[I4,one_decl]
n_decl→one_decl .n_decl
n_decl→one_decl .
n_decl→.one_decl n_decl
n_decl→.one_decl
one_decl→.n_id COLON TYPE SEMI

n_id→.ID COMMA n_id
n_id→.ID

I9=goto[I4,n_id]
one_decl→n_id .COLON TYPE SEMI

I10=goto[I4,ID]
n_id→ID .COMMA n_id
n_id→ID .

I11=goto[I5,n_stmt]:
body→BEGIN n_stmt .END

I12=goto[I5,stmt]
n_stmt→stmt .SEMI n_stmt
n_stmt→stmt .SEMI

I13=goto[I5,pbgan]
stmt→pbgan .

I14=goto[I5,body]
stmt→body .

I15:= goto[I5, if_else_stmt]:
stmt→ if_else_stmt.

I16=goto[I5,ID]
pbgan→ID .ASSGN exp

I17=goto[I5,IF]

if_else_stmt → IF .if_body1 THEN body
if_else_stmt → IF .if_body1 THEN body ELSE body
if_body → .cond1
if_body → .cond2
cond1 → .cond1 AND cond3
cond1 → .cond1 OR cond3
cond1 → .NOT cond3
cond1 → .cond3
cond3 → .LPARA one_if RPARA
cond2 → .one_if
one_if → .one_if RELOP exp
one_if → .exp
exp → .exp OP1 term
exp → .term
term → .term OP2 factor
term → .factor
factor → .ID
factor → .NUM
factor → .NUMREAL
factor → .LPARA exp RPARA
factor → .OP1 factor
factor → true
array_id → false

I18=goto[I8,n_decl]:
n_decl → one_decl n_decl .

I20=goto[I9,COLON]:
one_decl→n_id COLON .TYPE SEMI


I21=goto[I10,COMMA]:
n_id→ID COMMA .n_id
n_id→.ID COMMA n_id
n_id→.ID

I22=goto[I11,END]:
body→BEGIN n_stmt END .

I23=goto[I12,SEMI]:
n_stmt→stmt SEMI .n_stmt
n_stmt→stmt SEMI .
n_stmt→.stmt SEMI n_stmt
n_stmt→.stmt SEMI
stmt→.pbgan
stmt→.body
stmt→.if_else_stmt
pbgan→.ID ASSGN exp

I24=goto[I16,ASSGN]:
pbgan→ID ASSGN .exp
exp→.exp OP1 term
exp→.term
term→.term OP2 factor
term→.factor
factor → .ID
factor → .NUM
factor → .NUMREAL
factor → .LPARA exp RPARA
factor → .OP1 factor
factor → .true

array_id → .false

I25=goto[I17, if_body]:
if_else_stmt → IF if_body .THEN body END
if_else_stmt → IF if_body .THEN body ELSE body END

I26=goto[I17,cond1]
if_body → cond1.
cond1 → cond1 .AND cond3
cond1 → cond1 .OR cond3

I27=goto(I17,NOT)
cond1 →NOT .cond3
cond3 → .LPARA cond4 RPARA

I28=goto(I17,dieukien3)
cond 1 → cond 3.

I29=goto(I17,Lpara)
cond3 → LPARA. cond4 RPARA
factor → LPARA .exp RPARA
cond4→ . cond4 RELOP exp
cond4→ .exp
exp → .exp OP1 term
exp → .term
term → .term OP2 factor
term → .factor
factor → .ID
factor → .NUM
factor→.NUM DOT NUM

factor → .NUMREAL
factor → .LPARA exp RPARA
factor → .OP1 factor
factor -> .TRUE
factor -> .FALSE

I30=goto(I17, cond4)
cond2 → cond4.
cond4→ cond4 .RELOP exp

I31=goto(I17,exp)
cond4→ exp.
exp → exp .OP1 term

I32=goto(I17,term)
exp → term.
term → term .OP2 factor

I33=goto(I17,factor)
term → factor.

I34=goto(I17,ID)
factor → ID.

I35=goto(I17,NUM)
factor → NUM.
factor→NUM .DOT NUM

I36=goto(I17,NUMREAL)
factor → NUMREAL.


I37=goto(I17,OP1)
factor → OP1 .factor
factor → .ID
factor → .NUM
factor→.NUM DOT NUM
factor → .NUMREAL
factor → .LPARA exp RPARA
factor → .OP1 factor
factor -> .TRUE
factor -> .FALSE

I38=goto(I17,True)
factor -> TRUE.

I39=goto(I17,False)
factor -> FALSE.

I40=goto(I19,n_decl)
n_decl → kbkieu SEMI n_decl.
Goto(I19,one_decl)=I8
Goto(I19,n_id)=I9
Goto(I19,id)=I10

I41=goto(I20,TYPE)
one_decl → n_id COLON TYPE .SEMI

I42=goto(I21,n_id)
n_id →ID COMMA n_id.


Goto(I21,ID)=I10

I43=goto(I22,SEMI)
body→Begin n_stmt End SEMI .

I44=goto(I23,n_stmt)
n_stmt →stmt SEMI n_stmt.
Goto(I23,stmt)=I12

I45=goto(I24,exp)
pbgan → ID ASSGN exp .SEMI
exp → exp .OP1 term
goto(I24,term)=I32
goto(I24,factor)=I33
goto(I24,ID)=I34
goto(I24,NUM)=I35
goto(I24,NUMREAL)=I36

I46=goto(I24,Lpara)
factor → LPARA .exp RPARA
exp → .exp OP1 term
exp → .term
term → .term OP2 factor
term → .factor
factor → .ID
factor → .NUM
factor→.NUM DOT NUM
factor → .NUMREAL
factor → .LPARA exp RPARA
factor → .OP1 factor

factor -> .TRUE
factor -> .FALSE
goto(I24,OP1)=I37
goto(I24,True)=I38
goto(I24,False)=I39

I47=goto(I25,do)
if_else_stmt → IF if_body THEN. body END
if_else_stmt → IF if_body THEN. body ELSE body END
body → .BEGIN n_lenh END SEMI

I48=goto(I26,And)
cond1 → cond1 AND .cond3
cond3 → .LPARA cond4 RPARA

I49=goto(I26,OR)
cond1 → cond1 OR .cond3
cond3 → .LPARA cond4 RPARA

I50=goto(I27,cond3)
cond1 →NOT cond3.
goto(I27,Lpara)=I29

I51=goto(I29,cond4)
cond3 → LPARA cond4 . RPARA
cond4→ cond4 .RELOP exp

I52=goto(I29,exp)
factor → LPARA exp .RPARA
cond4→ exp.

exp → exp . OP1 term
goto(I29,term)=I32
goto(I29,factor)=I33
goto(I29,ID)=I34
goto(I29,NUM)=I35
goto(I29,NUMREAL)=I36
goto(I29,Lpara)=I46
goto(I29,OP1)=I37
goto(I29,True)=I38
goto(I29,False)=I39

I53=goto(I30,Relop)
cond4→ cond4 RELOP .exp
exp → .exp OP1 term
exp → .term
term → .term OP2 factor
term → .factor
factor → .ID
factor → .NUM
factor→.NUM DOT NUM
factor → .NUMREAL
factor → .LPARA exp RPARA
factor → .OP1 factor
factor -> .TRUE
factor -> .FALSE

I54=goto(I31,OP1)
exp → exp OP1 .term
term → .term OP2 factor
term → .factor

factor → .ID
factor → .NUM
factor→.NUM DOT NUM
factor → .NUMREAL
factor → .LPARA exp RPARA
factor → .OP1 factor
factor -> .TRUE
factor -> .FALSE

I55=goto(I32,OP2)
term → term OP2 . factor
factor → .ID
factor → .NUM
factor→.NUM DOT NUM
factor → .NUMREAL
factor → .LPARA exp RPARA
factor → .OP1 factor
factor -> .TRUE
factor -> .FALSE

I56=goto(I35,Dot)
factor→NUM DOT .NUM

I57=goto(I37,factor)
factor → OP1 factor.
Goto(I37,ID)=I34
goto(I37,NUM)=I35
goto(I37,NUMREAL)=I36
goto(I37,Lpara)=I46
goto(I37,OP1)=I37

goto(I37,True)=I38
goto(I37,False)=I39

I58=goto(I41,SEMI)
kbkieu→ n_id COLON TYPE SEMI.

I59=goto(I45,SEMI)
pbgan → ID ASSGN exp SEMI .
goto(I45,OP1)=I54

I60=goto(I46,exp)
factor → LPARA exp . RPARA
exp → exp .OP1 term

goto(I46,term)=I32
goto(I46,factor)=I33
goto(I46,ID)=I34
goto(I46,NUM)=I35
goto(I46,NUMREAL)=I36
goto(I46,Lpara)=I46
goto(I46,OP1)=I37
goto(I46,True)=I38
goto(I46,False)=I39

I61=goto(I47,body)
if_else_stmt → IF if_body THEN body. END
if_else_stmt → IF if_body THEN body. ELSE body END
Goto(I47,Begin)=I5

I62=goto(I48,cond3)

cond1 → cond1 AND cond3.
Goto(I48,Lpara)=I29

I63=goto(I49,cond3)
cond1 → cond1 OR cond3.
Goto(I49,Lpara)=I29

I64=goto(I51,Rpara)
cond3 → LPARA cond4 RPARA.
Goto(I51,Relop)=I53

I65=goto(I52,Rpara)
factor → LPARA exp RPARA.
Goto(I52,OP1)=I54

I66=goto(I53,exp)
cond4→ cond4 RELOP exp.
exp → exp. OP1 term
goto(I53,term)=I32
goto(I53,factor)=I33
goto(I53,ID)=I34
goto(I53,NUM)=I35
goto(I53,NUMREAL)=I36
goto(I53,Lpara)=I46
goto(I53,OP1)=I37
goto(I53,True)=I38
goto(I53,False)=I39

I67=goto(I54,term)
exp → exp OP1 term.

term → term .OP2 factor
goto(I54,factor)=I33
goto(I54,ID)=I34
goto(I54,NUM)=I35
goto(I54,NUMREAL)=I36
goto(I54,Lpara)=I46
goto(I54,OP1)=I37
goto(I54,True)=I38
goto(I54,False)=I39

I68=goto(I55,factor)
term → term OP2 factor.
goto(I55,ID)=I34
goto(I55,NUM)=I35
goto(I55,NUMREAL)=I36
goto(I55,Lpara)=I46
goto(I55,OP1)=I37
goto(I55,True)=I38
goto(I55,False)=I39

I69=goto(I56,NUM)
factor→NUM DOT NUM.

I70=goto(I60,RPARA)
factor → LPARA exp RPARA.

goto(I60,OP1)=I54

I71=goto(I61,END)
if_else_stmt → IF if_body THEN body END.


I72=goto(I61,ELSE)
if_else_stmt → IF if_body THEN body ELSE. body END

I73=goto(I61,body)
if_else_stmt → IF if_body THEN body ELSE body. END

I74=goto(I61,END)
if_else_stmt → IF if_body THEN body ELSE. body END.
goto(I66,OP1)=I54
goto(I67,OP2)=I55

×