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

Đồ án môn học CHƯƠNG TRÌNH DỊCH

56 1,2K 8

Đ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 56
Dung lượng 2,57 MB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

LỜI NÓI ĐẦUChương trình dịch là một môn học của ngành khoa học máy tính.. Cùng với sự phát triển của các chuyên ngành : Lý thuyết ngôn ngữ hình thức & Ôtômat vàcác chuyên ngành khác, lý

Trang 1

LỜI NÓI ĐẦU

Chương trình dịch là một môn học của ngành khoa học máy tính Cùng với

sự phát triển của các chuyên ngành : Lý thuyết ngôn ngữ hình thức & Ôtômat vàcác chuyên ngành khác, lý thuyết thiết kế trình biên dịch ngày một hoàn thiện hơn

Ngày nay lý thuyết trình biên dịch đã được ứng dụng không những trongviệc thiết kế trình biên dịch cho ngôn ngữ lập trình mà còn trong lĩnh vực trí tuệnhân tạo - hiểu ngôn ngữ tự nhiên, dịch máy …

Đồ án môn học : CHƯƠNG TRÌNH DỊCH là dịp tốt để cho việc học tập

của sinh viên chuyên ngành tin học nắm vững lý thuyết và cách thiết kế trình biêndịch được tốt

Vì thế chúng em thực hiện đồ án, với đề tài 14:

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:

- Phát biểu ghép, if trong C

- 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 toán so sánh Toán hạng gồm các danh hiệu, hằng số thực và nguyên (kể cả biểu thức) và kiểu array Độ ưu tiên các phép toán tương tự C

- Thực hiện chuyển đổi kiểu từ nguyên sang thực khi cần thiết

Em xin chân thành cảm ơn sự hướng dẫn tận tình của cô Phan Thị Thu

Hồng và sự đóng góp ý kiến của các bạn, nhằm giúp đỡ cho đồ án hoàn thành

đúng yêu cầu Mặc dù đã cố gắng tham khảo nhiều tài liệu nhưng quá trình thựchiện khó tránh khỏi những thiếu sót và hạn chế Rất mong nhận được những ý kiếnnhận xét, đóng góp của thầy cô và các bạn

Nhóm sinh viên thực hiện

Nguyễn Thị Diệp Phạm Thị Định Nguyễn Thị Gấm Nguyễn Thị Nụ

Lớp : THC 52

Trang 2

MỤC LỤC

LỜI NÓI ĐẦU 1

A Những nội dung liên quan tới yêu cầu của đề bài 3

I Phát biểu ghép và if trong C 3

1 Phát biểu ghép 3

2 Phát biểu if 3

II Các phát biểu kết thúc bằng dấu ; 4

III Các phép toán 4

1 Các phép toán số học 4

2 Các phép toán logic 4

3 Các phép toán so sánh 4

4 Toán tử chọn theo điều kiện 4

5 Các toán hạng 5

6 Độ ưu tiên của phép toán 5

7 Chuyển đổi kiểu nguyên sang kiểu số thực 5

B Phân tích từ vựng 6

I Bảng token 6

II Sơ đồ dịch 7

1 Định nghĩa các token 7

2 Sơ đồ dịch 8

C Phân tích cú pháp 11

I Định nghĩa văn phạm tổng quát 11

II Các ký hiệu kết thúc và chưa kết thúc 13

1 Các ký hiệu kết thúc 13

2 Các ký hiệu không kết thúc 14

III Xây dựng bảng phân tích LR 14

D Phân tích ngữ nghĩa 51

I Định nghĩa trực tiếp cú pháp 51

II Kiểm tra kiểu 52

E Sinh mã trung gian 54

Trang 3

A Những nội dung liên quan tới yêu cầu của đề bài

Trang 4

lệnh S2;

- Lệnh S1, S2 có thể là một khối lệnh

II Các phát biểu kết thúc bằng dấu ;

