1. Trang chủ
  2. » Luận Văn - Báo Cáo

Bài tập lớn Chương trình dịch – Đề số 6

16 382 0
Tài liệu đã được kiểm tra trùng lặp

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 16
Dung lượng 141,5 KB

Nội dung

Trang 1

 Thực hiện chuyển đổi kiểu từ nguyên sang thực khi cần thiết 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

Trang 2

I.PHÂN TÍCH TỪ VỰNG1 Bảng Token

VAR Var, var , (‘v’|’V’)(‘a’|’A’)(‘r’|’R’)

END End,end, eNd, (‘e’|’E’)(‘n’|’N’)(‘d’|’D’)

Trang 3

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’)

letter → A | B | … | Z | a | b | … | zdigit → 0 | 1 | 2 | … | 9

id → letter (letter | digit)*

b NUM

digit → 0 | 1 | 2 | … | 9digits → digit digit*

optional_fraction → digits | 

optional_exponent → ( E ( + | - |  ) digits) | num → digits optional_fraction optional_exponent Ghi chú:

- Thứ tự ưu tiên của các phép toán trong Pascal (tương ứng với các phép

+ 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 =, <, >, <=, >=, <>

Trang 4

letter | ‘_’

return(id, lookup(id))other

-return(OP1, minus)return(OP1, plus)

return(OP2, multiplication)return(OP2, division)*

/

Trang 5

2.5 Sơ đồ dịch nhận dạng token các toán tử quan hệ relop:

0 < 1 = 2 return(relop, LE)3

return(relop, NE)other

4 return(relop, LT)5

return(relop, GT)return(relop, EG)return(relop, EQ)

*

Trang 6

II PHÂN TÍCH CÚ PHÁP1 Văn phạm gia tố

11) lenh -> l_if_then_else

12) l_gan -> ID ASSGN exp SEMI //a:=0;

13) l_if_then_else -> IF r_IF THEN r_body ELSE r_body

14) r_IF ->LPAR ID RELOP NUM RPAR | LPAR ID RELOP NUMREAL

RPAR | LPAR ID OP1 ID RELOP NUM RPAR | LPAR ID OP2 IDRELOP NUM RPAR | LPAR ID OP1 ID RELOP NUMREAL RPAR |LPAR ID OP2 ID RELOP NUMREAL RPAR RPAR //

(a<=1) | (a<=0.1) | (a+b> 2) | (a*b> 2) | (a+b>=2.2) | (a*b> =2.2)15) r_body -> n_lenh SEMI

16) exp -> exp OP1 term |exp OP2 term |term17) term -> factor

18) factor -> ID19) factor -> NUM

20) factor -> NUMREAL

21) factor -> LPARA exp RPARA //a:=a * (c-d);22) factor -> OP1 factor // a:= - b;

Trang 7

2.Các ký hiệu kết thúc

1) VAR 2) COLON 3) TYPE 4) SEMI //( ; ) 5) ID

6) COMA //(,) 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) LPAR //( 22) RPAR //) 28) $

3.Các ký hiệu chưa kết thúc

1) Program2) Kbao3) Body4) n_kbao5) Kbk6) n_ID7) n_lenh8) lenh9) l_gan

Trang 8

10) l_if_then_else11) r_IF

12) r_body13) exp14) term15) factor16) exp117) exp2

4.FIRST của những kí hiệu chưa kết thúc:

1) FIRST(program) = (VAR)2) FIRST(kbao) = (VAR)

3) FIRST(n_kbao)=FIRST(kbkieu) = FIRST(n_ID)= ID4) FIRST (body) = BEGIN

5) FIRST (n_lenh) =FIRST(l_if_then_else)= (ID, BEGIN,IF, Ɛ)6) FIRST (l_gan) = (ID)

7) FIRST (l_if_then_else) = (IF)

8) FIRST (exp)=FIRST(term)=FIRST(factor)= (ID,NUM, NUMREAL,LPARA, OP1)

9) FIRST(r_IF) = (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

1) FOLLOW (program) = FOLLOW (kbao)= FOLLOW (n_kbao)= ($)2) FOLLOW (body) = (SEMI, END, DOT)

3) FOLLOW(kbk) = FOLLOW (lenh) = FOLLOW (l_gan)= FOLLOW(l_if_then_else)= FOLLOW (r_IF)=(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)

Trang 9

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 ENDn_lenh -> lenh SEMI n_lenh | Ɛ lenh -> l_gan

lenh ->.body

lenh -> l_if_then_else

l_gan -> ID ASSGN exp SEMI