Đa số các câu lệnh kết thúc bằng dấu ; dùng để ngăn cách các câu lệnh Ví

dụ như: Phát biểu gán (a=0, gán 0 cho biến a), khai báo biến, hằng (float a, khai báo biến a có kiểu số thực)…

Trang 5

4 Toán tử chọn theo điều kiện

(Điều kiện) ? biểu thức 1 : biểu thức 2

- Điều kiện đúng thì biểu thức nhận giá trị biểu thức 1, các trường hợp còn lại bằngbiểu thức 2

Kiểu tên_mảng [kích_thước_chiều1][kích_thước_chiều2]…[kích_thước_chiều_n]

6 Độ ưu tiên của phép toán

- Có 15 mức ưu tiên, thường thì các toán tử 1 ngôi có độ ưu tiên cao hơn 2 ngôi Thứ tự ưu tiên được chỉ rõ hơn trong dấu ()

7 Chuyển đổi kiểu nguyên sang kiểu số thực

int i;

- Chuyển kiểu: (float) i;

Trang 6

B Phân tích từ vựng

I Bảng token

hoặc dấu gạch chân theo sau là số hoặcchữ, dấu gạch chân và không trùng vớikhóa

Trang 8

7 6

1 0

Trang 9

* num

* real

Chú ý: Một số trạng thái có thêm một dấu * để chỉ ra đồ thị chuyển đã xử lý quá

một ký tự của phần khác Ký hiệu này được lưu và trả lại khi đoán nhận phần khác

Trang 10

Start 1

7 8

5 6

4 3