l_if_then_else -> IF r_IF THEN r_body ELSE r_bodyr_IF -> LPAR ID RELOP NUM RPAR

r_IF -> LPAR ID RELOP NUMREAL RPAR

r_IF -> LPAR ID OP1 ID RELOP NUM RPARr_IF -> LPAR ID OP2 ID RELOP NUM RPARr_IF ->.LPAR ID OP1 ID RELOP NUMREAL RPAR

r_IF -> LPAR ID OP2 ID RELOP NUMREAL RPAR RPAR

r_body -> n_lenhexp -> exp OP1 term exp -> exp OP2 term term -> factor

factor -> IDfactor -> NUM

factor -> NUMREAL

factor -> LPARA exp RPARA factor -> OP1 factor

exp ->.term

Trang 10

I1 = goto(I0,S): S’->S.

I2 = goto(I0,program): S -> program.

I3 = goto(I0,kbao):

Program -> kbao body DOT body ->.BEGIN n_lenh END

I4 = goto(I0,VAR):

Kbao ->VAR n_kbao

n_kbao ->.kbk SEMI n_kbao

Kbk -> n_ID CONON TYPE SEMIn_ID -> ID

n_ID -> ID COMA n_ID

n_ID -> ID COMA n_ID

l_gan -> ID ASSGN exp SEMIFactor -> ID.

I8= goto (I0, BEGIN)

body -> BEGIN n_lenh ENDn_lenh -> lenh SEMI n_lenhn_lenh -> Ɛ

lenh -> l_ganlenh -> body

Trang 11

lenh ->.l_if_then_else

l_gan -> ID ASSGN exp SEMI

l_if_then_else -> IF r_IF THEN r_body ELSE r_bodybody ->.BEGIN n_lenh END

I9 = goto (I0,lenh)

n_lenh -> lenh SEMI n_lenh

I10 = goto (I0, Ɛ)n_lenh -> Ɛ.

I11 = goto (I0,l_gan)lenh ->l_gan.I12 = goto (I0, body)

lenh -> body.

I13 = goto (I0,l_if_then_else)lenh -> l_if_then_else.

I14 = goto (I0, IF)

l_if_then_else -> IF r_IF THEN r_body ELSE r_bodyr_IF -> LPAR ID RELOP NUM RPAR

r_IF -> LPAR ID RELOP NUMREAL RPAR

r_IF -> LPAR ID OP1 ID RELOP NUM RPARr_IF -> LPAR ID OP2 ID RELOP NUM RPARr_IF ->.LPAR ID OP1 ID RELOP NUMREAL RPAR

r_IF -> LPAR ID OP2 ID RELOP NUMREAL RPAR RPAR

I15 = goto (I0, LPAR)

r_IF -> LPAR ID RELOP NUM RPAR

r_IF -> LPAR ID RELOP NUMREAL RPAR

r_IF -> LPAR ID OP1 ID RELOP NUM RPARr_IF -> LPAR ID OP2 ID RELOP NUM RPARr_IF ->.LPAR ID OP1 ID RELOP NUMREAL RPAR

r_IF -> LPAR ID OP2 ID RELOP NUMREAL RPAR RPAR

Trang 12

factor -> LPAR exp RPARexp -> exp OP1 term

exp -> exp OP2 term exp ->.term

term -> factor

factor -> IDfactor -> NUM

factor -> NUMREAL

factor -> LPARA exp RPARA factor -> OP1 factor

I16 = goto (I0, n_lenh)r_body -> n_lenh.

I17 = goto (I0, exp)

exp ->exp OP1 termexp -> exp OP2 term

I18 =goto (I0, term)exp ->term.

I19 = goto (I0, factor)term -> factor.

I20 = goto (I0, NUM)factor -> NUM.

I21 = goto (I0, NUMREAL)factor -> NUMREAL.

I22 = goto (I0, OP1)

factor -> OP1.factor factor -> ID

factor -> NUM

Trang 13

lenh -> l_ganlenh -> body

lenh ->.l_if_then_else

l_gan -> ID ASSGN exp SEMI

l_if_then_else -> IF r_IF THEN r_body ELSE r_bodyBody ->.BEGIN n_lenh END

n_ID -> ID COMA n_ID

I29 = goto (I5, SEMI)

n_kbao -> kbk SEMI n_kbao

Trang 15

factor -> LPAR exp RPAR

exp -> exp OP1 term exp -> exp OP2 term exp ->.term

term -> factor

factor -> IDfactor -> NUM

Ngày đăng: 14/04/2015, 08:58

TỪ KHÓA LIÊN QUAN

w