2 +

] ) ( /

* -

[

9 10

13 14

12 11

{ }

; :

?

Trang 11

C Phân tích cú pháp

I Định nghĩa văn phạm tổng quát

S → void main left right block

block → begin assign_list end

assign_list → assign assign_list |

assign → dec_var | begin assign_list end | pbif

dec_var → type id id1 semi dec_var

id1 → coma id1 | open num close id1 |

pbif → if expr pbif | if expr pbif else pbif | begin assign_list end |

id asg expr semiexpr → exp aws expr colon expr

exp → exp or exp1 | exp1

exp1 → exp1 and term | term

term → term relop1 term1 | term1

term1 → term1 relop2 term2 | term2

term2 → term2 op1 term3| term3

term3 → term3 op2 factor | factor

factor → not factor1

factor1 → left exp right| id | num | real

!

1 8

19

2 0

Trang 12

* Văn phạm tăng cường

S’ → S(1) S → dec_var void main left right block(2) dec_var → type id id1 semi dec_var(4) id1 → coma id id1

(5) id1 → open num close id1

(6) id1 →

(7) block → begin assign_list end

(8) assign_list → assign assign_list

(9) assign_list →

(10) assign → dec_var

(11) assign → if expr assign

(12) assign → if expr assign else assign(13) assign → begin assign_list end

(14) assign → id asg expr semi

(15) expr → exp aws expr colon expr (16) expr → exp

(17) exp → exp or exp1

Trang 13

(30) factor1 → left expr right

(31) factor1 → id

(32) factor1 → num

(33) factor1 → real

(34) factor1 → left type right id

II Các ký hiệu kết thúc và chưa kết thúc

Trang 14

S → dec_var void main left right block, $

dec_var → type id id1 semi dec_var, void

dec_var → , void

goto(I0, S)

-I 1: S’→S., $

goto(I0, dec_var)

Trang 15

-I 2: S → dec_var void main left right block, $

goto(I0, type)

-I 3: dec_var → type id id1 semi dec_var, void

goto(I2, void)

-I 4: S → dec_var void main left right block, $

goto(I3, id)

-I 5: dec_var → type id id1 semi dec_var, void

id1 → coma id id1, semi

id1 → open num close id1, semi

id1 → , semi

goto(I4, main)

-I 6: S → dec_var void main left right block, $

goto(I5, id1)

-I 7: dec_var → type id id1 semi dec_var, void

goto(I5, coma)

-I 8: id1 → coma id id1, semi

goto(I5, open)

-I 9: id1 → open num close id1, semi

goto(I6, left)

-I 10: S → dec_var void main left right block, $

goto(I7, semi)

-I 11: dec_var → type id id1 semi dec_var, void

dec_var → type id id1 semi dec_var, void

Trang 16

goto(I8, id)

-I 12: id1 → coma id id1, semi

id1 → coma id id1, semi

id1 → open num close id1, semi

id1 → , semi

goto(I9, num)

-I 13: id1 → open num close id1, semi

goto(I10, right)

-I 14: S → dec_var void main left right block, $

block → begin assign_list end, $

goto(I11, dec_var)

-I 15: dec_var → type id id1 semi dec_var., void

goto(I11, type) ≡ I3

goto(I12, id1)

-I 16: id1 → coma id id1., semi

goto(I12, coma) ≡ I8, goto(I12, open) ≡ I9

goto(I13, close)

-I 17: id1 → open num close id1, semi

id1 → coma id id1, semi

id1 → open num close id1, semi

id1 → , semi

goto(I14, block)

-I 18: S → dec_var void main left right block., $

goto(I14, begin)

Trang 17

-I 19: block → begin assign_list end, $

assign_list → assign assign_list, end

assign_list → , end

assign → dec_var, type | begin | id | if |

dec_var → type id id1 semi dec_var, type | begin | id | if |

assign → if expr assign, type | begin | id | if |

assign → if expr assign else assign, type | begin | id | if |

assign → begin assign_list end, type | begin | id | if |

assign → id asg expr semi, type | begin | id | if |

goto(I17, id)

-I 20: id1 → open num close id1., semi

goto(I17, coma) ≡ I8, goto(I17, open) ≡ I9

goto(I19, assign_list)

-I 21: block → begin assign_list end, $

goto(I19, assign)

-I 22: assign_list → assign assign_list, end

assign_list → assign assign_list, end

assign_list → , end

assign → dec_var, type | begin | id | if |

dec_var → type id id1 semi dec_var, type | begin | id | if |

assign → if expr assign, type | begin | id | if |

assign → if expr assign else assign, type | begin | id | if |

assign → begin assign_list end, type | begin | id | if |

assign → id asg expr semi, type | begin | id | if |

goto(I19, dec_var)

-I 23: assign → dec_var., type | begin | id | if |

goto(I19, type)

Trang 18

I 24: dec_var → type id id1 semi dec_var, type | begin | id | if |

-goto(I19, if)

I 25: assign → if expr assign, type | begin | id | if |

assign → if expr assign else assign, type | begin | id | if |

expr → exp aws expr colon expr, type | begin | id | if |

expr → exp, type | begin | id | if |

exp → exp or exp1, type | begin | id | if | aws | or |

exp → exp1, type | begin | id | if | aws | or |

exp1 → exp1 and term, type | begin | id | if | aws | or | and |

exp1 → term, type | begin | id | if | aws | or | and |

term → term relop1 term1, type | begin | id | if | aws | or | and | relop1 |

term → term1, type | begin | id | if | aws | or | and | relop1 |

term1 → term1 relop2 term2, type| begin| id| if| aws| or| and| relop1|relop2|

term1 → term2, type| begin| id| if| aws| or| and| relop1|relop2|

term2 →.term2 op1 term3, type|begin|id|if|aws|or|and|relop1|relop2|op1|

term2 → term3, type|begin|id|if|aws|or|and|relop1|relop2|op1|

term3→.term3 op2 factor,type|begin|id|if|aws|or|and|relop1|relop2|op1|op2|

term3 → factor, type|begin|id|if|aws|or|and|relop1|relop2|op1|op2|

factor → not factor1, type|begin|id|if|aws|or|and|relop1|relop2|op1|op2|

goto(I19, begin)

-I 26: assign → begin assign_list end, type | begin | id | if |

assign_list → assign assign_list, end

assign_list → , end

assign → dec_var, type | begin | id | if |

dec_var → type id id1 semi dec_var, type | begin | id | if |

assign → if expr assign, type | begin | id | if |

Trang 19

assign → if expr assign else assign, type | begin | id | if |

assign → begin assign_list end, type | begin | id | if |

assign → id asg expr semi, type | begin | id | if |

goto(I19, id)

-I 27: assign → id asg expr semi, type | begin | id | if |

goto(I21, end)

-I 28: block → begin assign_list end., $

goto(I22, assign_list)

-I 29: assign_list → assign assign_list., end

goto(I22, assign) ≡ I22, goto(I22, dec_var) ≡ I23, goto(I22, type) ≡ I24

goto(I22, if) ≡ I25, goto(I22, begin) ≡ I26, goto(I22, id) ≡ I27

goto(I24, id)

I 30: dec_var → type id id1 semi dec_var, type | begin | id | if |

id1 → coma id id1, semi

id1 → open num close id1, semi

id1 → , semi

goto(I25, expr)

-I 31: assign → if expr assign, type | begin | id | if |

assign → if expr assign else assign, type | begin | id | if |

assign → dec_var, type | begin | id | if | | else

dec_var → type id id1 semi dec_var, type | begin | id | if | | elseassign → if expr assign, type | begin | id | if | | else

assign → if expr assign else assign, type | begin | id | if | | elseassign → begin assign_list end, type | begin | id | if | | esleassign → id asg expr semi, type | begin | id | if | | else

goto(I25, exp)

-I 32: expr → exp aws expr colon expr, type | begin | id | if |

Trang 20

expr → exp., type | begin | id | if |

exp → exp or exp1, type | begin | id | if | aws | or |

-goto(I25, exp1)

I 33: exp → exp1., type | begin | id | if | aws | or |

exp1 → exp1 and term, type | begin | id | if | aws | or | and |

-goto(I25, term)

I 34: exp1 → term., type | begin | id | if | aws | or | and |

term → term relop1 term1, type | begin | id | if | aws | or | and | relop1 |

-goto(I25, term1)

I 35: term → term1., type | begin | id | if | aws | or | and | relop1 |

term1 → term1 relop2 term2, type| begin| id| if| aws| or| and| relop1|relop2|

-goto(I25, term2)

I 36: term1 → term2., type| begin| id| if| aws| or| and| relop1|relop2|

term2 →term2 op1 term3, type|begin|id|if|aws|or|and|relop1|relop2|op1|

-goto(I25, term3)

I 37: term2 → term3., type|begin|id|if|aws|or|and|relop1|relop2|op1|

term3→term3 op2 factor,type|begin|id|if|aws|or|and|relop1|relop2|op1|op2|

Trang 21

I 39: factor → not factor1, type|begin|id|if|aws|or|and|relop1|relop2|op1|op2|

factor1 → left expr right,type|begin|id|if|aws|or|and|

relop1|relop2|op1|op2|

factor1 → id, type|begin|id|if|aws|or|and|relop1|relop2|op1|op2|

factor1 → num, type|begin|id|if|aws|or|and|relop1|relop2|op1|op2|

factor1 → real, type|begin|id|if|aws|or|and|relop1|relop2|op1|op2|

factor1 → left type right id, type|begin|id|if|aws|or|and|

relop1|relop2|op1|op2|

-goto(I26, assign_list)

I 40: assign → begin assign_list end, type | begin | id | if |

goto(I26, assign) ≡ I22, goto(I26, dec_var) ≡ I23, goto(I26, type) ≡ I24

goto(I26, if) ≡ I25, goto(I26, begin) ≡ I26, goto(I26, id) ≡ I27

-goto(I27, asg)

I 41: assign → id asg expr semi, type | begin | id | if |

expr → exp aws expr colon expr, semi

expr → exp, semi

exp → exp or exp1, semi | aws | or

exp → exp1, semi | aws | or

exp1 → exp1 and term, semi | aws | or | and

exp1 → term, semi | aws | or | and

term → term relop1 term1, semi | aws | or | and | relop1

term → term1, semi | aws | or | and | relop1

term1 → term1 relop2 term2, semi | aws | or | and | relop1| relop2

term1 → term2, semi | aws | or | and | relop1| relop2

term2 →.term2 op1 term3, semi | aws | or | and | relop1| relop2 | op1term2 → term3, semi | aws | or | and | relop1| relop2 | op1

term3→.term3 op2 factor, semi | aws | or | and | relop1| relop2 |op1|op2term3 → factor, semi | aws | or | and | relop1| relop2 |op1|op2

Trang 22

factor → not factor1, semi | aws | or | and | relop1| relop2 |op1|op2

-goto(I30, id1)

I 42: dec_var → type id id1 semi dec_var, type | begin | id | if |

Goto(I30, coma) ≡ I8, goto(I30, open) ≡ I9

Goto(I31, assign)

I 43: assign → if expr assign., type | begin | id | if |

assign → if expr assign else assign, type | begin | id | if |

I 46: assign → if expr assign, type | begin | id | if | | else

assign → if expr assign else assign, type | begin | id | if | | else

expr → exp aws expr colon expr, type | begin | id | if |

expr → exp, type | begin | id | if |

exp → exp or exp1, type | begin | id | if | aws | or |

exp → exp1, type | begin | id | if | aws | or |

exp1 → exp1 and term, type | begin | id | if | aws | or | and |

exp1 → term, type | begin | id | if | aws | or | and |

term → term relop1 term1, type | begin | id | if | aws | or | and | relop1 |

term → term1, type | begin | id | if | aws | or | and | relop1 |

term1 → term1 relop2 term2, type| begin| id| if| aws| or| and|

relop1|relop2|

term1 → term2, type| begin| id| if| aws| or| and| relop1|relop2|

term2 →.term2 op1 term3, type|begin|id|if|aws|or|and|

relop1|relop2|op1|

term2 → term3, type|begin|id|if|aws|or|and|relop1|relop2|op1|

term3→.term3 op2 factor,type|begin|id|if|aws|or|and|

Trang 23

term3 → factor, type|begin|id|if|aws|or|and|relop1|relop2|op1|op2|

factor → not factor1,type|begin|id|if|aws|or|and|relop1|relop2|op1|op2|

goto(I31, begin)

I 47: assign → begin assign_list end, type | begin | id | if | | else

assign_list → assign assign_list, end

assign_list → , end

assign → dec_var, type | begin | id | if |

dec_var → type id id1 semi dec_var, type | begin | id | if |

assign → if expr assign, type | begin | id | if |

assign → if expr assign else assign, type | begin | id | if |

assign → begin assign_list end, type | begin | id | if |

assign → id asg expr semi, type | begin | id | if |

I 49: expr → exp aws expr colon expr, type | begin | id | if |

expr → exp aws expr colon expr, colon

expr → exp, colon

exp → exp or exp1, colon | aws | or

exp → exp1, colon | aws | or

exp1 → exp1 and term, colon | aws | and | or

exp1 → term, colon | aws | and | or

term → term relop1 term1, colon | aws | and | relop1 | or

term → term1, colon | aws | and | relop1 | or

term1 → term1 relop2 term2, colon | aws | and | relop1 | relop2 | orterm1 → term2, colon | aws | and | relop1 | relop2 | or

term2 →.term2 op1 term3, colon|aws|or|and|relop1|relop2|op1

term2 → term3, colon |aws|or|and|relop1|relop2|op1

Trang 24

term3→.term3 op2 factor,colon|aws|or|and|relop1|relop2|op1|op2

term3 → factor, colon|aws|or|and|relop1|relop2|op1|op2

factor → not factor1, colon|aws|or|and|relop1|relop2|op1|op2

Goto(I32, or)

I 50: exp → exp or exp1, type | begin | id | if | aws | or |

exp1 → exp1 and term, type | begin | id | if | aws | or | | and

exp1 → term, type | begin | id | if | aws | or | | and

term → term relop1 term1, type | begin | id | if | aws | or | | and | relop1term → term1, type | begin | id | if | aws | or | | and | relop1

term1 →.term1 relop2 term2, type| begin| id| if| aws| or| | and| relop1|relop2

term1 → term2, type| begin| id| if| aws| or| | and| relop1| relop2

term2 →.term2 op1 term3, type|begin|id|if| aws| or| | and| relop1| relop2|op1

term2 → term3, type| begin| id| if| aws| or| | and| relop1| relop2| op1

term3 → term3 op2 factor, type|begin|id|if|aws|or| |and|

relop1|relop2|op1|op2term3 → factor, type| begin| id| if| aws| or| | and| relop1| relop2|op1|op2factor →.not factor1, type|begin| id| if| aws| or| | and| relop1| relop2|op1|op2 -

Goto(I33, and)

I 51: exp1 → exp1 and term, type | begin | id | if | aws | or | and |

term → term relop1 term1, type | begin | id | if | aws | or | | and | relop1term → term1, type | begin | id | if | aws | or | | and | relop1

term1 →.term1 relop2 term2, type| begin| id| if| aws| or| | and| relop1|relop2

term1 → term2, type| begin| id| if| aws| or| | and| relop1| relop2

term2 →.term2 op1 term3, type|begin|id|if| aws| or| | and| relop1| relop2|op1

term2 → term3, type| begin| id| if| aws| or| | and| relop1| relop2| op1

Trang 25

term3 → term3 op2 factor, type|begin|id|if|aws|or| |and|

relop1|relop2|op1|op2term3 → factor, type| begin| id| if| aws| or| | and| relop1| relop2|op1|op2factor →.not factor1, type|begin| id| if| aws| or| | and| relop1| relop2|op1|op2 -

Goto(I34, relop1)

I 52: term → term relop1 term1, type | begin | id | if | aws | or | and | relop1 |

term1 →.term1 relop2 term2, type| begin| id| if| aws| or| | and| relop1|relop2

term1 → term2, type| begin| id| if| aws| or| | and| relop1| relop2

term2 →.term2 op1 term3, type|begin|id|if| aws| or| | and| relop1| relop2|op1

term2 → term3, type| begin| id| if| aws| or| | and| relop1| relop2| op1

term3 → term3 op2 factor, type|begin|id|if|aws|or| |and|

relop1|relop2|op1|op2term3 → factor, type| begin| id| if| aws| or| | and| relop1| relop2|op1|op2factor →.not factor1, type|begin| id| if| aws| or| | and| relop1| relop2|op1|op2 -Goto(I35, relop2)

I 53: term1 → term1 relop2 term2, type| begin| id| if| aws| or| and| relop1|relop2|

term2 →.term2 op1 term3, type|begin|id|if| aws| or| | and| relop1| relop2|op1

term2 → term3, type| begin| id| if| aws| or| | and| relop1| relop2| op1

term3 → term3 op2 factor, type|begin|id|if|aws|or| |and|

relop1|relop2|op1|op2term3 → factor, type| begin| id| if| aws| or| | and| relop1| relop2|op1|op2factor →.not factor1, type|begin| id| if| aws| or| | and| relop1| relop2|op1|op2 -

Goto(I36, op1)

I 54: term2 →term2 op1 term3, type|begin|id|if|aws|or|and|relop1|relop2|op1|

term3 → term3 op2 factor, type|begin|id|if|aws|or| |and|

Trang 26

relop1|relop2|op1|op2term3 → factor, type| begin| id| if| aws| or| | and| relop1| relop2|op1|op2factor →.not factor1, type|begin| id| if| aws| or| | and| relop1| relop2|op1|op2 -

I 57: factor1 → left expr right, type | begin | id | if | aws | or | and |

relop1| relop2 |op1 |op2 |

expr → exp aws expr colon expr, right

expr → exp, right

exp → exp or exp1, right | aws | or

exp → exp1, right | aws | or

exp1 → exp1 and term, right | aws | or | and

exp1 → term, right | aws | or | and

term → term relop1 term1, right | aws | or | and | relop1

term → term1, right | aws | or | and | relop1

term1 → term1 relop2 term2, right | aws | or | and | relop1 | relop2

term1 → term2, right | aws | or | and | relop1 | relop2

term2 →.term2 op1 term3, right | aws | or | and | relop1 | relop2 | op1

term2 → term3, right | aws | or | and | relop1 | relop2 | op1

term3→.term3 op2 factor, right | aws | or | and | relop1 | relop2 | op1| op2term3 → factor, right | aws | or | and | relop1 | relop2 | op1| op2

factor → not factor1, right | aws | or | and | relop1 | relop2 | op1| op2

factor1 → left type right id, type|begin|id|if|aws|or|and|

relop1|relop2|op1|op2|

Trang 27

Goto(I39, id)

-I 58: factor1 → id., type|begin|id|if|aws|or|and|relop1|relop2|op1|op2|

-Goto(I39, num)

I 59: factor1 → num., type|begin|id|if|aws|or|and|relop1|relop2|op1|op2|

Goto(I39, real)

-I 60: factor1 → real., type|begin|id|if|aws|or|and|relop1|relop2|op1|op2|

I 63: expr → exp aws expr colon expr, semi

expr → exp., semi

exp → exp or exp1, semi | aws | or

-Goto(I41, exp1)

I 64: exp → exp1., semi | aws | or

exp1 → exp1 and term, semi | aws | or | and

-Goto(I41, term)

I 65: exp1 → term., semi | aws | or | and

term → term relop1 term1, semi | aws | or | and | relop1

-Goto(I41, term1)

I 66: term → term1., semi | aws | or | and | relop1

term1 → term1 relop2 term2, semi | aws | or | and | relop1| relop2 -

Goto(I41, term2)

I 67: term1 → term2., semi | aws | or | and | relop1| relop2

Trang 28

term2 →term2 op1 term3, semi | aws | or | and | relop1| relop2 | op1 -

Goto(I41, term3)

I 68: term2 → term3., semi | aws | or | and | relop1| relop2 | op1

term3→term3 op2 factor, semi | aws | or | and | relop1| relop2 |op1|op2 -

Goto(I41, factor)

I 69: term3 → factor., semi | aws | or | and | relop1| relop2 |op1|op2

-Goto(I41, not)

I 70: factor → not factor1, semi | aws | or | and | relop1| relop2 |op1|op2

factor1 → left expr right, semi| aws| or| and| relop1| relop2|op1|op2factor1 → id, semi | aws | or | and | relop1| relop2 |op1|op2

factor1 → num, semi | aws | or | and | relop1| relop2 |op1|op2

factor1 → real, semi | aws | or | and | relop1| relop2 |op1|op2

factor1 → left type right id, semi | aws | or | and | relop1| relop2 |op1|op2 -

Goto(I42, semi)

I 71: dec_var → type id id1 semi dec_var, type | begin | id | if |

dec_var → type id id1 semi dec_var, type | begin | id | if |

dec_var → , type | begin | id | if |

-Goto(I43, else)

I 72: assign → if expr assign else assign, type | begin | id | if |

assign → dec_var, type | begin | id | if |

dec_var → type id id1 semi dec_var, type | begin | id | if |

assign → if expr assign, type | begin | id | if |

assign → if expr assign else assign, type | begin | id | if |

assign → begin assign_list end, type | begin | id | if |

assign → id asg expr semi, type | begin | id | if |

-Goto(I45, id)

I 73: dec_var → type id id1 semi dec_var, type | begin | id | if | | else

id1 → coma id id1, semi

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

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w