Tải bản đầy đủ (.ppt) (270 trang)

Chuong trinh dich

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 (551.99 KB, 270 trang )

<span class='text_page_counter'>(1)</span><div class='page_container' data-page=1>

1


<b>ĐẠI HỌC ĐÀ NẴNG</b>


<b>TRƯỜNG ĐẠI HỌC BÁCH KHOA </b>


<b>KHOA CÔNG NGHỆ THÔNG TIN</b>


</div>
<span class='text_page_counter'>(2)</span><div class='page_container' data-page=2>

2

<b>Mục tiêu giáo trình</b>



<b>1. Cung cấp những kiến thức cơ bản về </b>
<b>chương trình dịch</b>


<b>2. Cung cấp các phương pháp phân </b>
<b>tích từ vựng, phân tích cú pháp.</b>


<b>3. Cơ sở cho việc tìm hiểu các ngơn ngữ </b>
<b>lập trình.</b>


<b>4. Rèn luyện kỹ năng lập trình cho sinh </b>
<b>viên</b>


<b>TRƯỜNG ĐẠI HỌC BÁCH KHOA ĐÀ NẴNG</b>


</div>
<span class='text_page_counter'>(3)</span><div class='page_container' data-page=3>

3

<b>Nội dung giáo trình</b>



<b>CHƯƠNG 1. NHẬP MƠN CHƯƠNG TRÌNH DỊCH</b>
<b>CHƯƠNG 2. PHÂN TÍCH TỪ VỰNG</b>



<b>CHƯƠNG 3. CÁC VẤN ĐỀ CƠ BẢN VỀ PHÂN TÍCH CÚ PHÁP </b>
<b>CHƯƠNG 4. CÁC PHƯƠNG PHÁP PHÂN TÍCH CÚ PHÁP</b>


<b>TRƯỜNG ĐẠI HỌC BÁCH KHOA ĐÀ NẴNG</b>


</div>
<span class='text_page_counter'>(4)</span><div class='page_container' data-page=4>

4


<b>CHƯƠNG 1. NHẬP MƠN CHƯƠNG TRÌNH DỊCH</b>


<b>TRƯỜNG ĐẠI HỌC BÁCH KHOA ĐÀ NẴNG</b>


<b>1.</b> <b>Các khái niệm cơ bản</b>


<b>2.</b> <b>Đặc trưng của ngơn ngữ lập trình (NNLT) bậc cao</b>


<b>3.</b> <b>Các qui tắc từ vựng và cú pháp</b>


<b>4.</b> <b>Các chức năng của một trình biên dịch</b>


</div>
<span class='text_page_counter'>(5)</span><div class='page_container' data-page=5>

5


<b>CHƯƠNG 1. NHẬP MƠN CHƯƠNG TRÌNH DỊCH</b>


<b>TRƯỜNG ĐẠI HỌC BÁCH KHOA ĐÀ NẴNG</b>


<b>1.</b> <b>Các khái niệm cơ bản</b>


<b>1.1. Sự phát triển của ngơn ngữ lập trình</b>


<b>1.2. Khái niệm chương trình dịch</b>



<b>1.3. Phân loại chương trình dịch</b>


<b>1.4. Các ứng dụng khác của kỹ thuật dịch</b>


</div>
<span class='text_page_counter'>(6)</span><div class='page_container' data-page=6>

6


<b>CHƯƠNG 1. NHẬP MƠN CHƯƠNG TRÌNH DỊCH</b>


<b>TRƯỜNG ĐẠI HỌC BÁCH KHOA ĐÀ NẴNG</b>


<b>1.</b> <b>Các khái niệm cơ bản</b>


<b>1.1. Sự phát triển của ngơn ngữ lập trình</b>


Chương 2
<b>NN máy </b>


<b>(machine </b>
<b>language)</b>


<b>Hợp ngữ </b>
<b>(Assembly)</b>


</div>
<span class='text_page_counter'>(7)</span><div class='page_container' data-page=7>

7


<b>CHƯƠNG 1. NHẬP MƠN CHƯƠNG TRÌNH DỊCH</b>


<b>TRƯỜNG ĐẠI HỌC BÁCH KHOA ĐÀ NẴNG</b>



<b>1.</b> <b>Các khái niệm cơ bản</b>


<b>1.2. Khái niệm chương trình dịch</b>


<b> Chương trình dịch là chương trình dùng để </b>
<b>dịch một chương trình (CT nguồn) viết trên </b>
<b>NNLT nào đó (NN nguồn) sang một chương </b>
<b>trình tương đương (CT đích) trên một NN </b>
<b>khác (NN đích)</b>


</div>
<span class='text_page_counter'>(8)</span><div class='page_container' data-page=8>

8


<b>CHƯƠNG 1. NHẬP MƠN CHƯƠNG TRÌNH DỊCH</b>


<b>TRƯỜNG ĐẠI HỌC BÁCH KHOA ĐÀ NẴNG</b>


<b>1.</b> <b>Các khái niệm cơ bản</b>


<b>1.3. Phân loại chương trình dịch</b>


 <b><sub>Trình biên dịch</sub></b>


<b>CT nguồn</b> <b>Trình biên </b>


<b>dịch</b> <b>CT đích</b>


<b>Máy tính </b>


<b>thực thi</b> <b>Kết quả</b>



<b>Thời gian </b>
<b>dịch</b>


<b>Dữ liệu</b>


</div>
<span class='text_page_counter'>(9)</span><div class='page_container' data-page=9>

9


<b>CHƯƠNG 1. NHẬP MƠN CHƯƠNG TRÌNH DỊCH</b>


<b>TRƯỜNG ĐẠI HỌC BÁCH KHOA ĐÀ NẴNG</b>


<b>1.</b> <b>Các khái niệm cơ bản</b>


<b>1.3. Phân loại chương trình dịch</b>


 <b><sub>Trình thơng dịch</sub></b>


</div>
<span class='text_page_counter'>(10)</span><div class='page_container' data-page=10>

10


<b>CHƯƠNG 1. NHẬP MƠN CHƯƠNG TRÌNH DỊCH</b>


<b>TRƯỜNG ĐẠI HỌC BÁCH KHOA ĐÀ NẴNG</b>


<b>1.</b> <b>Các khái niệm cơ bản</b>


<b>1.4. Các ứng dụng khác của kỹ thuật dịch</b>


- <b><sub>Trong các hệ thống: phần giao tiếp giữa </sub></b>


<b>người và máy thông qua các câu lệnh.</b>



- <b><sub>Hệ thống xử lý NN tự nhiên: dịch thuật, tóm </sub></b>


<b>tắt văn bản.</b>


</div>
<span class='text_page_counter'>(11)</span><div class='page_container' data-page=11>

11


<b>CHƯƠNG 1. NHẬP MƠN CHƯƠNG TRÌNH DỊCH</b>


<b>TRƯỜNG ĐẠI HỌC BÁCH KHOA ĐÀ NẴNG</b>


<b>2.</b> <b>Đặc trưng của NNLT bậc cao</b>


- <b><sub>Tính tự nhiên</sub></b>
- <b>Tính thích nghi</b>


</div>
<span class='text_page_counter'>(12)</span><div class='page_container' data-page=12>

12


<b>CHƯƠNG 1. NHẬP MƠN CHƯƠNG TRÌNH DỊCH</b>


<b>TRƯỜNG ĐẠI HỌC BÁCH KHOA ĐÀ NẴNG</b>


<b>3.</b> <b>Các qui tắc từ vựng và cú pháp</b>


<b>3.1. Bản chữ cái</b>


- <b>Gồm những ký hiệu được phép sử dụng để viết </b>
<b>chương trình</b>


- <b>Số lượng, ý nghĩa sử dụng của các ký tự trong bản </b>


<b>chữ cái của các NN là khác nhau.</b>


- <b><sub>Nhìn chung bản chữ cái của các NNLT: </sub></b>


<b>+ 52 chữ cái: A </b><b>Z, a</b><b>z</b>


<b>+ 10 chữ số: 0 </b><b>9</b>


</div>
<span class='text_page_counter'>(13)</span><div class='page_container' data-page=13>

13


<b>CHƯƠNG 1. NHẬP MƠN CHƯƠNG TRÌNH DỊCH</b>


<b>TRƯỜNG ĐẠI HỌC BÁCH KHOA ĐÀ NẴNG</b>


<b>3.</b> <b>Các qui tắc từ vựng và cú pháp</b>


<b>3.2. Từ tố (Token)</b>


- <b><sub>Từ tố là đơn vị nhỏ nhất có nghĩa</sub></b>
- <b><sub>Từ tố được xây dựng từ bản chữ cái</sub></b>


</div>
<span class='text_page_counter'>(14)</span><div class='page_container' data-page=14>

14


<b>CHƯƠNG 1. NHẬP MÔN CHƯƠNG TRÌNH DỊCH</b>


<b>TRƯỜNG ĐẠI HỌC BÁCH KHOA ĐÀ NẴNG</b>


<b>3.</b> <b>Các qui tắc từ vựng và cú pháp</b>


<b>3.3. Phạm trù cú pháp</b>



- <b><sub>Phạm trù cú pháp là một dãy từ tố kết hợp </sub></b>


<b>theo một qui luật nào đó</b>


- <b><sub>Các cách biểu diễn cú pháp thông thường</sub></b>


<b>+ BNF(Backus Naus Form): </b>


</div>
<span class='text_page_counter'>(15)</span><div class='page_container' data-page=15>

15


<b>CHƯƠNG 1. NHẬP MƠN CHƯƠNG TRÌNH DỊCH</b>


<b>TRƯỜNG ĐẠI HỌC BÁCH KHOA ĐÀ NẴNG</b>


<b>3.</b> <b>Các qui tắc từ vựng và cú pháp</b>


<b>3.3. Phạm trù cú pháp</b>


<b>+ Biểu đồ cú pháp:</b>


<b>Chương trình</b><b>Program </b><b>Danh biểu</b><b> Khối</b>


<b>Khối </b><b>- var…</b>


<b> - procedure </b><b> Danh biểu </b><b>Khối</b>


<b> - begin </b><b>lệnh </b><b> end </b>

<b>.</b>



- <b><sub>Mục tiêu của phạm trù cú pháp là việc định </sub></b>



</div>
<span class='text_page_counter'>(16)</span><div class='page_container' data-page=16>

16


<b>CHƯƠNG 1. NHẬP MÔN CHƯƠNG TRÌNH DỊCH</b>


<b>TRƯỜNG ĐẠI HỌC BÁCH KHOA ĐÀ NẴNG</b>


<b>3.</b> <b>Các qui tắc từ vựng và cú pháp</b>


<b>3.4. Các qui tắc từ vựng thông dụng</b>


- <b>Cách sử dụng khoảng trống(dấu trắng), dấu </b>
<b>tab(‘\t’), dấu sang dòng(‘\n’)</b>


</div>
<span class='text_page_counter'>(17)</span><div class='page_container' data-page=17>

17


<b>CHƯƠNG 1. NHẬP MƠN CHƯƠNG TRÌNH DỊCH</b>


<b>TRƯỜNG ĐẠI HỌC BÁCH KHOA ĐÀ NẴNG</b>


<b>3.</b> <b>Các qui tắc từ vựng và cú pháp</b>


<b>3.4. Các qui tắc từ vựng thông dụng</b>


- <b>Một khoảng trống là bắt buộc giữa các từ tố: </b>
<b>từ khố và tên,…</b>


<b>Ví dụ: program tenct;</b>


- <b><sub>Khoảng trống không bắt buộc: số và các </sub></b>



<b>phép tốn, tên biến và các phép tốn</b>
<b>Ví dụ: x:=x+3*3;</b>


</div>
<span class='text_page_counter'>(18)</span><div class='page_container' data-page=18>

18


<b>CHƯƠNG 1. NHẬP MƠN CHƯƠNG TRÌNH DỊCH</b>


<b>TRƯỜNG ĐẠI HỌC BÁCH KHOA ĐÀ NẴNG</b>


<b>4.</b> <b>Các chức năng của một chương trình biên dịch</b>


- <b><sub>Phân tích từ vựng</sub></b>
- <b>Phân tích cú pháp</b>


- <b><sub>Phân tích ngữ nghĩa</sub></b>
- <b><sub>Xử lý lỗi</sub></b>


</div>
<span class='text_page_counter'>(19)</span><div class='page_container' data-page=19>

19


<b>CHƯƠNG 1. NHẬP MƠN CHƯƠNG TRÌNH DỊCH</b>


<b>TRƯỜNG ĐẠI HỌC BÁCH KHOA ĐÀ NẴNG</b>


<b>4.</b> <b>Các chức năng của một chương trình biên dịch</b>


<b>4.1. Phân tích từ vựng</b>


- <b>CT nguồn là một dãy các ký tự. </b>



- <b><sub>Phân tích từ vựng là phân tích CT nguồn </sub></b>


<b>thành các từ tố (Token).</b>


- <b><sub>Các Token này sẽ là dữ liệu đầu vào của phân </sub></b>


</div>
<span class='text_page_counter'>(20)</span><div class='page_container' data-page=20>

20


<b>CHƯƠNG 1. NHẬP MÔN CHƯƠNG TRÌNH DỊCH</b>


<b>TRƯỜNG ĐẠI HỌC BÁCH KHOA ĐÀ NẴNG</b>


<b>4.</b> <b>Các chức năng của một chương trình biên dịch</b>


<b>4.2. Phân tích cú pháp</b>


- <b>Đầu vào sẽ là dãy các Token nối nhau bằng </b>
<b>một qui tắc nào đó.</b>


</div>
<span class='text_page_counter'>(21)</span><div class='page_container' data-page=21>

21


<b>CHƯƠNG 1. NHẬP MƠN CHƯƠNG TRÌNH DỊCH</b>


<b>TRƯỜNG ĐẠI HỌC BÁCH KHOA ĐÀ NẴNG</b>


<b>4.</b> <b>Các chức năng của một chương trình biên dịch</b>


<b>4.3. Phân tích ngữ nghĩa</b>


- <b>Kiểm tra tính hợp lệ của các phép tốn và các </b>


<b>phép xử lý</b>


- <b><sub>Ví dụ:</sub></b>


• <b><sub>Biến phải khai báo trước khi sử dụng </sub></b>


<b>(Pascal)</b>


• <b><sub>Kiểm tra tính tương thích kiểu dữ liệu của </sub></b>


</div>
<span class='text_page_counter'>(22)</span><div class='page_container' data-page=22>

22


<b>CHƯƠNG 1. NHẬP MƠN CHƯƠNG TRÌNH DỊCH</b>


<b>TRƯỜNG ĐẠI HỌC BÁCH KHOA ĐÀ NẴNG</b>


<b>4.</b> <b>Các chức năng của một chương trình biên dịch</b>


<b>4.4. Xử lý lỗi</b>


- <b>CT nguồn vẫn có thể xảy ra lỗi. </b>


</div>
<span class='text_page_counter'>(23)</span><div class='page_container' data-page=23>

23


<b>CHƯƠNG 1. NHẬP MƠN CHƯƠNG TRÌNH DỊCH</b>


<b>TRƯỜNG ĐẠI HỌC BÁCH KHOA ĐÀ NẴNG</b>


<b>4.</b> <b>Các chức năng của một chương trình biên dịch</b>



<b>4.4. Xử lý lỗi</b>


- <b>Có các loại lỗi:</b>


• <b><sub>Lỗi từ vựng (trong Pascal sử dụng biến mà </sub></b>


<b>chưa khai báo)</b>


• <b><sub>Lỗi cú pháp ((a+5; lỗi thiếu dấu ‘)’ )</sub></b>


</div>
<span class='text_page_counter'>(24)</span><div class='page_container' data-page=24>

24


<b>CHƯƠNG 1. NHẬP MƠN CHƯƠNG TRÌNH DỊCH</b>


<b>TRƯỜNG ĐẠI HỌC BÁCH KHOA ĐÀ NẴNG</b>


<b>4.</b> <b>Các chức năng của một chương trình biên dịch</b>


<b>4.5. sinh mã trung gian</b>


- <b>Sau giai đoạn phân tích ngữ nghĩa</b>


- <b><sub>Mã trung gian là một dạng trung gian của CT </sub></b>


<b>nguồn có 2 đặc điểm:</b>


• <b><sub>Dễ được sinh ra</sub></b>


</div>
<span class='text_page_counter'>(25)</span><div class='page_container' data-page=25>

25



<b>CHƯƠNG 1. NHẬP MƠN CHƯƠNG TRÌNH DỊCH</b>


<b>TRƯỜNG ĐẠI HỌC BÁCH KHOA ĐÀ NẴNG</b>


<b>4.</b> <b>Các chức năng của một chương trình biên dịch</b>


<b>4.6. Tối ưu mã trung gian</b>


- <b>Bỏ bớt các lệnh thừa.</b>


- <b><sub>Cải tiến lại mã trung gian để khi sinh mã đối </sub></b>


</div>
<span class='text_page_counter'>(26)</span><div class='page_container' data-page=26>

26


<b>CHƯƠNG 1. NHẬP MƠN CHƯƠNG TRÌNH DỊCH</b>


<b>TRƯỜNG ĐẠI HỌC BÁCH KHOA ĐÀ NẴNG</b>


<b>4.</b> <b>Các chức năng của một chương trình biên dịch</b>


<b>4.7. Sinh mã đối tượng</b>


- <b>Giai đoạn cuối của trình biên dịch.</b>


- <b><sub>Mã đối tượng có thể là mã máy, hợp ngữ hay </sub></b>


<b>một ngôn ngữ khác ngôn ngữ nguồn.</b>


 <b><sub>Các pha (giai đoạn) có thể thực hiện song hành</sub></b>
 <b><sub>Một vài pha có thể ghép lại thành lượt (chuyến)</sub></b>


 <b><sub>Một lượt sẽ đọc toàn bộ CT nguồn hay một </sub></b>


</div>
<span class='text_page_counter'>(27)</span><div class='page_container' data-page=27>

27


<b>CHƯƠNG 1. NHẬP MƠN CHƯƠNG TRÌNH DỊCH</b>


<b>TRƯỜNG ĐẠI HỌC BÁCH KHOA ĐÀ NẴNG</b>


<b>4.</b> <b>Các chức năng của một chương trình biên dịch</b>


<b>Ví dụ: </b>


a:=(b+c)*6
Bộ PTTV


id1:=(id2+id3)*Num4
Bộ PTCP


n1


id1 := n2
*
n3
id2
Num4
id3
+
Bộ PTNN
n1



id1 := n2
*
n3
id2
Intoreal(6)
id3
+


Bộ sinh mã trung gian


Temp1:=intoreal(6)
Temp2:=id2+id3
Temp3:=temp2*temp1
Id1:=temp3


Bộ tối ưu sinh mã trung gian


Temp1:=id2+id3
Id1:=temp1*6.0


Bộ sinh mã đối tượng


</div>
<span class='text_page_counter'>(28)</span><div class='page_container' data-page=28>

28


<b>CHƯƠNG 2. PHÂN TÍCH TỪ VỰNG</b>


<b>TRƯỜNG ĐẠI HỌC BÁCH KHOA ĐÀ NẴNG</b>


- <b><sub>Mục đích</sub></b>
- <b>Nội dung</b>



- <b><sub>Otomat hữu hạn đơn định</sub></b>
- <b><sub>Bộ phân tích từ vựng</sub></b>


</div>
<span class='text_page_counter'>(29)</span><div class='page_container' data-page=29>

29


<b>CHƯƠNG 2. PHÂN TÍCH TỪ VỰNG</b>


<b>TRƯỜNG ĐẠI HỌC BÁCH KHOA ĐÀ NẴNG</b>


<b>1.</b> <b>Mục đích</b>


- <b>Chia cắt xâu vào (CT nguồn) thành dãy các </b>
<b>từ tố.</b>


- <b>Hai cách cài đặt</b>


• <b><sub>Sử dụng một lượt cho việc phân tích từ </sub></b>


<b>vựng </b><b> dãy các token </b><b>phân tích cú </b>


<b>pháp.</b>


</div>
<span class='text_page_counter'>(30)</span><div class='page_container' data-page=30>

30


<b>CHƯƠNG 2. PHÂN TÍCH TỪ VỰNG</b>


<b>TRƯỜNG ĐẠI HỌC BÁCH KHOA ĐÀ NẴNG</b>


<b>2.</b> <b>Nội dung</b>



- <b><sub>Đọc xâu vào từng ký tự một </sub></b><sub></sub><b><sub> gom lại </sub></b>


<b>thành token đến khi gặp ký tự không thể kết </b>
<b>hợp thành token.</b>


- <b><sub>Luôn luôn đọc trước một ký tự.</sub></b>


- <b><sub>Loại bỏ các ký tự trống và chú thích.</sub></b>


- <b>Chuyển những thông tin của những từ tố </b>
<b>(văn bản, mã phân loại) vừa phát hiện cho </b>
<b>bộ phân tích cú pháp.</b>


</div>
<span class='text_page_counter'>(31)</span><div class='page_container' data-page=31>

31


<b>CHƯƠNG 2. PHÂN TÍCH TỪ VỰNG</b>


<b>TRƯỜNG ĐẠI HỌC BÁCH KHOA ĐÀ NẴNG</b>


<b>2.</b> <b>Nội dung</b>


- <b><sub>Sự giao tiếp giữa bộ phân tích từ vựng và bộ </sub></b>


<b>phân tích cú pháp</b>


<b>CT </b>
<b>nguồn</b>


<b>Bộ </b>


<b>phân tích </b>


<b>từ vựng</b>


<b>Gửi token</b> <b><sub>Bộ </sub></b>
<b>phân tích </b>


<b>cú pháp</b>
<b>Yêu cầu token</b>


</div>
<span class='text_page_counter'>(32)</span><div class='page_container' data-page=32>

32


<b>CHƯƠNG 2. PHÂN TÍCH TỪ VỰNG</b>


<b>TRƯỜNG ĐẠI HỌC BÁCH KHOA ĐÀ NẴNG</b>


<b>3.</b> <b>Otomat hữu hạn đơn định</b>


<b>3.1. Định nghĩa: M(Σ, Q, δ, q0, F)</b>
<b>Σ: bộ chữ vào</b>


<b>Q: tập hữu hạn các trạng thái</b>
<b>q0 </b><b> Q: trạng thái đầu</b>


<b>F </b><b> Q: tập các trạng thái kết thúc</b>


<b>δ: hàm chuyển trạng thái có dạng δ(q,a)=p </b>
<b>Với q,p </b><b> Q, a </b><b> Σ</b>


 <b><sub>δ(q,a)=p: nghĩa là ở trạng thái q, đọc a, chuyển </sub></b>



</div>
<span class='text_page_counter'>(33)</span><div class='page_container' data-page=33>

33


<b>CHƯƠNG 2. PHÂN TÍCH TỪ VỰNG</b>


<b>TRƯỜNG ĐẠI HỌC BÁCH KHOA ĐÀ NẴNG</b>


<b>3.</b> <b>Otomat hữu hạn đơn định</b>


<b>3.2. Biểu diễn các hàm chuyển trạng thái</b>


 <b><sub>Dùng bảng: sử dụng ma trận δ có:</sub></b>


- <b>Chỉ số hàng: trạng thái</b>


- <b><sub>Chỉ số cột: ký hiệu vào</sub></b>


- <b><sub>Giá trị tại hàng q, cột a là trạng thái p, </sub></b>


</div>
<span class='text_page_counter'>(34)</span><div class='page_container' data-page=34>

34


<b>CHƯƠNG 2. PHÂN TÍCH TỪ VỰNG</b>


<b>TRƯỜNG ĐẠI HỌC BÁCH KHOA ĐÀ NẴNG</b>


<b>3.</b> <b>Otomat hữu hạn đơn định</b>


<b>3.2. Biểu diễn các hàm chuyển trạng thái</b>


 <b><sub>Dùng bảng: </sub></b>



<b>Ví dụ: có hàm chuyển của một Otomat như </b>
<b>sau: δ(1,a)=2, δ(2,b)=2, δ(2,c)=2</b>


<b>δ</b>

a

b

c



1

2



</div>
<span class='text_page_counter'>(35)</span><div class='page_container' data-page=35>

35


<b>CHƯƠNG 2. PHÂN TÍCH TỪ VỰNG</b>


<b>TRƯỜNG ĐẠI HỌC BÁCH KHOA ĐÀ NẴNG</b>


<b>3.</b> <b>Otomat hữu hạn đơn định</b>


<b>3.2. Biểu diễn các hàm chuyển trạng thái</b>


 <b><sub>Hình vẽ: </sub></b>


- <b><sub>mỗi trạng thái q</sub></b><sub></sub><b><sub>Q được đặt trong các vòng </sub></b>


<b>tròn.</b>


- <b><sub>Trạng thái bắt đầu q0 có thêm dấu ‘>’ ở đầu.</sub></b>
- <b><sub>Trạng thái kết thúc q</sub></b><sub></sub><b><sub>F được đặt trong vòng </sub></b>


<b>tròn kép.</b>


- <b><sub>Các cung nối từ trạng thái q sang trạng thái p </sub></b>



</div>
<span class='text_page_counter'>(36)</span><div class='page_container' data-page=36>

36


<b>CHƯƠNG 2. PHÂN TÍCH TỪ VỰNG</b>


<b>TRƯỜNG ĐẠI HỌC BÁCH KHOA ĐÀ NẴNG</b>


<b>3.</b> <b>Otomat hữu hạn đơn định</b>


<b>3.2. Biểu diễn các hàm chuyển trạng thái</b>


 <b><sub>Hình vẽ: </sub></b>


<b>Ví dụ: có hàm chuyển của một Otomat như </b>
<b>sau: δ(1,a)=2, δ(2,b)=2, δ(2,c)=2</b>


<b>1</b> <b>a</b> <b>2</b>


<b>b</b>


</div>
<span class='text_page_counter'>(37)</span><div class='page_container' data-page=37>

37


<b>CHƯƠNG 2. PHÂN TÍCH TỪ VỰNG</b>


<b>TRƯỜNG ĐẠI HỌC BÁCH KHOA ĐÀ NẴNG</b>


<b>3.</b> <b>Otomat hữu hạn đơn định</b>


<b>3.2. Biểu diễn các hàm chuyển trạng thái</b>



 <b><sub>Nhận xét:</sub></b>


- <b><sub>Biểu diễn hàm chuyển trạng thái bằng hình </sub></b>


<b>vẽ có ưu điểm hơn. Trong hình vẽ ta xác </b>
<b>định đầy đủ tất cả các thành phần của </b>
<b>Otomat.</b>


- <b><sub>Biểu diễn bằng bảng xác định hàm chuyển </sub></b>


</div>
<span class='text_page_counter'>(38)</span><div class='page_container' data-page=38>

38


<b>CHƯƠNG 2. PHÂN TÍCH TỪ VỰNG</b>


<b>TRƯỜNG ĐẠI HỌC BÁCH KHOA ĐÀ NẴNG</b>


<b>3.</b> <b>Otomat hữu hạn đơn định</b>


<b>3.3. Hoạt động của Otomat</b>


- <b><sub>Đọc các ký hiệu của xâu vào từ trái sang phải, </sub></b>


<b>bắt đầu từ trạng thái q0.</b>


- <b><sub>Mỗi bước đọc một ký hiệu thì chuyển sang </sub></b>


</div>
<span class='text_page_counter'>(39)</span><div class='page_container' data-page=39>

39


<b>CHƯƠNG 2. PHÂN TÍCH TỪ VỰNG</b>



<b>TRƯỜNG ĐẠI HỌC BÁCH KHOA ĐÀ NẴNG</b>


<b>3.</b> <b>Otomat hữu hạn đơn định</b>


<b>3.3. Hoạt động của Otomat</b>


- <b><sub>Đọc xong xâu vào đến một trạng thái p</sub></b><sub></sub><b><sub>F </sub></b>


<b>thì xâu vào được đốn nhận (xâu đúng).</b>


- <b><sub>Đọc xong xâu vào mà rơi vào trạng thái p</sub></b><sub></sub><b><sub>F </sub></b>


<b>thì xâu vào khơng được đốn nhận.</b>


- <b><sub>Khơng đọc xong xâu vào (do δ rơi vào điểm </sub></b>


</div>
<span class='text_page_counter'>(40)</span><div class='page_container' data-page=40>

40


<b>CHƯƠNG 2. PHÂN TÍCH TỪ VỰNG</b>


<b>TRƯỜNG ĐẠI HỌC BÁCH KHOA ĐÀ NẴNG</b>


<b>3.</b> <b>Otomat hữu hạn đơn định</b>


<b>3.4. Ví dụ: Xác định Otomat đoán nhận số nhị </b>
<b>phân. M(Σ, Q, δ, q0, F)</b>


<b>Σ: {0, 1, trắng}</b>
<b>Q: {0, 1, 2}</b>



<b>q0: 0</b>
<b>F : {2}</b>


<b>δ: δ(0,trắng)=0, δ(0,0)=1, δ(0,1)=1, </b>


</div>
<span class='text_page_counter'>(41)</span><div class='page_container' data-page=41>

41


<b>CHƯƠNG 2. PHÂN TÍCH TỪ VỰNG</b>


<b>TRƯỜNG ĐẠI HỌC BÁCH KHOA ĐÀ NẴNG</b>


<b>3.</b> <b>Otomat hữu hạn đơn định</b>


<b>3.4. Ví dụ: Xác định Otomat đoán nhận số nhị </b>
<b>phân</b>


<b>0</b> <b>0|1</b> <b>1</b>


<b>0</b>


<b>1</b>


<b>trắng</b>


<b>2</b>


</div>
<span class='text_page_counter'>(42)</span><div class='page_container' data-page=42>

42


<b>CHƯƠNG 2. PHÂN TÍCH TỪ VỰNG</b>



<b>TRƯỜNG ĐẠI HỌC BÁCH KHOA ĐÀ NẴNG</b>


<b>q</b>


<b>4.Lập bộ phân tích từ vựng</b>


<b>Ngồi các hình qui ước của Otomat thơng </b>
<b>thường lại có thêm:</b>


<b>*</b>


</div>
<span class='text_page_counter'>(43)</span><div class='page_container' data-page=43>

43


<b>CHƯƠNG 2. PHÂN TÍCH TỪ VỰNG</b>


<b>TRƯỜNG ĐẠI HỌC BÁCH KHOA ĐÀ NẴNG</b>


<b>4. Lập bộ phân tích từ vựng</b>


<b>4.1. Phương pháp mơ phỏng</b>


-<b><sub> Mỗi trạng thái: tương ứng với một đoạn </sub></b>


<b>chương trình</b>


-<b><sub> Nối tiếp các trạng thái: nối tiếp 2 đoạn chương </sub></b>


<b>trình tương ứng</b>


-<b><sub> </sub></b>





</div>
<span class='text_page_counter'>(44)</span><div class='page_container' data-page=44>

44


<b>CHƯƠNG 2. PHÂN TÍCH TỪ VỰNG</b>


<b>TRƯỜNG ĐẠI HỌC BÁCH KHOA ĐÀ NẴNG</b>


<b>4.Lập bộ phân tích từ vựng</b>


>


0 1 =


3
>
khác
2
4 *
5 =
7
khác
6
8 *
<
<
9


! = <sub>10</sub>



11
khác *


12


= = <sub>13</sub>


14
khác *
1
5
+ <sub>1</sub>
6
=
1
8
+
khác
1
7
1
9
*
2
0
=
2
2
khác


2
1
2
3
*


-24


* = 25


26


khác *


27


/ = 28


29


khác *
% 30


ss lớn hơn bằng


dịch phải


ss lớn hơn



ss nhỏ hơn bằng


dịch trái


ss nhỏ hơn
ss khác


phủ định


ss không bằng


gán


cộng bằng


tăng 1


cộng
trừ bằng


giảm 1
trừ
nhân bằng
nhân
chia bằng
chia
chia lấy dư


</div>
<span class='text_page_counter'>(45)</span><div class='page_container' data-page=45>

45



<b>CHƯƠNG 2. PHÂN TÍCH TỪ VỰNG</b>


<b>TRƯỜNG ĐẠI HỌC BÁCH KHOA ĐÀ NẴNG</b>


<b>4.Lập bộ phân tích từ vựng</b>


<b>4.1. Phương pháp mơ phỏng</b>


<b>const int ERROR_STATE=100;</b>


<b>typedef int state;// kieu cac trang thai</b>


<b>typedef unsigned char *attri;// kieu cua thuoc tinh</b>
<b>typedef unsigned char *token; //kieu cua tu to</b>


<b>unsigned char *x;//xau vao x</b>


<b>unsigned int i=0;// vi tri cua ky tu doc trong xau x</b>


<b>unsigned char readchar(unsigned char *x, unsigned int i){</b>
<b>//tra ve ky tu tiep theo</b>


</div>
<span class='text_page_counter'>(46)</span><div class='page_container' data-page=46>

46


<b>CHƯƠNG 2. PHÂN TÍCH TỪ VỰNG</b>


<b>TRƯỜNG ĐẠI HỌC BÁCH KHOA ĐÀ NẴNG</b>


<b>4.Lập bộ phân tích từ vựng</b>



<b>4.1. Phương pháp mô phỏng</b>


<b>attri attribute(state s) {</b>


<b>// tra ve thuoc tinh tuong ung voi trang thai ket thuc</b>
<b>char *ch;</b>


<b>switch(s){</b>


<b>case 2: strcpy(ch,"so sanh lon hon bang");break;</b>
<b>case 3: strcpy(ch,"dich phai"); break;</b>


<b>case 4: strcpy(ch,"so sanh lon hon"); break;</b>
<b>case 6: strcpy(ch,"so sanh nho hon </b>


<b>bang");break;</b>


<b>case 7: strcpy(ch,"dich trai"); break;</b>


</div>
<span class='text_page_counter'>(47)</span><div class='page_container' data-page=47>

47


<b>CHƯƠNG 2. PHÂN TÍCH TỪ VỰNG</b>


<b>TRƯỜNG ĐẠI HỌC BÁCH KHOA ĐÀ NẴNG</b>


<b>4.Lập bộ phân tích từ vựng</b>


<b>4.1. Phương pháp mơ phỏng</b>


<b>case 10: strcpy(ch,"so sanh khong bang"); </b>


<b>break;</b>


<b>case 11: strcpy(ch,"phu dinh"); break;</b>
<b>case 13: strcpy(ch,"so sanh bang"); break;</b>
<b>case 14: strcpy(ch,"gan"); break;</b>


<b>case 17: strcpy(ch,"cong bang"); break;</b>
<b>case 18: strcpy(ch,"tang 1"); break;</b>


<b>case 19: strcpy(ch,"cong"); break;</b>


</div>
<span class='text_page_counter'>(48)</span><div class='page_container' data-page=48>

48


<b>CHƯƠNG 2. PHÂN TÍCH TỪ VỰNG</b>


<b>TRƯỜNG ĐẠI HỌC BÁCH KHOA ĐÀ NẴNG</b>


<b>4.Lập bộ phân tích từ vựng</b>


<b>4.1. Phương pháp mơ phỏng</b>


<b>case 25: strcpy(ch,"nhan bang"); break;</b>
<b>case 26: strcpy(ch,"nhan"); break;</b>


<b>case 28: strcpy(ch,"chia bang"); break;</b>
<b>case 29: strcpy(ch,"chia"); break;</b>


<b>case 30: strcpy(ch,"chia lay du"); break;</b>


<b>default: strcpy(ch,"token ko duoc doan nhan(tt </b>


<b>ko dung \0");</b>


<b>}</b>


</div>
<span class='text_page_counter'>(49)</span><div class='page_container' data-page=49>

49


<b>CHƯƠNG 2. PHÂN TÍCH TỪ VỰNG</b>


<b>TRƯỜNG ĐẠI HỌC BÁCH KHOA ĐÀ NẴNG</b>


<b>4.Lập bộ phân tích từ vựng</b>


<b>4.1. Phương pháp mơ phỏng</b>


<b>int nostar_end_state(state s){</b>


<b>//kiem tra trang thai s co phai la trang thai ket thuc khong sao ?</b>
<b>switch(s){</b>


</div>
<span class='text_page_counter'>(50)</span><div class='page_container' data-page=50>

50


<b>CHƯƠNG 2. PHÂN TÍCH TỪ VỰNG</b>


<b>TRƯỜNG ĐẠI HỌC BÁCH KHOA ĐÀ NẴNG</b>


<b>4.Lập bộ phân tích từ vựng</b>


<b>4.1. Phương pháp mơ phỏng</b>


<b>case 18:</b>


<b>case 21:</b>
<b>case 22:</b>
<b>case 25:</b>
<b>case 28:</b>


<b>case 30: return 1;</b>
<b>default: return 0;</b>
<b>}</b>


</div>
<span class='text_page_counter'>(51)</span><div class='page_container' data-page=51>

51


<b>CHƯƠNG 2. PHÂN TÍCH TỪ VỰNG</b>


<b>TRƯỜNG ĐẠI HỌC BÁCH KHOA ĐÀ NẴNG</b>


<b>4.Lập bộ phân tích từ vựng</b>


<b>4.1. Phương pháp mơ phỏng</b>


<b>int star_end_state(state s){</b>


<b>//kiem tra trang thai s co phai la trang thai ket thuc sao ?</b>
<b>switch(s){</b>


</div>
<span class='text_page_counter'>(52)</span><div class='page_container' data-page=52>

52


<b>CHƯƠNG 2. PHÂN TÍCH TỪ VỰNG</b>


<b>TRƯỜNG ĐẠI HỌC BÁCH KHOA ĐÀ NẴNG</b>



<b>4.Lập bộ phân tích từ vựng</b>


<b>4.1. Phương pháp mô phỏng</b>


<b>case 26:</b>


<b>case 29: return 1;</b>
<b>default: return 0;</b>
<b>}</b>


</div>
<span class='text_page_counter'>(53)</span><div class='page_container' data-page=53>

53


<b>CHƯƠNG 2. PHÂN TÍCH TỪ VỰNG</b>


<b>TRƯỜNG ĐẠI HỌC BÁCH KHOA ĐÀ NẴNG</b>


<b>4.Lập bộ phân tích từ vựng</b>


<b>4.1. Phương pháp mô phỏng</b>


<b>state start_state_otherbrand(state s){</b>
<b>state start;</b>


<b>switch(s){</b>


<b>case 0: start=15; break;</b>


<b>case 15: start=ERROR_STATE;</b>
<b>}</b>



</div>
<span class='text_page_counter'>(54)</span><div class='page_container' data-page=54>

54


<b>CHƯƠNG 2. PHÂN TÍCH TỪ VỰNG</b>


<b>TRƯỜNG ĐẠI HỌC BÁCH KHOA ĐÀ NẴNG</b>


<b>4.Lập bộ phân tích từ vựng</b>


<b>4.1. Phương pháp mơ phỏng</b>


<b>void catchar_in_token (unsigned char c, token tk){</b>
<b>// ghep them ky tu c vao cho tu to tk</b>


<b>*(tk+strlen(tk))=c;</b>


<b>*(tk+strlen(tk)+1)='\0';</b>
<b>}</b>


<b>int start_state(state s){</b>


</div>
<span class='text_page_counter'>(55)</span><div class='page_container' data-page=55>

55


<b>CHƯƠNG 2. PHÂN TÍCH TỪ VỰNG</b>


<b>TRƯỜNG ĐẠI HỌC BÁCH KHOA ĐÀ NẴNG</b>


<b>4.Lập bộ phân tích từ vựng</b>


<b>4.1. Phương pháp mơ phỏng</b>



<b>token search_token (unsigned int *i, attri tt){</b>


<b>// tra ve tri tu vung cua tu to bdau tu vi tri i, thuoc tinh tra ve cho tt</b>
<b>token tk;</b>


<b>state s=0;</b>
<b>int stop=0;</b>


<b>unsigned char c;</b>
<b>do {</b>


<b>c=readchar(x,*i);</b>
<b>*i=*i+1;</b>


</div>
<span class='text_page_counter'>(56)</span><div class='page_container' data-page=56>

56


<b>CHƯƠNG 2. PHÂN TÍCH TỪ VỰNG</b>


<b>TRƯỜNG ĐẠI HỌC BÁCH KHOA ĐÀ NẴNG</b>


<b>4.Lập bộ phân tích từ vựng</b>


<b>4.1. Phương pháp mơ phỏng</b>


<b>while (*i<strlen(x)&&(!stop)){</b>
<b>switch(s){</b>


<b>case 0: if (c=='>') s=1;</b>


<b>else if (c=='<') s=5;</b>


<b>else if (c=='!') s=9;</b>
<b>else if (c=='=') s=12;</b>


</div>
<span class='text_page_counter'>(57)</span><div class='page_container' data-page=57>

57


<b>CHƯƠNG 2. PHÂN TÍCH TỪ VỰNG</b>


<b>TRƯỜNG ĐẠI HỌC BÁCH KHOA ĐÀ NẴNG</b>


<b>4.Lập bộ phân tích từ vựng</b>


<b>4.1. Phương pháp mô phỏng</b>


<b>case 1: if (c=='=') s=2;</b>


<b>else if (c=='>') s=3;</b>
<b>else s=4;</b>


<b>break;</b>


<b>case 5: if (c=='=') s=6;</b>


<b>else if (c=='<') s=7;</b>
<b>else s=8;</b>


</div>
<span class='text_page_counter'>(58)</span><div class='page_container' data-page=58>

58


<b>CHƯƠNG 2. PHÂN TÍCH TỪ VỰNG</b>


<b>TRƯỜNG ĐẠI HỌC BÁCH KHOA ĐÀ NẴNG</b>



<b>4.Lập bộ phân tích từ vựng</b>


<b>4.1. Phương pháp mơ phỏng</b>


<b>case 9: if (c=='=') s=10;</b>
<b>else s=11;</b>


<b>break;</b>


<b>case 12: if (c=='=') s=13;</b>
<b>else s=14;</b>


</div>
<span class='text_page_counter'>(59)</span><div class='page_container' data-page=59>

59


<b>CHƯƠNG 2. PHÂN TÍCH TỪ VỰNG</b>


<b>TRƯỜNG ĐẠI HỌC BÁCH KHOA ĐÀ NẴNG</b>


<b>4.Lập bộ phân tích từ vựng</b>


<b>4.1. Phương pháp mơ phỏng</b>


<b>case 15: if (c=='+') s=16;</b>
<b>else if (c=='-') s=20;</b>
<b>else if (c=='*') s=24;</b>
<b>else if (c=='/') s=27;</b>
<b>else if (c=='%') s=30;</b>


</div>
<span class='text_page_counter'>(60)</span><div class='page_container' data-page=60>

60



<b>CHƯƠNG 2. PHÂN TÍCH TỪ VỰNG</b>


<b>TRƯỜNG ĐẠI HỌC BÁCH KHOA ĐÀ NẴNG</b>


<b>4.Lập bộ phân tích từ vựng</b>


<b>4.1. Phương pháp mơ phỏng</b>


<b>case 16: if (c=='=') s=17;</b>


<b>else if (c=='+') s=18;</b>
<b>else s=19;</b>


<b>break;</b>


<b>case 20: if (c=='=') s=21;</b>
<b>else if (c=='-') s=22;</b>
<b>else s=23;</b>


</div>
<span class='text_page_counter'>(61)</span><div class='page_container' data-page=61>

61


<b>CHƯƠNG 2. PHÂN TÍCH TỪ VỰNG</b>


<b>TRƯỜNG ĐẠI HỌC BÁCH KHOA ĐÀ NẴNG</b>


<b>4.Lập bộ phân tích từ vựng</b>


<b>4.1. Phương pháp mơ phỏng</b>



<b>case 24: if (c=='=') s=25;</b>
<b>else s=26;</b>


<b>break;</b>


<b>case 27: if (c=='=') s=28;</b>
<b>else s=29;</b>


<b>break;</b>


</div>
<span class='text_page_counter'>(62)</span><div class='page_container' data-page=62>

62


<b>CHƯƠNG 2. PHÂN TÍCH TỪ VỰNG</b>


<b>TRƯỜNG ĐẠI HỌC BÁCH KHOA ĐÀ NẴNG</b>


<b>4.Lập bộ phân tích từ vựng</b>


<b>4.1. Phương pháp mô phỏng</b>


<b>if (s==ERROR_STATE){</b>
<b>stop=1;</b>


<b>printf("loi tai ky tu thu %i",*i);</b>
<b>*tk='\0'; }</b>


<b>else if (start_state(s));</b>


<b>else if (nostar_end_state(s)) {</b>
<b>catchar_in_token(c,tk);</b>


<b>*i=*i+1; stop=1;</b>


</div>
<span class='text_page_counter'>(63)</span><div class='page_container' data-page=63>

63


<b>CHƯƠNG 2. PHÂN TÍCH TỪ VỰNG</b>


<b>TRƯỜNG ĐẠI HỌC BÁCH KHOA ĐÀ NẴNG</b>


<b>4.Lập bộ phân tích từ vựng</b>


<b>4.1. Phương pháp mơ phỏng</b>


<b>else if (star_end_state(s)){</b>


<b> strcpy(tt,attribute(s)); stop=1;}</b>
<b>else {</b>


<b>catchar_in_token(c,tk); </b>
<b>*i=*i+1; </b>


<b>c=readchar(x,*i);}</b>
<b>}</b>


</div>
<span class='text_page_counter'>(64)</span><div class='page_container' data-page=64>

64


<b>CHƯƠNG 2. PHÂN TÍCH TỪ VỰNG</b>


<b>TRƯỜNG ĐẠI HỌC BÁCH KHOA ĐÀ NẴNG</b>


<b>4.Lập bộ phân tích từ vựng</b>



<b>4.1. Phương pháp mơ phỏng</b>


<b>void save_token_and_attribute(token tk,attri a){</b>
<b>//luu tru tk,a vao danh sach</b>


<b>}</b>


<b>void lexical_analysis(){</b>
<b>token tk; attri a;</b>
<b>do {</b>


<b>tk=search_token(&i,a);</b>


<b>save_token_and_attribute(tk,a);</b>
<b>}while ((*tk!='\0')&&(i<strlen(x)));</b>


</div>
<span class='text_page_counter'>(65)</span><div class='page_container' data-page=65>

65


<b>CHƯƠNG 2. PHÂN TÍCH TỪ VỰNG</b>


<b>TRƯỜNG ĐẠI HỌC BÁCH KHOA ĐÀ NẴNG</b>


<b>4.Lập bộ phân tích từ vựng</b>


<b>4.1. Phương pháp mô phỏng</b>


<b>main(){</b>


<b>//nhap xau vao x</b>


<b>i=0;</b>


<b>lexical_analysis();</b>


</div>
<span class='text_page_counter'>(66)</span><div class='page_container' data-page=66>

66


<b>CHƯƠNG 2. PHÂN TÍCH TỪ VỰNG</b>


<b>TRƯỜNG ĐẠI HỌC BÁCH KHOA ĐÀ NẴNG</b>


<b>4. Lập bộ phân tích từ vựng</b>


<b>4.2. Phương pháp điều khiển bằng bảng </b>


-<b><sub> Otomat phải chung một trạng thái bắt đầu</sub></b>


-<b><sub> Tạo bảng table biểu diễn hàm chuyển trạng thái</sub></b>
• <b>Chỉ số hàng: trạng thái q </b><b>Q</b>


• <b>Chỉ số cột: ký hiệu vào a </b>


</div>
<span class='text_page_counter'>(67)</span><div class='page_container' data-page=67>

67


<b>CHƯƠNG 2. PHÂN TÍCH TỪ VỰNG</b>


<b>TRƯỜNG ĐẠI HỌC BÁCH KHOA ĐÀ NẴNG</b>


<b>4.Lập bộ phân tích từ vựng</b>


>



0 1 =


3
>
khác
2
4 *
5 =
7
khác
6
8 *
<
<
9


! = <sub>10</sub>


11
khác *


12


= = <sub>13</sub>


14
khác *


0 + 1


6
=
1
8
+
khác
1
7
1
9
*
2
0
=
2
2
khác
2
1
2
3
*


-24


* = 25


26



khác *


27


/ = 28


29


khác *
% 30


ss lớn hơn bằng


dịch phải


ss lớn hơn


ss nhỏ hơn bằng


dịch trái


ss nhỏ hơn
ss khác


phủ định


ss không bằng


gán



cộng bằng


tăng 1


cộng
trừ bằng


</div>
<span class='text_page_counter'>(68)</span><div class='page_container' data-page=68>

68


<b>CHƯƠNG 2. PHÂN TÍCH TỪ VỰNG</b>


<b>TRƯỜNG ĐẠI HỌC BÁCH KHOA ĐÀ NẴNG</b>


<b>4. Lập bộ phân tích từ vựng</b>


<b>4.1. Phương pháp điều khiển bằng bảng </b>


<b>Trạng thái 100:Ko có hàm chuyển trạng thái</b>


<b>></b> <b>=</b> <b><</b> <b>!</b> <b>...</b>


<b>0</b> <b>1</b> <b>12</b> <b>5</b> <b>9</b>


<b>1</b> <b>3</b> <b>2</b> <b>4</b> <b>4</b>


<b>2</b> <b>100</b> <b>100</b> <b>100</b> <b>100</b>


</div>
<span class='text_page_counter'>(69)</span><div class='page_container' data-page=69>

69


<b>CHƯƠNG 2. PHÂN TÍCH TỪ VỰNG</b>



<b>TRƯỜNG ĐẠI HỌC BÁCH KHOA ĐÀ NẴNG</b>


<b>4.<sub>int table[][MAX];</sub> Lập bộ phân tích từ vựng</b>


<b>token search_token (unsigned int *i, attri tt){</b>


<b>// tra ve tri tu vung cua tu to bdau tu vi tri i, thuoc tinh tra ve cho tt</b>
<b>token tk; unsigned char c;</b>


<b>state s=0, cs;</b>


<b>//cắt ký tự trắng bỏ</b>
<b>do {</b>


<b>c=readchar(x,*i);</b>
<b>cs=table[s][c];</b>


<b>if (cs==ERROR_STATE){</b>


</div>
<span class='text_page_counter'>(70)</span><div class='page_container' data-page=70>

70


<b>CHƯƠNG 2. PHÂN TÍCH TỪ VỰNG</b>


<b>TRƯỜNG ĐẠI HỌC BÁCH KHOA ĐÀ NẴNG</b>


<b>4. Lập bộ phân tích từ vựng</b>


<b>if (star_end_state(cs)) {</b>



<b> strcpy(tt,attribute(cs)); </b>
<b>break;</b>


<b>}</b>


<b>if (nostar_end_state(cs)) {</b>


<b>catchar_in_token(c,tk);</b>
<b>*i++;</b>


<b> strcpy(tt,attribute(cs));</b>
<b>break;</b>


</div>
<span class='text_page_counter'>(71)</span><div class='page_container' data-page=71>

71


<b>CHƯƠNG 2. PHÂN TÍCH TỪ VỰNG</b>


<b>TRƯỜNG ĐẠI HỌC BÁCH KHOA ĐÀ NẴNG</b>


<b>4. Lập bộ phân tích từ vựng</b>


<b>if (*i>=(strlen(x)-1)) {</b>


<b>printf(“het xau vao, ko roi vao TT ket thuc”);</b>
<b>tk=“”; break;</b>


<b>}</b>


<b> catchar_in_token(c,tk);</b>
<b>*i++;</b>



</div>
<span class='text_page_counter'>(72)</span><div class='page_container' data-page=72>

72


<b>CHƯƠNG 2. PHÂN TÍCH TỪ VỰNG</b>


<b>TRƯỜNG ĐẠI HỌC BÁCH KHOA ĐÀ NẴNG</b>


<b>4. Lập bộ phân tích từ vựng</b>


<b>void create_table(int table[][MAX]){</b>
<b>// tao bang chuyen trang thai table</b>
<b>}</b>


<b>void lexical_analysis(){</b>
<b>token tk; attri a;</b>
<b>create_table(table);</b>
<b>do {</b>


<b>tk=search_token(&i,a);</b>


<b>save_token_and_attribute(tk,a);</b>
<b>}while ((*tk!='\0')&&(i<strlen(x)));</b>


</div>
<span class='text_page_counter'>(73)</span><div class='page_container' data-page=73>

73


<b>CHƯƠNG 2. PHÂN TÍCH TỪ VỰNG</b>


<b>TRƯỜNG ĐẠI HỌC BÁCH KHOA ĐÀ NẴNG</b>


<b>5.</b> <b>Bảng các từ tố </b>



<b>Gồm các token và các thuộc tính của token</b>


Chỉ số Ttính Trị từ vựng


token Các thuộc tính khác
01


02 Num 45


03 Id A


04 Id B


05


</div>
<span class='text_page_counter'>(74)</span><div class='page_container' data-page=74>

74


<b>CHƯƠNG 2. PHÂN TÍCH TỪ VỰNG</b>


<b>TRƯỜNG ĐẠI HỌC BÁCH KHOA ĐÀ NẴNG</b>


<b>6.</b> <b>Các cấu trúc dữ liệu cho bảng các từ tố</b>


- <b>Tổ chức tuần tự: mảng, danh sách liên kết, </b>
<b>danh sách móc nối</b>


</div>
<span class='text_page_counter'>(75)</span><div class='page_container' data-page=75>

75


<b>CHƯƠNG 3. CÁC VẤN ĐỀ CƠ BẢN VỀ </b>


<b>PHÂN TÍCH CÚ PHÁP</b>


<b>TRƯỜNG ĐẠI HỌC BÁCH KHOA ĐÀ NẴNG</b>


- <b><sub>Một số vấn đề về ngôn ngữ</sub></b>
- <b>Văn phạm phi ngữ cảnh</b>


- <b><sub>Đại cương về phân tích cú pháp</sub></b>


</div>
<span class='text_page_counter'>(76)</span><div class='page_container' data-page=76>

76


<b>CHƯƠNG 3. CÁC VẤN ĐỀ CƠ BẢN VỀ </b>
<b>PHÂN TÍCH CÚ PHÁP</b>


<b>TRƯỜNG ĐẠI HỌC BÁCH KHOA ĐÀ NẴNG</b>


<b>1.</b> <b>Một số vấn đề về ngôn ngữ</b>


<b>1.1. Xâu </b>


- <b><sub>Bộ chữ (bảng chữ) là tập hợp hữu hạn các </sub></b>


<b>ký hiệu</b>


<b>Ví dụ:{0,1} bộ chữ gồm 2 ký hiệu 0 và 1</b>


<b>{a,b,c,…,z} bộ chữ gồm các ký hiệu a </b><b>z</b>


</div>
<span class='text_page_counter'>(77)</span><div class='page_container' data-page=77>

77



<b>CHƯƠNG 3. CÁC VẤN ĐỀ CƠ BẢN VỀ </b>
<b>PHÂN TÍCH CÚ PHÁP</b>


<b>TRƯỜNG ĐẠI HỌC BÁCH KHOA ĐÀ NẴNG</b>


<b>1.</b> <b>Một số vấn đề về ngôn ngữ</b>


<b>1.1. Xâu</b>


- <b>Xâu trên bộ chữ V là 1 dãy các ký hiệu của V</b>
<b>Ví dụ:</b> <b>0110 là xâu trên bộ chữ {0,1}</b>


<b>a, ab, giathanh là xâu trên bộ chữ </b>
<b>{a,b,…,z}</b>


- <b><sub>Độ dài xâu là số các ký hiệu trong xâu</sub></b>


</div>
<span class='text_page_counter'>(78)</span><div class='page_container' data-page=78>

78


<b>CHƯƠNG 3. CÁC VẤN ĐỀ CƠ BẢN VỀ </b>
<b>PHÂN TÍCH CÚ PHÁP</b>


<b>TRƯỜNG ĐẠI HỌC BÁCH KHOA ĐÀ NẴNG</b>


<b>1.</b> <b>Một số vấn đề về ngôn ngữ</b>


<b>1.1. Xâu</b>


- <b><sub>Xâu rỗng là xâu có độ dài bằng 0</sub></b>



<b>Ký hiệu: </b> <b>, |</b><b>|=0</b>


- <b>Tập tất cả các xâu trên V là V*, {</b><sub></sub><b>}</b><sub></sub><b>V*</b>


<b>V+ =V *-{</b><sub></sub><b>}</b>


<b>V*: tập vô hạn đếm được</b>


</div>
<span class='text_page_counter'>(79)</span><div class='page_container' data-page=79>

79


<b>CHƯƠNG 3. CÁC VẤN ĐỀ CƠ BẢN VỀ </b>
<b>PHÂN TÍCH CÚ PHÁP</b>


<b>TRƯỜNG ĐẠI HỌC BÁCH KHOA ĐÀ NẴNG</b>


<b>1.</b> <b>Một số vấn đề về ngơn ngữ</b>


<b>1.1. Xâu</b>


- <b><sub>Các phép tốn trên xâu</sub></b>


• <b><sub>Ghép tiếp: cho 2 xâu x,y. Ghép tiếp của x, y </sub></b>


<b>là x.y hay xy là 1 xâu viết x trước, rồi đến y </b>
<b>sau chứ khơng có dấu cách.</b>


<b>Ví dụ:</b> <b>x=01</b>
<b>y=0110</b>


</div>
<span class='text_page_counter'>(80)</span><div class='page_container' data-page=80>

80



<b>CHƯƠNG 3. CÁC VẤN ĐỀ CƠ BẢN VỀ </b>
<b>PHÂN TÍCH CÚ PHÁP</b>


<b>TRƯỜNG ĐẠI HỌC BÁCH KHOA ĐÀ NẴNG</b>


<b>1.</b> <b>Một số vấn đề về ngơn ngữ</b>


<b>1.1. Xâu</b>


• <b><sub>Đảo ngược xâu x (x</sub>r): xâu được viết theo thứ </b>


<b>tự ngược lại của xâu x</b>


<b>Ví dụ: x=0101 </b><b>xr =1010</b>


<b>Chú ý: </b> <b>r= </b><b>, 1r =1</b>


- <b><sub>Xâu x mà x=x</sub>r thì x là xâu hình tháp (xâu </b>


<b>đối xứng)</b>


</div>
<span class='text_page_counter'>(81)</span><div class='page_container' data-page=81>

81


<b>CHƯƠNG 3. CÁC VẤN ĐỀ CƠ BẢN VỀ </b>
<b>PHÂN TÍCH CÚ PHÁP</b>


<b>TRƯỜNG ĐẠI HỌC BÁCH KHOA ĐÀ NẴNG</b>


<b>1.</b> <b>Một số vấn đề về ngôn ngữ</b>



<b>1.2. Ngôn ngữ</b>


- <b><sub>Ngôn ngữ L trên bộ chữ V là tập hợp các </sub></b>


<b>xâu trên V, L</b><b>V*</b>


- <b><sub>Các phép tốn trên ngơn ngữ</sub></b>


• <b><sub>Vì ngơn ngữ là tập hợp nên có các phép toán </sub></b>


</div>
<span class='text_page_counter'>(82)</span><div class='page_container' data-page=82>

82


<b>CHƯƠNG 3. CÁC VẤN ĐỀ CƠ BẢN VỀ </b>
<b>PHÂN TÍCH CÚ PHÁP</b>


<b>TRƯỜNG ĐẠI HỌC BÁCH KHOA ĐÀ NẴNG</b>


<b>1.</b> <b>Một số vấn đề về ngôn ngữ</b>


<b>1.2. Ngơn ngữ</b>


• <b><sub>Ghép tiếp 2 ngơn ngữ</sub></b>


<b>Cho 2 ngơn ngữ L1, L2. Ta gọi ghép tiếp </b>
<b>L1.L2 (L1L2) của L1 và L2 là một tập hợp </b>
<b>L1L2={xy/(x</b><b>L1) và (y</b><b>L2)}</b>


<b>x.x=x2; x.x.x=x3; x0=</b><sub></sub><b>; xi=xi-1x</b>



<b>L0={</b><sub></sub><b>}; Li=Li-1.L</b>


</div>
<span class='text_page_counter'>(83)</span><div class='page_container' data-page=83>

83


<b>CHƯƠNG 3. CÁC VẤN ĐỀ CƠ BẢN VỀ </b>
<b>PHÂN TÍCH CÚ PHÁP</b>


<b>TRƯỜNG ĐẠI HỌC BÁCH KHOA ĐÀ NẴNG</b>


<b>1.</b> <b>Một số vấn đề về ngôn ngữ</b>


<b>1.3. Biểu diễn ngôn ngữ</b>


 <b><sub>Ngôn ngữ đơn giản</sub></b>


- <b><sub>Phương pháp liệt kê: ngơn ngữ có số xâu là </sub></b>


<b>hữu hạn và có thể xác định được.</b>


<b>Ví dụ: ngơn ngữ là các số tự nhiên nhỏ hơn </b>
<b>20 và lớn hơn 12</b>


</div>
<span class='text_page_counter'>(84)</span><div class='page_container' data-page=84>

84


<b>CHƯƠNG 3. CÁC VẤN ĐỀ CƠ BẢN VỀ </b>
<b>PHÂN TÍCH CÚ PHÁP</b>


<b>TRƯỜNG ĐẠI HỌC BÁCH KHOA ĐÀ NẴNG</b>


<b>1.</b> <b>Một số vấn đề về ngôn ngữ</b>



<b>1.3. Biểu diễn ngôn ngữ</b>


 <b><sub>Ngôn ngữ đơn giản</sub></b>


- <b><sub>Phương pháp sử dụng tân từ P(x): ngơn ngữ </sub></b>


<b>mà các xâu có cùng các đặc điểm.</b>


<b>Ví dụ: ngơn ngữ là các số thực nhỏ hơn 5.</b>
<b>L={x/ (x</b><b> R) và (x<5)}</b>


 <b><sub>Ngôn ngữ phức tạp</sub></b>


</div>
<span class='text_page_counter'>(85)</span><div class='page_container' data-page=85>

85


<b>CHƯƠNG 3. CÁC VẤN ĐỀ CƠ BẢN VỀ </b>
<b>PHÂN TÍCH CÚ PHÁP</b>


<b>TRƯỜNG ĐẠI HỌC BÁCH KHOA ĐÀ NẴNG</b>


<b>2.</b> <b>Văn phạm phi ngữ cảnh</b>


<b>2.1.</b> <b>Định nghĩa: G=(Σ, Δ, s, p) trong đó:</b>
<b>Σ: tập hữu hạn các ký hiệu kết thúc.</b>


<b>Δ: tập hữu hạn các ký hiệu chưa kết thúc.</b>
<b>s: ký hiệu bắt đầu; s</b><b>Δ</b>


<b>p: tập hữu hạn các sản xuất có dạng </b>



</div>
<span class='text_page_counter'>(86)</span><div class='page_container' data-page=86>

86


<b>CHƯƠNG 3. CÁC VẤN ĐỀ CƠ BẢN VỀ </b>
<b>PHÂN TÍCH CÚ PHÁP</b>


<b>TRƯỜNG ĐẠI HỌC BÁCH KHOA ĐÀ NẴNG</b>


<b>2.</b> <b>Văn phạm phi ngữ cảnh</b>


<b>2.2.</b> <b>Ví dụ: G=(Σ, Δ, s, p) trong đó:</b>
<b>Σ: {0,1}</b>


<b>Δ: {S}</b>
<b>s: S</b>


</div>
<span class='text_page_counter'>(87)</span><div class='page_container' data-page=87>

87


<b>CHƯƠNG 3. CÁC VẤN ĐỀ CƠ BẢN VỀ </b>
<b>PHÂN TÍCH CÚ PHÁP</b>


<b>TRƯỜNG ĐẠI HỌC BÁCH KHOA ĐÀ NẴNG</b>


<b>2.</b> <b>Văn phạm phi ngữ cảnh</b>


 <b><sub>Qui ước: </sub></b>


- <b><sub>Ký hiệu kết thúc được viết bằng chữ thường</sub></b>
- <b><sub>Ký hiệu chưa kết thúc được viết bằng chữ in</sub></b>
- <b><sub>Ký hiệu chưa kết thúc nằm bên trái của sản </sub></b>



</div>
<span class='text_page_counter'>(88)</span><div class='page_container' data-page=88>

88


<b>CHƯƠNG 3. CÁC VẤN ĐỀ CƠ BẢN VỀ </b>
<b>PHÂN TÍCH CÚ PHÁP</b>


<b>TRƯỜNG ĐẠI HỌC BÁCH KHOA ĐÀ NẴNG</b>


<b>2.</b> <b>Văn phạm phi ngữ cảnh</b>


<b>2.3.</b> <b>Các khái niệm</b>


 <b><sub>Xâu (câu) và dạng câu: </sub></b>
 <sub></sub><b><sub> gọi là xâu khi </sub></b><sub></sub> <sub></sub><b><sub> Σ*</sub></b>


</div>
<span class='text_page_counter'>(89)</span><div class='page_container' data-page=89>

89


<b>CHƯƠNG 3. CÁC VẤN ĐỀ CƠ BẢN VỀ </b>
<b>PHÂN TÍCH CÚ PHÁP</b>


<b>TRƯỜNG ĐẠI HỌC BÁCH KHOA ĐÀ NẴNG</b>


<b>2.</b> <b>Văn phạm phi ngữ cảnh</b>


<b>2.3.</b> <b>Các khái niệm</b>


 <b><sub>Quan hệ suy dẫn: </sub></b>


- <b><sub>A có quan hệ suy dẫn ra </sub></b><sub></sub><b><sub> hay </sub></b><sub></sub><b><sub> được suy </sub></b>



<b>dẫn từ A, có nghĩa là từ A áp dụng các sản </b>
<b>xuất sinh ra được </b>


- <b><sub>Quan hệ suy dẫn trực tiếp: từ A áp dụng </sub></b>


<b>một sản xuất sinh được </b>


</div>
<span class='text_page_counter'>(90)</span><div class='page_container' data-page=90>

90


<b>CHƯƠNG 3. CÁC VẤN ĐỀ CƠ BẢN VỀ </b>
<b>PHÂN TÍCH CÚ PHÁP</b>


<b>TRƯỜNG ĐẠI HỌC BÁCH KHOA ĐÀ NẴNG</b>


<b>2.</b> <b>Văn phạm phi ngữ cảnh</b>


<b>2.3.</b> <b>Các khái niệm</b>


 <b><sub>Quan hệ suy dẫn: </sub></b>


- <b><sub>Quan hệ suy dẫn nhiều lần: từ A áp dụng </sub></b>


<b>nhiều sản xuất mới sinh được </b>


<b>Ký hiệu: A </b><b>+ </b><b> với A</b><b>Δ và </b><b>(Σ</b><b>Δ)*</b>


</div>
<span class='text_page_counter'>(91)</span><div class='page_container' data-page=91>

91


<b>CHƯƠNG 3. CÁC VẤN ĐỀ CƠ BẢN VỀ </b>
<b>PHÂN TÍCH CÚ PHÁP</b>



<b>TRƯỜNG ĐẠI HỌC BÁCH KHOA ĐÀ NẴNG</b>


<b>2.</b> <b>Văn phạm phi ngữ cảnh</b>


<b>2.3.</b> <b>Các khái niệm</b>


 <b><sub>Quan hệ suy dẫn: </sub></b>


- <b><sub>Nếu luôn luôn thay thế ký hiệu chưa kết thúc </sub></b>


</div>
<span class='text_page_counter'>(92)</span><div class='page_container' data-page=92>

92


<b>CHƯƠNG 3. CÁC VẤN ĐỀ CƠ BẢN VỀ </b>
<b>PHÂN TÍCH CÚ PHÁP</b>


<b>TRƯỜNG ĐẠI HỌC BÁCH KHOA ĐÀ NẴNG</b>


<b>2.</b> <b>Văn phạm phi ngữ cảnh</b>


<b>2.3.</b> <b>Các khái niệm</b>


 <b><sub>Cây suy dẫn: cây thoả mãn các điều kiện: </sub></b>


- <b><sub>Mỗi nút có 1 nhãn: ký hiệu kết thúc hoặc </sub></b>


<b>chưa kết thúc</b>


- <b><sub>Nhãn của nút gốc: ký hiệu bắt đầu</sub></b>
- <b><sub>Nhãn của nút lá: ký hiệu kết thúc</sub></b>



- <b><sub>Nếu một nút có nhãn A có các nút con của </sub></b>


</div>
<span class='text_page_counter'>(93)</span><div class='page_container' data-page=93>

93


<b>CHƯƠNG 3. CÁC VẤN ĐỀ CƠ BẢN VỀ </b>
<b>PHÂN TÍCH CÚ PHÁP</b>


<b>TRƯỜNG ĐẠI HỌC BÁCH KHOA ĐÀ NẴNG</b>


<b>2.</b> <b>Văn phạm phi ngữ cảnh</b>


<b>2.3.</b> <b>Các khái niệm</b>


 <b><sub>Cây suy dẫn</sub></b>


- <b><sub>Suy dẫn trái tạo cây suy dẫn trái.</sub></b>
- <b><sub>Suy dẫn phải tạo cây suy dẫn phải.</sub></b>


- <b><sub>Ví dụ: cho văn phạm phi ngữ cảnh sau:</sub></b>


<b>E</b><b>E+E | E*E | (E) | a</b>


<b>Vẽ cây suy dẫn trái, phải sinh xâu: a+a*a</b>


</div>
<span class='text_page_counter'>(94)</span><div class='page_container' data-page=94>

94


<b>CHƯƠNG 3. CÁC VẤN ĐỀ CƠ BẢN VỀ </b>
<b>PHÂN TÍCH CÚ PHÁP</b>



<b>TRƯỜNG ĐẠI HỌC BÁCH KHOA ĐÀ NẴNG</b>


<b>2.</b> <b>Văn phạm phi ngữ cảnh</b>


<b>2.3.</b> <b>Các khái niệm</b>


 <b><sub>Văn phạm đơn nghĩa</sub></b>


<b>Văn phạm G=(Σ, Δ, s, p) sản sinh ra ngơn </b>
<b>ngữ L(G)={w</b><b>Σ*}. Ta nói G là văn phạm </b>


<b>đơn nghĩa (không nhập nhằng) nếu với mỗi </b>
<b>xâu w</b><b>L(G) chỉ có một cây suy dẫn duy </b>


</div>
<span class='text_page_counter'>(95)</span><div class='page_container' data-page=95>

95


<b>CHƯƠNG 3. CÁC VẤN ĐỀ CƠ BẢN VỀ </b>
<b>PHÂN TÍCH CÚ PHÁP</b>


<b>TRƯỜNG ĐẠI HỌC BÁCH KHOA ĐÀ NẴNG</b>


<b>2.</b> <b>Văn phạm phi ngữ cảnh</b>


<b>2.3.</b> <b>Các khái niệm</b>


 <b><sub>Văn phạm tương đương</sub></b>


<b>Văn phạm G1 và G2 được gọi là tương </b>


<b>đương </b><b> bất kỳ xâu x được sinh ra từ G1 thì </b>



</div>
<span class='text_page_counter'>(96)</span><div class='page_container' data-page=96>

96


<b>CHƯƠNG 3. CÁC VẤN ĐỀ CƠ BẢN VỀ </b>
<b>PHÂN TÍCH CÚ PHÁP</b>


<b>TRƯỜNG ĐẠI HỌC BÁCH KHOA ĐÀ NẴNG</b>


<b>2.</b> <b>Văn phạm phi ngữ cảnh</b>


<b>2.3.</b> <b>Các khái niệm</b>


 <b><sub>Văn phạm đệ qui</sub></b>


<b>Cho văn phạm PNC G, với A </b><b>Δ mà </b>


<b>A</b><b>+</b><b>A</b><b> thì A gọi là ký hiệu đệ qui, G gọi </b>


<b>là văn phạm đệ qui. Với </b><b>, </b> <b> (Σ</b><b>Δ)*</b>


- <b>Nếu </b><b>=</b><b>: đệ qui trái</b>


</div>
<span class='text_page_counter'>(97)</span><div class='page_container' data-page=97>

97


<b>CHƯƠNG 3. CÁC VẤN ĐỀ CƠ BẢN VỀ </b>
<b>PHÂN TÍCH CÚ PHÁP</b>


<b>TRƯỜNG ĐẠI HỌC BÁCH KHOA ĐÀ NẴNG</b>


<b>2.</b> <b>Văn phạm phi ngữ cảnh</b>



<b>2.3.</b> <b>Các khái niệm</b>


 <b><sub>Văn phạm đệ qui</sub></b>


<b>Ví dụ: S</b><b>S0 | S1 | 0 | 1</b>


</div>
<span class='text_page_counter'>(98)</span><div class='page_container' data-page=98>

98


<b>CHƯƠNG 3. CÁC VẤN ĐỀ CƠ BẢN VỀ </b>
<b>PHÂN TÍCH CÚ PHÁP</b>


<b>TRƯỜNG ĐẠI HỌC BÁCH KHOA ĐÀ NẴNG</b>


<b>2.</b> <b>Văn phạm phi ngữ cảnh</b>


<b>Bài tập</b>


<b>(1) Xác định ngôn ngữ được sản sinh bởi Văn </b>
<b>phạm:</b>


<b>a. S</b><b>S(S)S | </b>


<b>b. S</b><b>aSb | bSa| </b>


<b>c. S</b><b>+ S S | * S S | a</b>


</div>
<span class='text_page_counter'>(99)</span><div class='page_container' data-page=99>

99


<b>CHƯƠNG 3. CÁC VẤN ĐỀ CƠ BẢN VỀ </b>


<b>PHÂN TÍCH CÚ PHÁP</b>


<b>TRƯỜNG ĐẠI HỌC BÁCH KHOA ĐÀ NẴNG</b>


<b>2.</b> <b>Văn phạm phi ngữ cảnh</b>


<b>Bài tập</b>


<b>(2) Xây dựng văn phạm sản sinh ra ngôn ngữ:</b>
<b>a. Số nhị phân lẻ</b>


<b>b. Số nguyên k0 dấu</b>
<b>c. Số nguyên có dấu</b>


</div>
<span class='text_page_counter'>(100)</span><div class='page_container' data-page=100>

100


<b>CHƯƠNG 3. CÁC VẤN ĐỀ CƠ BẢN VỀ </b>
<b>PHÂN TÍCH CÚ PHÁP</b>


<b>TRƯỜNG ĐẠI HỌC BÁCH KHOA ĐÀ NẴNG</b>


<b>2.</b> <b>Văn phạm phi ngữ cảnh</b>


<b>Bài tập</b>


<b>(2) Xây dựng văn phạm sản sinh ra ngôn ngữ:</b>
<b>a. S</b><b>0S |1S |1</b>


<b>b. S</b><b>0S| 1S|..|9S|0|..|9</b>



<b>c. NCD</b><b> D S</b>


<b>D </b><b>+ | </b>


</div>
<span class='text_page_counter'>(101)</span><div class='page_container' data-page=101>

101


<b>CHƯƠNG 3. CÁC VẤN ĐỀ CƠ BẢN VỀ </b>
<b>PHÂN TÍCH CÚ PHÁP</b>


<b>TRƯỜNG ĐẠI HỌC BÁCH KHOA ĐÀ NẴNG</b>


<b>2.</b> <b>Văn phạm phi ngữ cảnh</b>


<b>Bài tập</b>


<b>(2) Xây dựng văn phạm sản sinh ra ngôn ngữ:</b>
<b>d. SO</b><b>NCD.S | S.S | S |NCD</b>


<b>NCD</b><b> D S</b>


<b>D </b><b>+ | </b>


</div>
<span class='text_page_counter'>(102)</span><div class='page_container' data-page=102>

102


<b>CHƯƠNG 3. CÁC VẤN ĐỀ CƠ BẢN VỀ </b>
<b>PHÂN TÍCH CÚ PHÁP</b>


<b>TRƯỜNG ĐẠI HỌC BÁCH KHOA ĐÀ NẴNG</b>


<b>3.</b> <b>Đại cương về phân tích cú pháp</b>



<b>3.1. Mục đích</b>


<b>Cho G=(Σ, Δ, s, p) </b>
<b>Một xâu vào x</b><b>Σ*</b>


</div>
<span class='text_page_counter'>(103)</span><div class='page_container' data-page=103>

103


<b>CHƯƠNG 3. CÁC VẤN ĐỀ CƠ BẢN VỀ </b>
<b>PHÂN TÍCH CÚ PHÁP</b>


<b>TRƯỜNG ĐẠI HỌC BÁCH KHOA ĐÀ NẴNG</b>


<b>3.</b> <b>Đại cương về phân tích cú pháp</b>


<b>3.2. Phương pháp giải quyết</b>


 <b><sub>Bắt đầu từ S áp dụng các sản xuất để tìm x: </sub></b>


<b>PTCP từ trên xuống</b>


- <b><sub>Nếu tìm được x: x viết đúng cú pháp của văn </sub></b>


<b>phạm G</b>


- <b><sub>Nếu k0 tìm được x: x viết không đúng cú </sub></b>


</div>
<span class='text_page_counter'>(104)</span><div class='page_container' data-page=104>

104


<b>CHƯƠNG 3. CÁC VẤN ĐỀ CƠ BẢN VỀ </b>


<b>PHÂN TÍCH CÚ PHÁP</b>


<b>TRƯỜNG ĐẠI HỌC BÁCH KHOA ĐÀ NẴNG</b>


<b>3.</b> <b>Đại cương về phân tích cú pháp</b>


<b>3.2. Phương pháp giải quyết</b>


 <b><sub>Bắt đầu từ x áp dụng các suy dẫn ngược 1 </sub></b>


<b>sản xuất để thu S: PTCP từ dưới lên</b>


- <b><sub>Nếu thu được S: x viết dúng cú pháp của văn </sub></b>


<b>phạm G</b>


- <b><sub>Nếu k0 thu được S: x viết k0 đúng cú pháp </sub></b>


</div>
<span class='text_page_counter'>(105)</span><div class='page_container' data-page=105>

105


<b>CHƯƠNG 3. CÁC VẤN ĐỀ CƠ BẢN VỀ </b>
<b>PHÂN TÍCH CÚ PHÁP</b>


<b>TRƯỜNG ĐẠI HỌC BÁCH KHOA ĐÀ NẴNG</b>


<b>3.</b> <b>Đại cương về phân tích cú pháp</b>


<b>3.2. Phương pháp giải quyết</b>


<b>Ví dụ: Cho văn phạm PNC G sau:</b>


<b>S</b><b>B</b>


<b>B</b><b>R | (B)</b>


<b>R</b><b> E=E</b>


<b>E</b><b> a | b | (E+E)</b>


<b>Xâu x: (a=(b+a))</b>


<b>Hỏi xâu x có viết đúng cú pháp của G k0?</b>


<b>(1)</b>


<b>(2) (3)</b>
<b>(4)</b>


</div>
<span class='text_page_counter'>(106)</span><div class='page_container' data-page=106>

106


<b>CHƯƠNG 3. CÁC VẤN ĐỀ CƠ BẢN VỀ </b>
<b>PHÂN TÍCH CÚ PHÁP</b>


<b>TRƯỜNG ĐẠI HỌC BÁCH KHOA ĐÀ NẴNG</b>


<b>3.</b> <b>Đại cương về phân tích cú pháp</b>


<b>3.2. Phương pháp giải quyết</b>
<b>Ví dụ:</b>


 <b><sub>Phương pháp từ trên xuống</sub></b>



<b>S => B => (B) => (R) => (E=E)</b>
<b>=> (E=(E+E)) => (E=(E+a))</b>


<b>=> (E=(b+a)) => (a=(b+a)) :xâu x</b>
<b>Vậy xâu x viết đúng cú pháp của G</b>


<b>(1)</b> <b>(3)</b> <b>(2)</b> <b>(4)</b>


<b>(7)</b> <b>(5)</b>


</div>
<span class='text_page_counter'>(107)</span><div class='page_container' data-page=107>

107


<b>CHƯƠNG 3. CÁC VẤN ĐỀ CƠ BẢN VỀ </b>
<b>PHÂN TÍCH CÚ PHÁP</b>


<b>TRƯỜNG ĐẠI HỌC BÁCH KHOA ĐÀ NẴNG</b>


<b>3.</b> <b>Đại cương về phân tích cú pháp</b>


<b>3.2. Phương pháp giải quyết</b>
<b>Ví dụ:</b>


 <b><sub>Phương pháp từ dưới lên</sub></b>


<b>Stt</b> <b>Dạng câu</b> <b>Cán</b> <b>Sx dùng</b>
<b>(0)</b> <b>(a=(b+a))</b> <b> a</b> <b>E</b><b>a</b>


<b>(1)</b> <b>(E=(b+a))</b> <b> b</b> <b>E</b><b>b</b>



<b>(2)</b> <b>(E=(E+a))</b> <b> a</b> <b>E</b><b>a</b>


</div>
<span class='text_page_counter'>(108)</span><div class='page_container' data-page=108>

108


<b>CHƯƠNG 3. CÁC VẤN ĐỀ CƠ BẢN VỀ </b>
<b>PHÂN TÍCH CÚ PHÁP</b>


<b>TRƯỜNG ĐẠI HỌC BÁCH KHOA ĐÀ NẴNG</b>


<b>3.</b> <b>Đại cương về phân tích cú pháp</b>


<b>3.2. Phương pháp giải quyết</b>
<b>Ví dụ:</b>


 <b><sub>Phương pháp từ dưới lên</sub></b>


<b> </b>
<b>Vậy xâu x viết đúng cú pháp của G</b>


<b>(4)</b> <b>(E=E)</b> <b>E=E</b> <b>R</b><b>E=E</b>


<b>(5)</b> <b>(R)</b> <b>R</b> <b>B</b><b>R</b>


<b>(6)</b> <b>(B)</b> <b> (B)</b> <b>B</b><b>(B)</b>


<b>(7)</b> <b>B</b> <b>B</b> <b>S</b><b>B</b>


</div>
<span class='text_page_counter'>(109)</span><div class='page_container' data-page=109>

109


<b>CHƯƠNG 3. CÁC VẤN ĐỀ CƠ BẢN VỀ </b>


<b>PHÂN TÍCH CÚ PHÁP</b>


<b>TRƯỜNG ĐẠI HỌC BÁCH KHOA ĐÀ NẴNG</b>


<b>3.</b> <b>Đại cương về phân tích cú pháp</b>


<b>3.3. Sơ đồ chung giải thuật PTCP từ dưới lên</b>


<b>S</b>
<b>A</b>

<b><sub>0</sub></b>
<b><sub>i-1</sub></b>
<b><sub>i</sub></b>


<b><sub>k</sub>=x</b>


<b><sub>i</sub></b> <b>u<sub>i</sub></b>


<b><sub>i</sub>’</b>


<b>A</b>


<b>Biết </b><b><sub>i</sub> tìm </b><b><sub>i-1</sub></b>
<b><sub>i</sub> = </b><b><sub>i</sub>u<sub>i</sub></b>


<b><sub>i</sub></b><b>(Σ</b><b>Δ)*; u<sub>i</sub></b><b>Σ*</b>
<b><sub>i</sub> =</b><b><sub>i</sub>’</b>


</div>
<span class='text_page_counter'>(110)</span><div class='page_container' data-page=110>

110



<b>CHƯƠNG 3. CÁC VẤN ĐỀ CƠ BẢN VỀ </b>
<b>PHÂN TÍCH CÚ PHÁP</b>


<b>TRƯỜNG ĐẠI HỌC BÁCH KHOA ĐÀ NẴNG</b>


<b>3.</b> <b>Đại cương về phân tích cú pháp</b>


<b>3.3. Sơ đồ chung giải thuật PTCP từ dưới lên</b>


 <b><sub>Thuật toán: </sub></b>


<b>Sử dụng: 1 stack và 1 Buffer</b>
<b>Khởi tạo: - stack: $</b>


<b> - Buffer: x$</b>


<b>Lặp: If (Stack là $S) và (Buffer là $) Then</b>
<b>- x đúng cú pháp của vp G</b>


</div>
<span class='text_page_counter'>(111)</span><div class='page_container' data-page=111>

111


<b>CHƯƠNG 3. CÁC VẤN ĐỀ CƠ BẢN VỀ </b>
<b>PHÂN TÍCH CÚ PHÁP</b>


<b>TRƯỜNG ĐẠI HỌC BÁCH KHOA ĐÀ NẴNG</b>


<b>3.</b> <b>Đại cương về phân tích cú pháp</b>


<b>3.3. Sơ đồ chung giải thuật PTCP từ dưới lên</b>



 <b><sub>Thuật toán: </sub></b>


<b> Else</b>


<b>If (cán </b><b> xuất hiện ở đỉnh stack) Then</b>


<b> - Lấy cán </b><b> ra khỏi stack</b>


<b> - Đẩy A vào stack với A</b>


</div>
<span class='text_page_counter'>(112)</span><div class='page_container' data-page=112>

112


<b>CHƯƠNG 3. CÁC VẤN ĐỀ CƠ BẢN VỀ </b>
<b>PHÂN TÍCH CÚ PHÁP</b>


<b>TRƯỜNG ĐẠI HỌC BÁCH KHOA ĐÀ NẴNG</b>


<b>3.</b> <b>Đại cương về phân tích cú pháp</b>


<b>3.3. Sơ đồ chung giải thuật PTCP từ dưới lên</b>


 <b><sub>Thuật toán: </sub></b>


<b> Else</b>


<b> If (Buffer<>$) Then</b>


<b> D/c k/h ở đỉnh của Buffer</b><b> Stack</b>



<b> Else</b>


</div>
<span class='text_page_counter'>(113)</span><div class='page_container' data-page=113>

113


<b>CHƯƠNG 3. CÁC VẤN ĐỀ CƠ BẢN VỀ </b>
<b>PHÂN TÍCH CÚ PHÁP</b>


<b>TRƯỜNG ĐẠI HỌC BÁCH KHOA ĐÀ NẴNG</b>


<b>3.</b> <b>Đại cương về phân tích cú pháp</b>


<b>3.3. Sơ đồ chung giải thuật PTCP từ dưới lên</b>


 <b><sub>Ví dụ: S</sub></b><sub></sub><b><sub>if DK then L ;</sub></b>


<b>DK </b><b> true | false</b>


<b>L </b><b> write(ID) | read(ID)</b>


<b>ID </b><b>a | b</b>


</div>
<span class='text_page_counter'>(114)</span><div class='page_container' data-page=114>

114


<b>CHƯƠNG 3. CÁC VẤN ĐỀ CƠ BẢN VỀ </b>
<b>PHÂN TÍCH CÚ PHÁP</b>


<b>TRƯỜNG ĐẠI HỌC BÁCH KHOA ĐÀ NẴNG</b>


<b>Stt</b> <b>Stack</b> <b>Buffer</b> <b>Hành động</b>
<b>(0) $</b> <b>if true then read(a); $ </b> <b>D/c</b>



<b>(1) $if</b> <b>true then read(a);$</b> <b>D/c</b>


<b>(2) $if true</b> <b>then read(a);$ R/g DK</b><b>true</b>


<b>(3) $if DK</b> <b>then read(a);$</b> <b>D/c</b>
<b>(4) $if DK then</b> <b>read(a);$</b> <b>D/c</b>


<b>3.</b> <b>Đại cương về phân tích cú pháp</b>


<b>3.3. Sơ đồ chung giải thuật PTCP từ dưới lên</b>


</div>
<span class='text_page_counter'>(115)</span><div class='page_container' data-page=115>

115


<b>CHƯƠNG 3. CÁC VẤN ĐỀ CƠ BẢN VỀ </b>
<b>PHÂN TÍCH CÚ PHÁP</b>


<b>TRƯỜNG ĐẠI HỌC BÁCH KHOA ĐÀ NẴNG</b>


<b>Stt</b> <b>Stack</b> <b>Buffer</b> <b>Hành động</b>
<b>(5) $if DK then read</b> <b>(a);$</b> <b>D/c</b>


<b>(6) $if DK then read(</b> <b>a);$</b> <b>D/c</b>


<b>(7) $if DK then read(a</b> <b>);$</b> <b>R/g ID</b><b>a</b>


<b>(8) $if DK then read(ID</b> <b>);$</b> <b>D/c</b>


<b>(9) $if DK then read(ID)</b> <b>;$ R/g L</b><b>read(ID)</b>



<b>3.</b> <b>Đại cương về phân tích cú pháp</b>


<b>3.3. Sơ đồ chung giải thuật PTCP từ dưới lên</b>


</div>
<span class='text_page_counter'>(116)</span><div class='page_container' data-page=116>

116


<b>CHƯƠNG 3. CÁC VẤN ĐỀ CƠ BẢN VỀ </b>
<b>PHÂN TÍCH CÚ PHÁP</b>


<b>TRƯỜNG ĐẠI HỌC BÁCH KHOA ĐÀ NẴNG</b>


<b>Stt</b> <b>Stack</b> <b>Buffer</b> <b>Hành động</b>
<b>(10) $if DK then L</b> <b>;$</b> <b>D/c</b>


<b>(11) $if DK then L;</b> <b>$ R/g S</b><b>if DK then L;</b>


<b>(12) $S</b> <b>$ Chấp nhận x đúng cp G</b>


<b>3.</b> <b>Đại cương về phân tích cú pháp</b>


<b>3.3. Sơ đồ chung giải thuật PTCP từ dưới lên</b>


</div>
<span class='text_page_counter'>(117)</span><div class='page_container' data-page=117>

117


<b>CHƯƠNG 3. CÁC VẤN ĐỀ CƠ BẢN VỀ </b>
<b>PHÂN TÍCH CÚ PHÁP</b>


<b>TRƯỜNG ĐẠI HỌC BÁCH KHOA ĐÀ NẴNG</b>


<b>3.</b> <b>Đại cương về phân tích cú pháp</b>



<b>3.4. Sơ đồ chung giải thuật PTCP từ trên xuống</b>


<b>Biết </b><b><sub>i</sub> tìm </b><b><sub>i+1</sub></b>
<b><sub>i</sub> = u<sub>i</sub></b><b><sub>i</sub></b>


<b><sub>i</sub></b><b>(Σ</b><b>Δ)*; u<sub>i</sub></b><b>Σ*</b>
<b><sub>i</sub> =A</b><b><sub>i</sub>’</b>


<b><sub>k</sub> = x=u<sub>k</sub>; </b><b><sub>k</sub>=</b>
<b><sub>0</sub> = S=A=</b><b><sub>0</sub>; </b>
<b><sub>0</sub>’=u<sub>0</sub>=</b>


<b>A</b>


<b>S</b>


<b><sub>0</sub></b>


<b><sub>i</sub></b>


<b><sub>i+1</sub></b>


<b><sub>k</sub>=x</b>


<b>A</b>


<b><sub>i</sub></b>


<b>u<sub>i</sub></b>



<b><sub>i</sub>’</b>


</div>
<span class='text_page_counter'>(118)</span><div class='page_container' data-page=118>

118


<b>CHƯƠNG 3. CÁC VẤN ĐỀ CƠ BẢN VỀ </b>
<b>PHÂN TÍCH CÚ PHÁP</b>


<b>TRƯỜNG ĐẠI HỌC BÁCH KHOA ĐÀ NẴNG</b>


<b>3.</b> <b>Đại cương về phân tích cú pháp</b>


<b>3.4. Sơ đồ chung giải thuật PTCP từ trên xuống</b>


 <b><sub>Thuật toán:</sub></b>


<b>Sử dụng: 1 stack và 1 buffer</b>
<b>Khởi tạo: - stack: S$</b>


<b> - Buffer: x$</b>


</div>
<span class='text_page_counter'>(119)</span><div class='page_container' data-page=119>

119


<b>CHƯƠNG 3. CÁC VẤN ĐỀ CƠ BẢN VỀ </b>
<b>PHÂN TÍCH CÚ PHÁP</b>


<b>TRƯỜNG ĐẠI HỌC BÁCH KHOA ĐÀ NẴNG</b>


<b>3.</b> <b>Đại cương về phân tích cú pháp</b>



<b>3.4. Sơ đồ chung giải thuật PTCP từ trên xuống</b>


 <b><sub>Thuật tốn:</sub></b>


<b>- Dừng vịng lặp</b>
<b> Else</b>


<b>If (A</b><b>Δ) xuất hiện ở đỉnh Stack Then</b>


<b> Chọn sx thích hợp A</b>


</div>
<span class='text_page_counter'>(120)</span><div class='page_container' data-page=120>

120


<b>CHƯƠNG 3. CÁC VẤN ĐỀ CƠ BẢN VỀ </b>
<b>PHÂN TÍCH CÚ PHÁP</b>


<b>TRƯỜNG ĐẠI HỌC BÁCH KHOA ĐÀ NẴNG</b>


<b>3.</b> <b>Đại cương về phân tích cú pháp</b>


<b>3.4. Sơ đồ chung giải thuật PTCP từ trên xuống</b>


 <b><sub>Thuật toán:</sub></b>


<b>Else</b>


<b> If (a</b><b>Σ) xuất hiện ở đỉnh Stack và </b>


<b>Buffer Then </b>



</div>
<span class='text_page_counter'>(121)</span><div class='page_container' data-page=121>

121


<b>CHƯƠNG 3. CÁC VẤN ĐỀ CƠ BẢN VỀ </b>
<b>PHÂN TÍCH CÚ PHÁP</b>


<b>TRƯỜNG ĐẠI HỌC BÁCH KHOA ĐÀ NẴNG</b>


<b>3.</b> <b>Đại cương về phân tích cú pháp</b>


<b>3.4. Sơ đồ chung giải thuật PTCP từ trên xuống</b>


 <b><sub>Thuật toán:</sub></b>


<b> Else</b>


</div>
<span class='text_page_counter'>(122)</span><div class='page_container' data-page=122>

122


<b>CHƯƠNG 3. CÁC VẤN ĐỀ CƠ BẢN VỀ </b>
<b>PHÂN TÍCH CÚ PHÁP</b>


<b>TRƯỜNG ĐẠI HỌC BÁCH KHOA ĐÀ NẴNG</b>


<b>3.</b> <b>Đại cương về phân tích cú pháp</b>


<b>3.4. Sơ đồ chung giải thuật PTCP từ trên xuống</b>


 <b><sub>Ví dụ: S</sub></b><sub></sub><b><sub>aA</sub></b>


<b>A</b><b>bA | c</b>



</div>
<span class='text_page_counter'>(123)</span><div class='page_container' data-page=123>

123


<b>CHƯƠNG 3. CÁC VẤN ĐỀ CƠ BẢN VỀ </b>
<b>PHÂN TÍCH CÚ PHÁP</b>


<b>TRƯỜNG ĐẠI HỌC BÁCH KHOA ĐÀ NẴNG</b>


<b>3.</b> <b>Đại cương về phân tích cú pháp</b>


<b>3.4. Sơ đồ chung giải thuật PTCP từ trên xuống</b>


 <b><sub>Ví dụ: </sub></b>


<b>Stt</b> <b>Stack</b> <b>Buffer</b> <b>Hành động</b>


<b>(0)</b> <b>S$</b> <b>abbc$ Triển khai S</b><b>aA</b>


<b>(1)</b> <b>aA$</b> <b>abbc$</b> <b>Đối sánh</b>


<b>(2)</b> <b>A$</b> <b>bbc$ Triển khai A</b><b>bA</b>


</div>
<span class='text_page_counter'>(124)</span><div class='page_container' data-page=124>

124


<b>CHƯƠNG 3. CÁC VẤN ĐỀ CƠ BẢN VỀ </b>
<b>PHÂN TÍCH CÚ PHÁP</b>


<b>TRƯỜNG ĐẠI HỌC BÁCH KHOA ĐÀ NẴNG</b>


<b>3.</b> <b>Đại cương về phân tích cú pháp</b>



<b>3.4. Sơ đồ chung giải thuật PTCP từ trên xuống</b>


 <b><sub>Ví dụ: </sub></b>


<b>Stt</b> <b>Stack</b> <b>Buffer</b> <b>Hành động</b>


<b>(4)</b> <b>A$</b> <b>bc$ Triển khai A</b><b>bA</b>


<b>(5)</b> <b>bA$</b> <b>bc$</b> <b>Đối sánh</b>


<b>(6)</b> <b>A$</b> <b>c$</b> <b>Triển khai A</b><b>c</b>


<b>(7)</b> <b>c$</b> <b>c$</b> <b>Đối sánh</b>


</div>
<span class='text_page_counter'>(125)</span><div class='page_container' data-page=125>

125


<b>CHƯƠNG 3. CÁC VẤN ĐỀ CƠ BẢN VỀ </b>
<b>PHÂN TÍCH CÚ PHÁP</b>


<b>TRƯỜNG ĐẠI HỌC BÁCH KHOA ĐÀ NẴNG</b>


<b>3.</b> <b>Đại cương về phân tích cú pháp</b>


<b>Bài tập:</b>


<b>(1)Cho văn phạm G:</b> <b>S </b><b>var ID:K;T</b>


<b>ID </b><b>a | b | c</b>



<b>K </b><b>byte | integer | real</b>


<b>T </b><b> begin L end.</b>


<b>L </b><b> read(ID) | write(ID)</b>


</div>
<span class='text_page_counter'>(126)</span><div class='page_container' data-page=126>

126


<b>CHƯƠNG 3. CÁC VẤN ĐỀ CƠ BẢN VỀ </b>
<b>PHÂN TÍCH CÚ PHÁP</b>


<b>TRƯỜNG ĐẠI HỌC BÁCH KHOA ĐÀ NẴNG</b>


<b>3.</b> <b>Đại cương về phân tích cú pháp</b>


<b>Bài tập:</b>


<b>(2)Cho văn phạm G:</b> <b>S </b><b>aA | bA</b>


<b>A </b><b>cA | bA | d</b>


<b>Xâu x: abbcbd </b>


</div>
<span class='text_page_counter'>(127)</span><div class='page_container' data-page=127>

127


<b>CHƯƠNG 3. CÁC VẤN ĐỀ CƠ BẢN VỀ </b>
<b>PHÂN TÍCH CÚ PHÁP</b>


<b>TRƯỜNG ĐẠI HỌC BÁCH KHOA ĐÀ NẴNG</b>



<b>4.</b> <b>Các phương pháp phân tích cú pháp</b>


<b>4.1. Từ trên xuống</b>


- <b><sub>Phương pháp tiên đoán</sub></b>


</div>
<span class='text_page_counter'>(128)</span><div class='page_container' data-page=128>

128


<b>CHƯƠNG 3. CÁC VẤN ĐỀ CƠ BẢN VỀ </b>
<b>PHÂN TÍCH CÚ PHÁP</b>


<b>TRƯỜNG ĐẠI HỌC BÁCH KHOA ĐÀ NẴNG</b>


<b>4.</b> <b>Các phương pháp phân tích cú pháp</b>


<b>4.2. Từ dưới lên</b>


- <b><sub>Phương pháp ưu tiên toán tử</sub></b>
- <b><sub>Phương pháp thứ tự yếu</sub></b>


</div>
<span class='text_page_counter'>(129)</span><div class='page_container' data-page=129>

129


<b>CHƯƠNG 4. CÁC PHƯƠNG PHÁP PHÂN TÍCH CÚ </b>
<b>PHÁP</b>


<b>TRƯỜNG ĐẠI HỌC BÁCH KHOA ĐÀ NẴNG</b>


<b>1.</b> <b>Phương pháp phân tích cú pháp dưới lên</b>


<b>1.1. Phương pháp ưu tiên toán tử</b>



 <b><sub>Văn phạm ưu tiên toán tử</sub></b>


<b>Văn phạm phi ngữ cảnh thỏa mãn các ĐK:</b>


- <b><sub>Khơng có 2 sản xuất có cùng vế phải</sub></b>
- <b><sub>Khơng có vế phải là </sub></b><sub></sub>


- <b><sub>Khơng có 2 ký hiệu chưa kết thúc đứng liền </sub></b>


</div>
<span class='text_page_counter'>(130)</span><div class='page_container' data-page=130>

130


<b>CHƯƠNG 4. CÁC PHƯƠNG PHÁP PHÂN TÍCH CÚ </b>
<b>PHÁP</b>


<b>TRƯỜNG ĐẠI HỌC BÁCH KHOA ĐÀ NẴNG</b>


<b>1.</b> <b>Phương pháp phân tích cú pháp dưới lên</b>


<b>1.1. Phương pháp ưu tiên toán tử</b>


 <b><sub>Mối quan hệ ưu tiên giữa các ký hiệu</sub></b>


<b>Với a, b </b><b>Σ có:</b>


- <b>a < b : a kém ưu tiên hơn b</b>


- <b><sub>a= b: a ưu tiên bằng b</sub></b>
- <b><sub>a > b: a ưu tiên hơn b</sub></b>



- <b><sub>a và b : khơng có quan hệ ưu tiên</sub></b>





</div>
<span class='text_page_counter'>(131)</span><div class='page_container' data-page=131>

131


<b>CHƯƠNG 4. CÁC PHƯƠNG PHÁP PHÂN TÍCH CÚ </b>
<b>PHÁP</b>


<b>TRƯỜNG ĐẠI HỌC BÁCH KHOA ĐÀ NẴNG</b>


<b>1.</b> <b>Phương pháp phân tích cú pháp dưới lên</b>


<b>1.1. Phương pháp ưu tiên toán tử</b>


 <b><sub>Qui tắc xác định mối quan hệ </sub></b>


<b>(1) </b><b> Sx mà vế phải có dạng </b><b>ab</b>


<b>hay </b><b>aCb</b>


<b>(2) </b><b> Sx mà vế phải có dạng </b><b>aB</b>


<b>mà B</b><b>+ b</b><b> hay B</b><b>+Cb</b>


<b>(3) </b><b> Sx mà vế phải có dạng </b><b>Ab</b>


<b>mà A</b><b>+</b> <b>a hay A</b><b>+</b> <b>aC</b>



</div>
<span class='text_page_counter'>(132)</span><div class='page_container' data-page=132>

132


<b>CHƯƠNG 4. CÁC PHƯƠNG PHÁP PHÂN TÍCH CÚ </b>
<b>PHÁP</b>


<b>TRƯỜNG ĐẠI HỌC BÁCH KHOA ĐÀ NẴNG</b>


<b>1.</b> <b>Phương pháp phân tích cú pháp dưới lên</b>


<b>1.1. Phương pháp ưu tiên toán tử</b>


 <b><sub>Qui tắc xác định mối quan hệ </sub></b>


<b>(4) </b> <b>S</b><b>+</b><b>a hay S</b><b>+</b><b>aC </b>


<b>hay S</b><b>+ a</b><b> hay S</b><b>+Ca</b>


<b>Với a, b</b><b>Σ; A,B,C</b><b>Δ; </b><b>, </b><b>, </b> <b> (Σ</b><b>Δ)*</b>


 <b><sub>Lưu ý</sub><sub>:- Cán:< ></sub></b>


<b> - a < b</b>
<b>b < c </b>


<b>a >$.</b>


<b>. .</b>
<b>.</b>


<b>.</b> <b>a < c.</b>



</div>
<span class='text_page_counter'>(133)</span><div class='page_container' data-page=133>

133


<b>CHƯƠNG 4. CÁC PHƯƠNG PHÁP PHÂN TÍCH CÚ </b>
<b>PHÁP</b>


<b>TRƯỜNG ĐẠI HỌC BÁCH KHOA ĐÀ NẴNG</b>


<b>1.</b> <b>Phương pháp phân tích cú pháp dưới lên</b>


<b>1.1. Phương pháp ưu tiên toán tử</b>


 <b><sub>Thuật toán</sub></b>


<b>Sử dụng: 1 stack và 1 Buffer</b>
<b>Khởi tạo: - stack: </b> <b>$</b>


<b>- Buffer: </b> <b>x$</b>


<b>Lặp: If (Stack là $S) và (Buffer là $) Then</b>
<b>- x đúng cú pháp của vp G</b>


</div>
<span class='text_page_counter'>(134)</span><div class='page_container' data-page=134>

134


<b>CHƯƠNG 4. CÁC PHƯƠNG PHÁP PHÂN TÍCH CÚ </b>
<b>PHÁP</b>


<b>TRƯỜNG ĐẠI HỌC BÁCH KHOA ĐÀ NẴNG</b>


<b>1.</b> <b>Phương pháp phân tích cú pháp dưới lên</b>



<b>1.1. Phương pháp ưu tiên toán tử</b>


 <b><sub>Thuật toán</sub></b>


<b>Else </b> <i><b>{giả sử k/h kết thúc gần đỉnh stack </b></i>
<i><b>nhất là a và </b></i>


<i><b>buffer là b}</b></i>


<b> If (a>b) Then</b>


<b> - Tìm cán </b><b> ở đỉnh stack(vị trí mở cán <)</b>


<b>- Lấy cán </b><b> ra khỏi stack</b>


<b>- Đẩy A vào stack với A</b> <b> </b>


<b>.</b>


</div>
<span class='text_page_counter'>(135)</span><div class='page_container' data-page=135>

135


<b>CHƯƠNG 4. CÁC PHƯƠNG PHÁP PHÂN TÍCH CÚ </b>
<b>PHÁP</b>


<b>TRƯỜNG ĐẠI HỌC BÁCH KHOA ĐÀ NẴNG</b>


<b>1.</b> <b>Phương pháp phân tích cú pháp dưới lên</b>


<b>1.1. Phương pháp ưu tiên toán tử</b>



 <b><sub>Thuật toán</sub></b>


<b> Else</b>


<b>If (a<b) or (a=b)Then</b>


<b> D/c b từ Buffer</b><b> Stack</b>


<b>Else</b>


<b> - Báo lỗi x không đúng cú pháp G</b>
<b> - Dừng vòng lặp</b>


</div>
<span class='text_page_counter'>(136)</span><div class='page_container' data-page=136>

136


<b>CHƯƠNG 4. CÁC PHƯƠNG PHÁP PHÂN TÍCH CÚ </b>
<b>PHÁP</b>


<b>TRƯỜNG ĐẠI HỌC BÁCH KHOA ĐÀ NẴNG</b>


<b>1.</b> <b>Phương pháp phân tích cú pháp dưới lên</b>


<b>1.1. Phương pháp ưu tiên tốn tử</b>


 <b><sub>Ví dụ: S</sub></b><sub></sub><b><sub>if DK then L ;</sub></b>


<b>DK </b><b> true | false</b>


<b>L </b><b> write(ID) | read(ID)</b>



<b>ID </b><b>a | b</b>


</div>
<span class='text_page_counter'>(137)</span><div class='page_container' data-page=137>

137


<b>CHƯƠNG 4. CÁC PHƯƠNG PHÁP PHÂN TÍCH CÚ </b>
<b>PHÁP</b>


<b>TRƯỜNG ĐẠI HỌC BÁCH KHOA ĐÀ NẴNG</b>


<b>1.</b> <b>Phương pháp phân tích cú pháp dưới lên</b>


<b>1.1. Phương pháp ưu tiên tốn tử</b>


 <b><sub>Ví dụ:</sub></b>


- <b><sub>Xác định tất cả các mối quan hệ</sub></b>


<b>Xét vế phải của từng sản xuất</b>


</div>
<span class='text_page_counter'>(138)</span><div class='page_container' data-page=138>

138


<b>CHƯƠNG 4. CÁC PHƯƠNG PHÁP PHÂN TÍCH CÚ </b>
<b>PHÁP</b>


<b>TRƯỜNG ĐẠI HỌC BÁCH KHOA ĐÀ NẴNG</b>


<b>1.</b> <b>Phương pháp phân tích cú pháp dưới lên</b>


<b>1.1. Phương pháp ưu tiên tốn tử</b>



 <b><sub>Ví dụ:</sub></b>


- <b><sub>Xác định tất cả các mối quan hệ</sub></b>


<b>Sx(1):S</b><b>if DK then L;  if = then (qt1)</b>


<b>S</b><b>if DK then L;</b>


<b>DK</b><b> true | false  if < true | false (qt2)</b>


<b>S</b><b> if DK then L;</b>


<b>DK</b><b> true | false  true | false > then(qt3)</b>


<b>.</b>


<b>.</b>


<b> a C b </b>
<b> a B </b>


<b>B b </b><b> b </b>
<b> A b </b>


<b>A </b><b> a </b><b> a</b>


</div>
<span class='text_page_counter'>(139)</span><div class='page_container' data-page=139>

139


<b>CHƯƠNG 4. CÁC PHƯƠNG PHÁP PHÂN TÍCH CÚ </b>


<b>PHÁP</b>


<b>TRƯỜNG ĐẠI HỌC BÁCH KHOA ĐÀ NẴNG</b>


<b>1.</b> <b>Phương pháp phân tích cú pháp dưới lên</b>


<b>1.1. Phương pháp ưu tiên tốn tử</b>


 <b><sub>Ví dụ:</sub></b>


- <b><sub>Xác định tất cả các mối quan hệ</sub></b>


<b>Sx(1):S</b><b>if DK then L;  then = ; (qt1)</b>


<b>Tương tự:</b>


<b>then < write | read (qt2)</b>
<b>) > ; (qt3) </b>


<b>.</b>


<b> </b><b> a C b </b>


</div>
<span class='text_page_counter'>(140)</span><div class='page_container' data-page=140>

140


<b>CHƯƠNG 4. CÁC PHƯƠNG PHÁP PHÂN TÍCH CÚ </b>
<b>PHÁP</b>


<b>TRƯỜNG ĐẠI HỌC BÁCH KHOA ĐÀ NẴNG</b>



<b>1.</b> <b>Phương pháp phân tích cú pháp dưới lên</b>


<b>1.1. Phương pháp ưu tiên tốn tử</b>


 <b><sub>Ví dụ:</sub></b>


- <b><sub>Xác định tất cả các mối quan hệ</sub></b>


<b>Sx(4|5): L</b><b>write(ID) | read(ID) </b>


<b>write | read = ( (qt1)</b>
<b>( = ) (qt1)</b>


<b>( < a | b (qt2)</b>
<b>a |b > ) (qt3)</b>
<b>.</b>


<b>.</b>
<b>.</b>


</div>
<span class='text_page_counter'>(141)</span><div class='page_container' data-page=141>

141


<b>CHƯƠNG 4. CÁC PHƯƠNG PHÁP PHÂN TÍCH CÚ </b>
<b>PHÁP</b>


<b>TRƯỜNG ĐẠI HỌC BÁCH KHOA ĐÀ NẴNG</b>


<b>1.</b> <b>Phương pháp phân tích cú pháp dưới lên</b>


<b>1.1. Phương pháp ưu tiên toán tử</b>



 <b><sub>Ví dụ:</sub></b>


- <b><sub>Xác định tất cả các mối quan hệ</sub></b>


<b>S </b><b> if DK then L ;  if | ; > $</b>


<b> a </b>


<b> a</b>


</div>
<span class='text_page_counter'>(142)</span><div class='page_container' data-page=142>

142


<b>CHƯƠNG 4. CÁC PHƯƠNG PHÁP PHÂN TÍCH CÚ </b>
<b>PHÁP</b>


<b>TRƯỜNG ĐẠI HỌC BÁCH KHOA ĐÀ NẴNG</b>


<b>Stt</b> <b>Stack</b> <b>Buffer</b> <b>Q/hệ</b> <b>H/động</b>


<b>(0) $</b> <b>if true then read(a);$</b> <b><</b> <b>D/c</b>


<b>(1) $if</b> <b>true then read(a);$</b> <b><</b> <b>D/c</b>


<b>(2) $if true</b> <b>then read(a);$</b> <b>></b> <b>R/g DK</b><b>true</b>


<b>(3) $if DK</b> <b>then read(a);$</b> <b>=</b> <b>D/c</b>


<b>1.</b> <b>Phương pháp phân tích cú pháp dưới lên</b>



<b>1.1. Phương pháp ưu tiên toán tử</b>


 <b><sub>Ví dụ:</sub></b>


<b>.</b>
<b>.</b>


<b>.</b>
<b>.</b>


</div>
<span class='text_page_counter'>(143)</span><div class='page_container' data-page=143>

143


<b>CHƯƠNG 4. CÁC PHƯƠNG PHÁP PHÂN TÍCH CÚ </b>
<b>PHÁP</b>


<b>TRƯỜNG ĐẠI HỌC BÁCH KHOA ĐÀ NẴNG</b>


<b>Stt</b> <b>Stack</b> <b>Buffer</b> <b>Q/hệ</b> <b>H/động</b>


<b>(4) $if DK then</b> <b>read(a);$</b> <b><</b> <b>D/c</b>


<b>(5) $if DK then read</b> <b>(a);$</b> <b>=</b> <b>D/c</b>


<b>(6) $if DK then read(</b> <b>a);$</b> <b><</b> <b>D/c</b>


<b>(7) $if DK then read( a</b> <b>);$</b> <b>></b> <b>R/g ID</b><b>a</b>


<b>1.</b> <b>Phương pháp phân tích cú pháp dưới lên</b>


<b>1.1. Phương pháp ưu tiên tốn tử</b>



 <b><sub>Ví dụ:</sub></b>


<b>.</b>
<b>.</b>
<b>.</b>


<b>.</b>


</div>
<span class='text_page_counter'>(144)</span><div class='page_container' data-page=144>

144


<b>CHƯƠNG 4. CÁC PHƯƠNG PHÁP PHÂN TÍCH CÚ </b>
<b>PHÁP</b>


<b>TRƯỜNG ĐẠI HỌC BÁCH KHOA ĐÀ NẴNG</b>


<b>Stt</b> <b>Stack</b> <b>Buffer Q/hệ</b> <b>H/động</b>


<b>(8) $if DK then read(ID</b> <b>);$</b> <b>=</b> <b>D/c</b>


<b>(9) $ if DK then </b>


<b>read(ID)</b> <b>;$</b> <b>></b> <b>L</b><b>read(ID)R/g </b>


<b>(10) $ if DK then L</b> <b>;$</b> <b>=</b> <b>D/c</b>


<b>(11) $ if DK then L;</b> <b>$</b> <b>></b> <b>R/g S</b><b>if </b>


<b>DK then L;</b>



<b>(12) $S</b> <b>$</b> <b>Chấp nhận</b>


<b>1.</b> <b>Phương pháp phân tích cú pháp dưới lên</b>


<b>1.1. Phương pháp ưu tiên tốn tử</b>


 <b><sub>Ví dụ:</sub></b>


<b>.</b>
<b>.</b>
<b>.</b>


<b>.</b>


</div>
<span class='text_page_counter'>(145)</span><div class='page_container' data-page=145>

145


<b>CHƯƠNG 4. CÁC PHƯƠNG PHÁP PHÂN TÍCH CÚ </b>
<b>PHÁP</b>


<b>TRƯỜNG ĐẠI HỌC BÁCH KHOA ĐÀ NẴNG</b>


<b>1.</b> <b>Phương pháp phân tích cú pháp dưới lên</b>


<b>1.1. Phương pháp ưu tiên tốn tử</b>
<b>Bài tập:</b>


<b>(1)Cho văn phạm G:</b>


<b>S </b><b>C ; H</b> <b>H </b><b>type ID=A;B</b>



<b>C</b><b>const ID = N</b> <b>A </b><b> byte | real</b>


<b>ID</b><b>a | b | c</b> <b>B</b><b> var ID : A;</b>


<b>N </b><b> 5</b>


</div>
<span class='text_page_counter'>(146)</span><div class='page_container' data-page=146>

146


<b>CHƯƠNG 4. CÁC PHƯƠNG PHÁP PHÂN TÍCH CÚ </b>
<b>PHÁP</b>


<b>TRƯỜNG ĐẠI HỌC BÁCH KHOA ĐÀ NẴNG</b>


<b>1.</b> <b>Phương pháp phân tích cú pháp dưới lên</b>


<b>1.1. Phương pháp ưu tiên tốn tử</b>
<b>Bài tập:</b>


<b>(2)Cho văn phạm G:</b>


<b>S </b><b>C ; H</b> <b>H </b><b>type ID=A var B</b>


<b>C</b><b>const ID = N</b> <b>A </b><b> byte; | real;</b>


<b>ID</b><b>a | b | c</b> <b>B</b><b> ID : A</b>


<b>N </b><b> 5</b>


</div>
<span class='text_page_counter'>(147)</span><div class='page_container' data-page=147>

147



<b>CHƯƠNG 4. CÁC PHƯƠNG PHÁP PHÂN TÍCH CÚ </b>
<b>PHÁP</b>


<b>TRƯỜNG ĐẠI HỌC BÁCH KHOA ĐÀ NẴNG</b>


<b>1.</b> <b>Phương pháp phân tích cú pháp dưới lên</b>


<b>1.1. Phương pháp ưu tiên toán tử</b>
<b>Bài tập:</b>


<b>(2) Các mối quan hệ:</b>


<b>5 | = > ; </b> <b>; < type</b> <b>;|var| : |const > $</b>
<b>const= =</b> <b>const <a|b|c</b> <b>a|b|c> =</b> <b>=<5</b>
<b>type= =</b> <b>type< a|b|c</b> <b>= = var</b>


<b>a|b|c> = </b> <b>=< byte|real</b> <b>;>var var< :|a|b|c</b>
<b>byte|real=; a|b|c> :</b> <b>:< byte|real</b>


</div>
<span class='text_page_counter'>(148)</span><div class='page_container' data-page=148>

148


<b>CHƯƠNG 4. CÁC PHƯƠNG PHÁP PHÂN TÍCH CÚ </b>
<b>PHÁP</b>


<b>TRƯỜNG ĐẠI HỌC BÁCH KHOA ĐÀ NẴNG</b>


<b>1.</b> <b>Phương pháp phân tích cú pháp dưới lên</b>


<b>1.2. Phương pháp thứ tự yếu</b>



 <b><sub>Cấu tạo:</sub></b>


<b>Stack</b>


<b>$</b> <b>x1 x2</b> <b>…</b> <b>xi</b> <b>yi</b> <b><sub>…</sub></b> <b><sub>y2</sub></b> <b><sub>y1</sub></b> <b><sub>$</sub></b>


<b>Buffer</b>


<b>Kết quả</b>
<b>Bộ phân </b>


</div>
<span class='text_page_counter'>(149)</span><div class='page_container' data-page=149>

149


<b>CHƯƠNG 4. CÁC PHƯƠNG PHÁP PHÂN TÍCH CÚ </b>
<b>PHÁP</b>


<b>TRƯỜNG ĐẠI HỌC BÁCH KHOA ĐÀ NẴNG</b>


<b>1.</b> <b>Phương pháp phân tích cú pháp dưới lên</b>


<b>1.2. Phương pháp thứ tự yếu</b>


 <b><sub>Cấu tạo:</sub></b>


- <b><sub>Xi </sub></b><sub></sub><b><sub> (Σ</sub></b><sub></sub><b><sub>Δ)</sub></b>
- <b>yi </b><b> Σ</b>


- <b><sub>S_R: ma trận có:</sub></b>


</div>
<span class='text_page_counter'>(150)</span><div class='page_container' data-page=150>

150



<b>CHƯƠNG 4. CÁC PHƯƠNG PHÁP PHÂN TÍCH CÚ </b>
<b>PHÁP</b>


<b>TRƯỜNG ĐẠI HỌC BÁCH KHOA ĐÀ NẴNG</b>


<b>1.</b> <b>Phương pháp phân tích cú pháp dưới lên</b>


<b>1.2. Phương pháp thứ tự yếu</b>


 <b><sub>Cấu tạo:</sub></b>


• <b><sub>S_R[xi,yi]: có các giá trị</sub></b>


</div>
<span class='text_page_counter'>(151)</span><div class='page_container' data-page=151>

151


<b>CHƯƠNG 4. CÁC PHƯƠNG PHÁP PHÂN TÍCH CÚ </b>
<b>PHÁP</b>


<b>TRƯỜNG ĐẠI HỌC BÁCH KHOA ĐÀ NẴNG</b>


<b>1.</b> <b>Phương pháp phân tích cú pháp dưới lên</b>


<b>1.2. Phương pháp thứ tự yếu</b>


 <b><sub>Hoạt động:</sub></b>


- <b><sub>Tại một thời điểm nào đó k/h ở đỉnh của </sub></b>


<b>stack là Xi</b><b>(Σ</b><b>Δ), ở đỉnh buffer là yi</b><b>Σ. Bộ </b>



</div>
<span class='text_page_counter'>(152)</span><div class='page_container' data-page=152>

152


<b>CHƯƠNG 4. CÁC PHƯƠNG PHÁP PHÂN TÍCH CÚ </b>
<b>PHÁP</b>


<b>TRƯỜNG ĐẠI HỌC BÁCH KHOA ĐÀ NẴNG</b>


<b>1.</b> <b>Phương pháp phân tích cú pháp dưới lên</b>


<b>1.2. Phương pháp thứ tự yếu</b>


 <b><sub>Hoạt động:</sub></b>


• <b><sub>S_R[xi,yi]: xác định hành động</sub></b>


 <b><sub>S_R[xi,yi]=S: dịch chuyển k/h đỉnh </sub></b>


<b>buffer </b><b> stack</b>


 <b><sub>S_R[xi,yi]=R: rút gọn</sub></b>


</div>
<span class='text_page_counter'>(153)</span><div class='page_container' data-page=153>

153


<b>CHƯƠNG 4. CÁC PHƯƠNG PHÁP PHÂN TÍCH CÚ </b>
<b>PHÁP</b>


<b>TRƯỜNG ĐẠI HỌC BÁCH KHOA ĐÀ NẴNG</b>


<b>1.</b> <b>Phương pháp phân tích cú pháp dưới lên</b>



<b>1.2. Phương pháp thứ tự yếu</b>


 <b><sub>Thuật toán</sub></b>


<b>Sử dụng: 1 stack và 1 Buffer</b>
<b>Khởi tạo: - stack: </b> <b>$</b>


<b>- Buffer: </b> <b>x$</b>
<b>Lặp: </b>


</div>
<span class='text_page_counter'>(154)</span><div class='page_container' data-page=154>

154


<b>CHƯƠNG 4. CÁC PHƯƠNG PHÁP PHÂN TÍCH CÚ </b>
<b>PHÁP</b>


<b>TRƯỜNG ĐẠI HỌC BÁCH KHOA ĐÀ NẴNG</b>


<b>1.</b> <b>Phương pháp phân tích cú pháp dưới lên</b>


<b>1.1. Phương pháp thứ tự yếu</b>


 <b><sub>Thuật toán</sub></b>


<b>If (S_R[x,y]=R*) Then</b>


<b>- x đúng cú pháp của vp G</b>
<b>- Dừng vòng lặp</b>


<b>Else If (S_R[x,y]=rỗng) Then</b>



</div>
<span class='text_page_counter'>(155)</span><div class='page_container' data-page=155>

155


<b>CHƯƠNG 4. CÁC PHƯƠNG PHÁP PHÂN TÍCH CÚ </b>
<b>PHÁP</b>


<b>TRƯỜNG ĐẠI HỌC BÁCH KHOA ĐÀ NẴNG</b>


<b>1.</b> <b>Phương pháp phân tích cú pháp dưới lên</b>


<b>1.1. Phương pháp thứ tự yếu</b>


 <b><sub>Thuật toán</sub></b>


<b>Else If (S_R[x,y]=S) then</b>


<b>D/c y từ buffer </b><b>stack</b>


<b>Else {S_R[x,y]=R} </b>


<b>If (Có vế phải </b><b> dài nhất ở đỉnh stack) then</b>


<b>- Lấy </b><b> ra khỏi stack</b>


</div>
<span class='text_page_counter'>(156)</span><div class='page_container' data-page=156>

156


<b>CHƯƠNG 4. CÁC PHƯƠNG PHÁP PHÂN TÍCH CÚ </b>
<b>PHÁP</b>


<b>TRƯỜNG ĐẠI HỌC BÁCH KHOA ĐÀ NẴNG</b>



<b>1.</b> <b>Phương pháp phân tích cú pháp dưới lên</b>


<b>1.2. Phương pháp thứ tự yếu</b>


 <b><sub>Thuật toán</sub></b>


<b> Else</b>


</div>
<span class='text_page_counter'>(157)</span><div class='page_container' data-page=157>

157


<b>CHƯƠNG 4. CÁC PHƯƠNG PHÁP PHÂN TÍCH CÚ </b>
<b>PHÁP</b>


<b>TRƯỜNG ĐẠI HỌC BÁCH KHOA ĐÀ NẴNG</b>


<b>1.</b> <b>Phương pháp phân tích cú pháp dưới lên</b>


<b>1.2. Phương pháp thứ tự yếu</b>


 <b><sub>Ví dụ: Cho G : S</sub></b><sub></sub><b><sub>id=A</sub></b>


<b>A</b><b>A+B | B</b>


<b>B</b><b>B*C | C</b>


<b>C</b><b>id | (A)</b>


</div>
<span class='text_page_counter'>(158)</span><div class='page_container' data-page=158>

158



<b>CHƯƠNG 4. CÁC PHƯƠNG PHÁP PHÂN TÍCH CÚ </b>
<b>PHÁP</b>


<b>TRƯỜNG ĐẠI HỌC BÁCH KHOA ĐÀ NẴNG</b>


<b>Bảng S_R </b>


<b>id</b> <b>*</b> <b>+</b> <b>(</b> <b>)</b> <b>=</b> <b>$</b>


<b>S</b> <b>R*</b>


<b>A</b> <b>S</b> <b>S</b> <b>R</b>


<b>B</b> <b>S</b> <b>R</b> <b>R</b> <b>R</b>


<b>C</b> <b>R</b> <b>R</b> <b>R</b> <b>R</b>


<b>id</b> <b>R</b> <b>R</b> <b>R</b> <b>S</b> <b>R</b>


<b>*</b> <b>S</b> <b>S</b>


<b>+</b> <b>S</b> <b>S</b>


<b>(</b> <b>S</b> <b>S</b>


<b>)</b> <b>R</b> <b>R</b> <b>R</b> <b>R</b>


<b>=</b> <b>S</b> <b>S</b>


</div>
<span class='text_page_counter'>(159)</span><div class='page_container' data-page=159>

159



<b>CHƯƠNG 4. CÁC PHƯƠNG PHÁP PHÂN TÍCH CÚ </b>
<b>PHÁP</b>


<b>TRƯỜNG ĐẠI HỌC BÁCH KHOA ĐÀ NẴNG</b>


<b>1.</b> <b>Phương pháp phân tích cú pháp dưới lên</b>


<b>1.1. Phương pháp thứ tự yếu</b>


 <b><sub>Qui tắc xác định mối quan hệ </sub></b>
(1)<b> Sx mà vế phải có dạng </b><b>xy</b>


<b>- Nếu y</b><b>Σ thì: x = y</b>


<b>- Nếu y</b><b>Δ thì: x < y</b>


<b>Với x</b><b>(Σ</b><b>Δ); </b><b>,</b><b>(Σ</b><b>Δ)*</b>


</div>
<span class='text_page_counter'>(160)</span><div class='page_container' data-page=160>

160


<b>CHƯƠNG 4. CÁC PHƯƠNG PHÁP PHÂN TÍCH CÚ </b>
<b>PHÁP</b>


<b>TRƯỜNG ĐẠI HỌC BÁCH KHOA ĐÀ NẴNG</b>


<b>1.</b> <b>Phương pháp phân tích cú pháp dưới lên</b>


<b>1.1. Phương pháp thứ tự yếu</b>



 <b><sub>Qui tắc xác định mối quan hệ </sub></b>
(2)<b> Sx mà vế phải có dạng </b><b>xA</b>


<b>mà A</b><b>+ y</b><b> thì: x < y</b>


<b>Với x,y</b><b>(Σ</b><b>Δ); A</b><b>Δ; </b><b>,</b><b>,</b><b>(Σ</b><b>Δ)*</b>
(3)<b> Sx mà vế phải có dạng </b><b>AB</b>


<b>mà A</b><b>+</b> <b>x và B</b><b>+ y</b><b> thì: x > y</b>


<b>Với x,y,B</b><b>(Σ</b><b>Δ); A</b><b>Δ; </b><b>,</b><b>,</b><b>,</b><b>(Σ</b><b>Δ)*</b>


<b> (Nếu B</b><b>Σ thì y chính là B)</b>


<b>.</b>


</div>
<span class='text_page_counter'>(161)</span><div class='page_container' data-page=161>

161


<b>CHƯƠNG 4. CÁC PHƯƠNG PHÁP PHÂN TÍCH CÚ </b>
<b>PHÁP</b>


<b>TRƯỜNG ĐẠI HỌC BÁCH KHOA ĐÀ NẴNG</b>


<b>1.</b> <b>Phương pháp phân tích cú pháp dưới lên</b>


<b>1.1. Phương pháp thứ tự yếu</b>


 <b><sub>Qui tắc xác định mối quan hệ </sub></b>


<b>(4)S</b><b>+</b><b>x hay S</b><b>+x</b><b> thì x > $</b>



<b>Với x</b><b> (Σ</b><b>Δ) ; </b> <b> (Σ</b><b>Δ)*</b>


</div>
<span class='text_page_counter'>(162)</span><div class='page_container' data-page=162>

162


<b>CHƯƠNG 4. CÁC PHƯƠNG PHÁP PHÂN TÍCH CÚ </b>
<b>PHÁP</b>


<b>TRƯỜNG ĐẠI HỌC BÁCH KHOA ĐÀ NẴNG</b>


<b>1.</b> <b>Phương pháp phân tích cú pháp dưới lên</b>


<b>1.2. Phương pháp thứ tự yếu</b>


 <b><sub>Xây dựng bảng S_R</sub></b>


- <b><sub>X < Y hay X=Y thì: S_R[X,Y]=S</sub></b>
- <b><sub>X > Y thì: S_R[X,Y]=R</sub></b>


- <b><sub>Stack là $S và Buffer là $ thì: S_R[X,Y]=R*</sub></b>
- <b><sub>X và Y khơng có mối quan hệ thì: </sub></b>


<b>S_R[X,Y]=rỗng </b>
<b>.</b>


<b>.</b>


</div>
<span class='text_page_counter'>(163)</span><div class='page_container' data-page=163>

163


<b>CHƯƠNG 4. CÁC PHƯƠNG PHÁP PHÂN TÍCH CÚ </b>


<b>PHÁP</b>


<b>TRƯỜNG ĐẠI HỌC BÁCH KHOA ĐÀ NẴNG</b>


<b>1.</b> <b>Phương pháp phân tích cú pháp dưới lên</b>


<b>1.2. Phương pháp thứ tự yếu</b>


 <b><sub>Ví dụ: cho G như sau:</sub></b>


<b>S</b><b>A C D</b> <b>A</b><b> const ID=N;</b>


<b>C</b><b> var ID: K; </b> <b>D</b><b> begin L end.</b>


<b>L</b><b> write(ID) |read(ID)</b> <b>ID</b><b> a|b</b>


<b>N</b><b>5</b> <b>K</b><b>byte|real</b>


</div>
<span class='text_page_counter'>(164)</span><div class='page_container' data-page=164>

164


<b>CHƯƠNG 4. CÁC PHƯƠNG PHÁP PHÂN TÍCH CÚ </b>
<b>PHÁP</b>


<b>TRƯỜNG ĐẠI HỌC BÁCH KHOA ĐÀ NẴNG</b>


<b>1.</b> <b>Phương pháp phân tích cú pháp dưới lên</b>


<b>1.2. Phương pháp thứ tự yếu</b>


<b>Các mối quan hệ:</b> <b>begin<write|read</b> <b>)>end</b>


<b>A < C</b> <b>A < var</b> <b>; > var</b> <b>C < D</b>


<b>C< begin</b> <b>.|D > $</b> <b>const|A>$</b> <b>; > begin</b>
<b>var < ID</b> <b>ID = :</b> <b>: < K</b> <b>K = ;</b>


<b>var < a|b</b> <b>a|b > :</b> <b>:<byte|real</b> <b>byte|real>;</b>
<b>write|read = (</b> <b>( < ID</b> <b>ID = )</b>


<b>( < a|b a|b > ) const <ID</b> <b>ID= =</b> <b>= < N</b>
<b>N=;</b> <b>const <a|b</b> <b>a|b > =</b> <b>= < 5</b>
<b>5 > ;</b> <b>begin<L</b> <b>L=end</b> <b>end=.</b>


</div>
<span class='text_page_counter'>(165)</span><div class='page_container' data-page=165>

165


<b>CHƯƠNG 4. CÁC PHƯƠNG PHÁP PHÂN TÍCH CÚ </b>
<b>PHÁP</b>


<b>TRƯỜNG ĐẠI HỌC BÁCH KHOA ĐÀ NẴNG</b>


<b>1.</b> <b>Phương pháp phân tích cú pháp dưới lên</b>


<b>1.2. Phương pháp thứ tự yếu</b>


 <b><sub>Văn phạm thứ tự yếu</sub></b>


<b>Văn phạm phi ngữ cảnh thỏa mãn các ĐK:</b>


- <b><sub> Khơng có 2 sản xuất có cùng vế phải</sub></b>
- <b><sub> Khơng có vế phải là </sub></b><sub></sub>



- <b> Khơng có phần tử S_R[x,y] có cả trị S và R </b>


- <b><sub>Nếu </sub></b><sub></sub><b><sub>A</sub></b><sub></sub><b><sub>x1x2…xn và B</sub></b><sub></sub><b><sub>xixi+1…xn thì </sub></b>


</div>
<span class='text_page_counter'>(166)</span><div class='page_container' data-page=166>

166


<b>CHƯƠNG 4. CÁC PHƯƠNG PHÁP PHÂN TÍCH CÚ </b>
<b>PHÁP</b>


<b>TRƯỜNG ĐẠI HỌC BÁCH KHOA ĐÀ NẴNG</b>


<b>1.</b> <b>Phương pháp phân tích cú pháp dưới lên</b>


<b>1.2. Phương pháp thứ tự yếu</b>


 <b><sub>Văn phạm thứ tự yếu</sub></b>


<b>Nếu </b><b> xi-1<=B thì có nghĩa </b><b> C</b><b></b>


</div>
<span class='text_page_counter'>(167)</span><div class='page_container' data-page=167>

167


<b>CHƯƠNG 4. CÁC PHƯƠNG PHÁP PHÂN TÍCH CÚ </b>
<b>PHÁP</b>


<b>TRƯỜNG ĐẠI HỌC BÁCH KHOA ĐÀ NẴNG</b>


<b>1.</b> <b>Phương pháp phân tích cú pháp dưới lên</b>


<b>1.3. Phương pháp Simple LR (SLR)</b>



 <b><sub>Cấu tạo:</sub></b>


<b>Kết quả</b>


<b>$</b>
<b>a0</b>
<b>a1</b>


<b>…</b>
<b>ai</b>


<b>Buffer</b>


<b>Bộ phân </b>
<b>tích</b>
<b>Stack</b>


<b>$ S0 x0</b> <b>…</b> <b>Si-1 Xi-1</b> <b>Si</b>


</div>
<span class='text_page_counter'>(168)</span><div class='page_container' data-page=168>

168


<b>CHƯƠNG 4. CÁC PHƯƠNG PHÁP PHÂN TÍCH CÚ </b>
<b>PHÁP</b>


<b>TRƯỜNG ĐẠI HỌC BÁCH KHOA ĐÀ NẴNG</b>


<b>1.</b> <b>Phương pháp phân tích cú pháp dưới lên</b>


<b>1.3. Phương pháp Simple LR (SLR)</b>



 <b><sub>Cấu tạo:</sub></b>


- <b>Stack: $s<sub>0</sub>x<sub>0</sub> s<sub>1</sub>x<sub>1</sub>…s<sub>i-1</sub>x<sub>i-1</sub>s<sub>i</sub></b>
<b>s<sub>t</sub>: trạng thái; x<sub>t</sub></b><b>(Σ</b><b>Δ)</b>


- <b>Buffer: a<sub>i</sub>a<sub>i-1</sub>…a<sub>0</sub>$ ; với a<sub>t </sub></b><b>Σ</b>


- <b>Bảng SLR gồm 2 phần: action và goto</b>


</div>
<span class='text_page_counter'>(169)</span><div class='page_container' data-page=169>

169


<b>CHƯƠNG 4. CÁC PHƯƠNG PHÁP PHÂN TÍCH CÚ </b>
<b>PHÁP</b>


<b>TRƯỜNG ĐẠI HỌC BÁCH KHOA ĐÀ NẴNG</b>


<b>1.</b> <b>Phương pháp phân tích cú pháp dưới lên</b>


<b>1.3. Phương pháp Simple LR (SLR)</b>


 <b><sub>Cấu tạo:</sub></b>


• <b><sub>Chỉ số cột </sub></b>


<b>Phần action: a<sub>i</sub></b><b>Σ</b>


<b>Phần goto: X</b><b>Δ</b>


• <b>Action[S<sub>i</sub>,a<sub>i</sub>]=Shift j (Sj)</b>



</div>
<span class='text_page_counter'>(170)</span><div class='page_container' data-page=170>

170


<b>CHƯƠNG 4. CÁC PHƯƠNG PHÁP PHÂN TÍCH CÚ </b>
<b>PHÁP</b>


<b>TRƯỜNG ĐẠI HỌC BÁCH KHOA ĐÀ NẴNG</b>


<b>1.</b> <b>Phương pháp phân tích cú pháp dưới lên</b>


<b>1.3. Phương pháp Simple LR (SLR)</b>


 <b><sub>Cấu tạo:</sub></b>


• <b>Action[S<sub>i</sub>,a<sub>i</sub>]=Accept</b>


• <b>Action[S<sub>i</sub>,a<sub>i</sub>]=rỗng</b>


</div>
<span class='text_page_counter'>(171)</span><div class='page_container' data-page=171>

171


<b>CHƯƠNG 4. CÁC PHƯƠNG PHÁP PHÂN TÍCH CÚ </b>
<b>PHÁP</b>


<b>TRƯỜNG ĐẠI HỌC BÁCH KHOA ĐÀ NẴNG</b>


<b>1.</b> <b>Phương pháp phân tích cú pháp dưới lên</b>


<b>1.3. Phương pháp Simple LR (SLR)</b>


 <b><sub>Hoạt động:</sub></b>



<b>Tại một thời điểm bộ phân tích đọc trạng </b>
<b>thái S<sub>i</sub> ở đỉnh stack và ký hiệu vào a<sub>i </sub>ở đỉnh </b>
<b>buffer và tra trong bảng SLR ở phần Action </b>
<b>một giá trị. Nếu:</b>


- <b> Action[S<sub>i</sub>,a<sub>i</sub>]=Shift j (Sj)</b>


</div>
<span class='text_page_counter'>(172)</span><div class='page_container' data-page=172>

172


<b>CHƯƠNG 4. CÁC PHƯƠNG PHÁP PHÂN TÍCH CÚ </b>
<b>PHÁP</b>


<b>TRƯỜNG ĐẠI HỌC BÁCH KHOA ĐÀ NẴNG</b>


<b>1.</b> <b>Phương pháp phân tích cú pháp dưới lên</b>


<b>1.3. Phương pháp Simple LR (SLR)</b>


 <b><sub>Hoạt động:</sub></b>


- <b> Action[S<sub>i</sub>,a<sub>i</sub>]=Reduce A</b><b> (RJ)</b>


 <b><sub> Lấy 2*r phần tử ra khỏi stack. Với r=|</sub></b><sub></sub><b><sub>|</sub></b>
 <b><sub> Đẩy A vào stack</sub></b>


</div>
<span class='text_page_counter'>(173)</span><div class='page_container' data-page=173>

173


<b>CHƯƠNG 4. CÁC PHƯƠNG PHÁP PHÂN TÍCH CÚ </b>
<b>PHÁP</b>



<b>TRƯỜNG ĐẠI HỌC BÁCH KHOA ĐÀ NẴNG</b>


<b>1.</b> <b>Phương pháp phân tích cú pháp dưới lên</b>


<b>1.3. Phương pháp Simple LR (SLR)</b>


 <b><sub>Hoạt động:</sub></b>


- <b> Action[S<sub>i</sub>,a<sub>i</sub>]=Accept</b>


 <b><sub> Xâu x đúng cp của vpG</sub></b>


- <b> Action[S<sub>i</sub>,a<sub>i</sub>]=rỗng</b>


</div>
<span class='text_page_counter'>(174)</span><div class='page_container' data-page=174>

174


<b>CHƯƠNG 4. CÁC PHƯƠNG PHÁP PHÂN TÍCH CÚ </b>
<b>PHÁP</b>


<b>TRƯỜNG ĐẠI HỌC BÁCH KHOA ĐÀ NẴNG</b>


<b>1.</b> <b>Phương pháp phân tích cú pháp dưới lên</b>


<b>1.3. Phương pháp Simple LR (SLR)</b>


 <b><sub>Thuật toán:</sub></b>


<b>Sử dụng: 1 stack, 1 buffer, bảng SLR</b>
<b>Khởi tạo: - stack: $0</b>



<b>- Buffer: x$</b>


<b>Lặp: {</b><i><b>g/sử ở đỉnh stack là S</b><b><sub>i</sub></b><b>, đỉnh buffer là a</b></i><b>} </b>
<b>If (Action[S<sub>i</sub>,a]=accept) then </b>


</div>
<span class='text_page_counter'>(175)</span><div class='page_container' data-page=175>

175


<b>CHƯƠNG 4. CÁC PHƯƠNG PHÁP PHÂN TÍCH CÚ </b>
<b>PHÁP</b>


<b>TRƯỜNG ĐẠI HỌC BÁCH KHOA ĐÀ NẴNG</b>


<b>1.</b> <b>Phương pháp phân tích cú pháp dưới lên</b>


<b>1.3. Phương pháp Simple LR (SLR)</b>


 <b><sub>Thuật toán:</sub></b>


<b>Else If (Action[S<sub>i</sub>,a]=Sj) then </b>


- <b><sub>D/c a từ buffer </sub></b><sub></sub><b><sub> stack</sub></b>
- <b><sub>Đẩy j vào stack</sub></b>


<b>Else IF (Action[S<sub>i</sub>,a]=Reduce A</b><b>) then</b>


</div>
<span class='text_page_counter'>(176)</span><div class='page_container' data-page=176>

176


<b>CHƯƠNG 4. CÁC PHƯƠNG PHÁP PHÂN TÍCH CÚ </b>
<b>PHÁP</b>



<b>TRƯỜNG ĐẠI HỌC BÁCH KHOA ĐÀ NẴNG</b>


<b>1.</b> <b>Phương pháp phân tích cú pháp dưới lên</b>


<b>1.3. Phương pháp Simple LR (SLR)</b>


 <b><sub>Thuật toán:</sub></b>


- <b><sub>Đẩy A vào stack</sub></b>


- <b>Đẩy j vào stack. Với j=goto[S<sub>i-r</sub>,A]</b>
<b>Else {</b><i><b>Action[S</b><b><sub>i</sub></b><b>,a]=rỗng</b></i><b>}</b>


- <b>Báo lỗi x không đúng cp của G</b>


</div>
<span class='text_page_counter'>(177)</span><div class='page_container' data-page=177>

177


<b>CHƯƠNG 4. CÁC PHƯƠNG PHÁP PHÂN TÍCH CÚ </b>
<b>PHÁP</b>


<b>TRƯỜNG ĐẠI HỌC BÁCH KHOA ĐÀ NẴNG</b>


<b>1.</b> <b>Phương pháp phân tích cú pháp dưới lên</b>


<b>1.3. Phương pháp Simple LR (SLR)</b>


 <b><sub>Ví dụ: Cho vp G</sub></b>


<b>E </b><b> E + T | T</b>



<b>T </b><b> T * F | F</b>


<b>F </b><b> (E) | id</b>


<b>Xâu x: id*(id+id) </b>


</div>
<span class='text_page_counter'>(178)</span><div class='page_container' data-page=178>

178


<b>CHƯƠNG 4. CÁC PHƯƠNG PHÁP PHÂN TÍCH CÚ </b>
<b>PHÁP</b>


<b>TRƯỜNG ĐẠI HỌC BÁCH KHOA ĐÀ NẴNG</b>


<b>1.</b> <b>Phương pháp phân tích cú pháp dưới lên</b>


<b>1.3. Phương pháp Simple LR (SLR)</b>


<b>T/ </b>


<b>thái</b> <b><sub>id</sub></b> <b><sub>+</sub></b> <b><sub>*</sub></b> <b>Action<sub>(</sub></b> <b><sub>)</sub></b> <b><sub>$</sub></b> <b><sub>E</sub></b> <b>Goto<sub>T</sub></b> <b><sub>F</sub></b>


<b>0</b> <b>S5</b> <b>S4</b> <b>1</b> <b>2</b> <b>3</b>


<b>1</b> <b>S6</b> <b>Accept</b>


<b>2</b> <b>R2</b> <b>S7</b> <b>R2</b> <b>R2</b>


<b>3</b> <b>R4</b> <b>R4</b> <b>R4</b> <b>R4</b>


<b>4</b> <b>S5</b> <b>S4</b> <b>8</b> <b>2</b> <b>3</b>



<b>5</b> <b>R6</b> <b>R6</b> <b>R6</b> <b>R6</b>


</div>
<span class='text_page_counter'>(179)</span><div class='page_container' data-page=179>

179


<b>CHƯƠNG 4. CÁC PHƯƠNG PHÁP PHÂN TÍCH CÚ </b>
<b>PHÁP</b>


<b>TRƯỜNG ĐẠI HỌC BÁCH KHOA ĐÀ NẴNG</b>


<b>1.</b> <b>Phương pháp phân tích cú pháp dưới lên</b>


<b>1.3. Phương pháp Simple LR (SLR)</b>


<b>T/ </b>


<b>thái</b> <b><sub>id</sub></b> <b><sub>+</sub></b> <b><sub>*</sub></b> <b>Action<sub>(</sub></b> <b><sub>)</sub></b> <b><sub>$</sub></b> <b><sub>E</sub></b> <b>Goto<sub>T</sub></b> <b><sub>F</sub></b>


<b>7</b> <b>S5</b> <b>S4</b> <b>10</b>


<b>8</b> <b>S6</b> <b>S11</b>


<b>9</b> <b>R1</b> <b>S7</b> <b>R1</b> <b>R1</b>


<b>10</b> <b>R3</b> <b>R3</b> <b>R3</b> <b>R3</b>


</div>
<span class='text_page_counter'>(180)</span><div class='page_container' data-page=180>

180


<b>CHƯƠNG 4. CÁC PHƯƠNG PHÁP PHÂN TÍCH CÚ </b>
<b>PHÁP</b>



<b>TRƯỜNG ĐẠI HỌC BÁCH KHOA ĐÀ NẴNG</b>


<b>1.</b> <b>Phương pháp phân tích cú pháp dưới lên</b>


<b>1.3. Phương pháp Simple LR (SLR)</b>


 <b><sub>Ví dụ:</sub></b>


Stt Stack Buffer Hành động
0 $0 id*(id+id)$ S5
1 $0 id 5 *(id+id)$ R6(Fid)


2 $0 F 3 *(id+id)$ R4(TF)


</div>
<span class='text_page_counter'>(181)</span><div class='page_container' data-page=181>

181


<b>CHƯƠNG 4. CÁC PHƯƠNG PHÁP PHÂN TÍCH CÚ </b>
<b>PHÁP</b>


<b>TRƯỜNG ĐẠI HỌC BÁCH KHOA ĐÀ NẴNG</b>


<b>1.</b> <b>Phương pháp phân tích cú pháp dưới lên</b>


<b>1.3. Phương pháp Simple LR (SLR)</b>


 <b><sub>Ví dụ:</sub></b>


Stt Stack Buffer Hành động
6 $0 T 2 * 7 ( 4 id 5 +id)$ R6(Fid)



7 $0 T 2 * 7 ( 4 F 3 +id)$ R4(TF)


8 $0 T 2 * 7 ( 4 T 2 +id)$ R2(ET)


</div>
<span class='text_page_counter'>(182)</span><div class='page_container' data-page=182>

182


<b>CHƯƠNG 4. CÁC PHƯƠNG PHÁP PHÂN TÍCH CÚ </b>
<b>PHÁP</b>


<b>TRƯỜNG ĐẠI HỌC BÁCH KHOA ĐÀ NẴNG</b>


<b>1.</b> <b>Phương pháp phân tích cú pháp dưới lên</b>


<b>1.3. Phương pháp Simple LR (SLR)</b>


 <b><sub>Ví dụ:</sub></b>


Stt Stack Buffer Hành động
12 $0 T 2 * 7 ( 4 E 8 + 6 F 3 )$ R4(TF)


13 $0 T 2 * 7 ( 4 E 8 + 6 T 9 )$ R1(EE+T)


14 $0 T 2 * 7 ( 4 E 8 )$ S11
15 $0 T 2 * 7 ( 4 E 8 ) 11 $ R5(F(E))


16 $0 T 2 * 7 F 10 $ R3(TT*F)


</div>
<span class='text_page_counter'>(183)</span><div class='page_container' data-page=183>

183



<b>CHƯƠNG 4. CÁC PHƯƠNG PHÁP PHÂN TÍCH CÚ </b>
<b>PHÁP</b>


<b>TRƯỜNG ĐẠI HỌC BÁCH KHOA ĐÀ NẴNG</b>


<b>1.</b> <b>Phương pháp phân tích cú pháp dưới lên</b>


<b>1.3. Phương pháp Simple LR (SLR)</b>


 <b><sub>Ví dụ:</sub></b>


Stt Stack Buffer Hành động


</div>
<span class='text_page_counter'>(184)</span><div class='page_container' data-page=184>

184


<b>CHƯƠNG 4. CÁC PHƯƠNG PHÁP PHÂN TÍCH CÚ </b>
<b>PHÁP</b>


<b>TRƯỜNG ĐẠI HỌC BÁCH KHOA ĐÀ NẴNG</b>


<b>1.</b> <b>Phương pháp phân tích cú pháp dưới lên</b>


<b>1.3. Phương pháp Simple LR (SLR)</b>


 <b><sub>Xây dựng bảng SLR</sub></b>


- <b><sub>Văn phạm gia tố G’</sub></b>


<b>G’=G </b><b> {S’</b><b>S}</b>



<b>Ví dụ: G: S </b><b> 0S | 1S|0|1</b>


<b>G’: S’ </b><b> S</b>


</div>
<span class='text_page_counter'>(185)</span><div class='page_container' data-page=185>

185


<b>CHƯƠNG 4. CÁC PHƯƠNG PHÁP PHÂN TÍCH CÚ </b>
<b>PHÁP</b>


<b>TRƯỜNG ĐẠI HỌC BÁCH KHOA ĐÀ NẴNG</b>


<b>1.</b> <b>Phương pháp phân tích cú pháp dưới lên</b>


<b>1.3. Phương pháp Simple LR (SLR)</b>


 <b><sub>Xây dựng bảng SLR</sub></b>


- <b><sub>Thực thể: Sx thêm dấu chấm ở bất kỳ vị trí </sub></b>


<b>của vế phải.</b>


<b>Ví dụ: A </b><b>xyz</b>


<b>thì</b> <b>A </b><b>.xyz</b> <b>A</b><b>x.yz</b> <b>A</b><b>xy.z</b>


</div>
<span class='text_page_counter'>(186)</span><div class='page_container' data-page=186>

186


<b>CHƯƠNG 4. CÁC PHƯƠNG PHÁP PHÂN TÍCH CÚ </b>
<b>PHÁP</b>



<b>TRƯỜNG ĐẠI HỌC BÁCH KHOA ĐÀ NẴNG</b>


<b>1.</b> <b>Phương pháp phân tích cú pháp dưới lên</b>


<b>1.3. Phương pháp Simple LR (SLR)</b>


 <b><sub>Xây dựng bảng SLR</sub></b>


- <b>Hàm tính bao đóng Closure(I<sub>i</sub>): 2 qui tắc</b>


<b>(1) Đưa tất cả các thực thể trong I<sub>i</sub> vào closure(I<sub>i</sub>)</b>


<b>(2) Cứ mỗi thực thể có dạng A</b><b>.B</b><b>closure(I<sub>i</sub>) </b>


<b>mà B</b><b> thì thêm B</b><b>.</b><b> vào closure(I<sub>i</sub>) với </b>


</div>
<span class='text_page_counter'>(187)</span><div class='page_container' data-page=187>

187


<b>CHƯƠNG 4. CÁC PHƯƠNG PHÁP PHÂN TÍCH CÚ </b>
<b>PHÁP</b>


<b>TRƯỜNG ĐẠI HỌC BÁCH KHOA ĐÀ NẴNG</b>


<b>1.</b> <b>Phương pháp phân tích cú pháp dưới lên</b>


<b>1.3. Phương pháp Simple LR (SLR)</b>


 <b><sub>Ví dụ: Xác định tập closure(I) của VP G’</sub></b>


<b>E’</b><b> E</b>



<b>E </b><b> E + T | T</b>


<b>T </b><b> T * F | F</b>


<b>F </b><b> (E) | id</b>


</div>
<span class='text_page_counter'>(188)</span><div class='page_container' data-page=188>

188


<b>CHƯƠNG 4. CÁC PHƯƠNG PHÁP PHÂN TÍCH CÚ </b>
<b>PHÁP</b>


<b>TRƯỜNG ĐẠI HỌC BÁCH KHOA ĐÀ NẴNG</b>


<b>1.</b> <b>Phương pháp phân tích cú pháp dưới lên</b>


<b>1.3. Phương pháp Simple LR (SLR)</b>


 <b><sub>Xây dựng bảng SLR</sub></b>


- <b><sub>Hàm tính goto</sub></b>


<b>Goto(I<sub>i</sub>,x)=closure({A</b><b>x.</b><b>}) </b>


</div>
<span class='text_page_counter'>(189)</span><div class='page_container' data-page=189>

189


<b>CHƯƠNG 4. CÁC PHƯƠNG PHÁP PHÂN TÍCH CÚ </b>
<b>PHÁP</b>


<b>TRƯỜNG ĐẠI HỌC BÁCH KHOA ĐÀ NẴNG</b>



<b>1.</b> <b>Phương pháp phân tích cú pháp dưới lên</b>


<b>1.3. Phương pháp Simple LR (SLR)</b>


 <b><sub>Ví dụ: Tìm tất cả các tập goto(I,X) có thể </sub></b>


<b>của VP G </b>


<b>I={ </b> <b>E’</b><b>.E</b>


<b>E</b><b>.E+T</b>


<b>E</b><b>.T</b>


<b>T</b><b>.T*F </b> <b>}</b>


<b>X: E, T</b>


<b>Goto(I,E) và Goto(I,T)</b>


<b>E’</b><b> E</b>


<b>E </b><b> E + T | T</b>


<b>T </b><b> T * F | F</b>


<b>F </b><b> (E) | id</b>


<b>Goto(I,E)=closure({E’</b><b>E. </b>



<b>; E</b><b>E.+T})</b>


<b>Goto(I,T)=closure({E</b><b>T. </b>


</div>
<span class='text_page_counter'>(190)</span><div class='page_container' data-page=190>

190


<b>CHƯƠNG 4. CÁC PHƯƠNG PHÁP PHÂN TÍCH CÚ </b>
<b>PHÁP</b>


<b>TRƯỜNG ĐẠI HỌC BÁCH KHOA ĐÀ NẴNG</b>


<b>1.</b> <b>Phương pháp phân tích cú pháp dưới lên</b>


<b>1.3. Phương pháp Simple LR (SLR)</b>


 <b><sub>Xây dựng bảng SLR</sub></b>


- <b><sub>Tập thực thể LR(0)</sub></b>


<b>I<sub>0</sub>=closure({S’</b><b>.S})</b>


- <b>Tính tất cả các goto(I<sub>i</sub>,x) của tất cả các tập </b>
<b>thực thể ta sẽ được tập LR(0).</b>


</div>
<span class='text_page_counter'>(191)</span><div class='page_container' data-page=191>

191


<b>CHƯƠNG 4. CÁC PHƯƠNG PHÁP PHÂN TÍCH CÚ </b>
<b>PHÁP</b>



<b>TRƯỜNG ĐẠI HỌC BÁCH KHOA ĐÀ NẴNG</b>


<b>1.</b> <b>Phương pháp phân tích cú pháp dưới lên</b>


<b>1.3. Phương pháp Simple LR (SLR)</b>


 <b><sub>Xây dựng bảng SLR</sub></b>


- <b><sub>Qui tắc xác định hành động</sub></b>


(1)<b> A</b><b>.a</b> <b> I<sub>i</sub> và goto(I<sub>i</sub>,a)=I<sub>j </sub> với a </b><b>Σ </b>


<b>thì: Action[i,a]= Sj</b>


(2)<b> A</b><b>.X</b> <b> I<sub>i</sub> và goto(I<sub>i</sub>,X)=I<sub>j</sub> với X </b><b>Δ </b>


</div>
<span class='text_page_counter'>(192)</span><div class='page_container' data-page=192>

192


<b>CHƯƠNG 4. CÁC PHƯƠNG PHÁP PHÂN TÍCH CÚ </b>
<b>PHÁP</b>


<b>TRƯỜNG ĐẠI HỌC BÁCH KHOA ĐÀ NẴNG</b>


<b>1.</b> <b>Phương pháp phân tích cú pháp dưới lên</b>


<b>1.3. Phương pháp Simple LR (SLR)</b>


 <b><sub>Xây dựng bảng SLR</sub></b>


- <b><sub>Qui tắc xác định hành động</sub></b>



(3)<b> S’</b><b>S. </b><b> I<sub>i</sub> thì: Action[i,$]= accept</b>


(4)<b> A</b><b>. </b><b> I<sub>i</sub> thì Action[i,a]= Reduce A</b>


<b>với a</b><b> Follow(A); A<>S’</b>


- <b><sub>Qui tắc xác định Follow Follow(A)={(t</sub></b><sub></sub><b><sub>Σ|</sub></b>


</div>
<span class='text_page_counter'>(193)</span><div class='page_container' data-page=193>

193


<b>CHƯƠNG 4. CÁC PHƯƠNG PHÁP PHÂN TÍCH CÚ </b>
<b>PHÁP</b>


<b>TRƯỜNG ĐẠI HỌC BÁCH KHOA ĐÀ NẴNG</b>


<b>1.</b> <b>Phương pháp phân tích cú pháp dưới lên</b>


<b>1.3. Phương pháp Simple LR (SLR)</b>


 <b><sub>Ví dụ: Cho vp G</sub></b>


<b>E </b><b> E + T | T</b>


<b>T </b><b> T * F | F</b>


<b>F </b><b> (E) | id</b>


</div>
<span class='text_page_counter'>(194)</span><div class='page_container' data-page=194>

194



<b>CHƯƠNG 4. CÁC PHƯƠNG PHÁP PHÂN TÍCH CÚ </b>
<b>PHÁP</b>


<b>TRƯỜNG ĐẠI HỌC BÁCH KHOA ĐÀ NẴNG</b>


<b>1.</b> <b>Phương pháp phân tích cú pháp dưới lên</b>


<b>1.3. Phương pháp Simple LR (SLR)</b>


 <b><sub>Ví dụ: </sub></b>


- <b><sub>Xác định G’</sub></b>


- <b>Tạo tập thực thể LR(0)</b>


</div>
<span class='text_page_counter'>(195)</span><div class='page_container' data-page=195>

195


<b>CHƯƠNG 4. CÁC PHƯƠNG PHÁP PHÂN TÍCH CÚ </b>
<b>PHÁP</b>


<b>TRƯỜNG ĐẠI HỌC BÁCH KHOA ĐÀ NẴNG</b>


<b>1.</b> <b>Phương pháp phân tích cú pháp dưới lên</b>


<b>1.3. Phương pháp Simple LR (SLR)</b>


 <b><sub>Ví dụ: </sub></b>


- <b><sub>VP gia tố G’</sub></b>



<b>E’ </b><b> E</b>


<b>E </b><b> E + T | T</b>


<b>T </b><b> T * F | F</b>


</div>
<span class='text_page_counter'>(196)</span><div class='page_container' data-page=196>

196


<b>CHƯƠNG 4. CÁC PHƯƠNG PHÁP PHÂN TÍCH CÚ </b>
<b>PHÁP</b>


<b>TRƯỜNG ĐẠI HỌC BÁCH KHOA ĐÀ NẴNG</b>


<b>1.</b> <b>Phương pháp phân tích cú pháp dưới lên</b>


<b>1.3. Phương pháp Simple LR (SLR)</b>


 <b><sub>Ví dụ: </sub></b>


- <b><sub>Tạo tập thực thể LR(0)</sub></b>


<b>I<sub>0</sub>=closure({E’</b><b>.E})</b>


<b>E’</b><b>.E</b>


<b>E</b><b>.E+T</b>


<b>E</b><b>.T</b>


<b>T</b><b>.T*F</b>



<b>T</b><b>.F</b>


<b>F</b><b>.(E)</b>


<b>F</b><b>.id</b>


<b>I<sub>1</sub>=goto(I<sub>0</sub>,E)</b>
<b>E’</b><b>E.</b>


</div>
<span class='text_page_counter'>(197)</span><div class='page_container' data-page=197>

197


<b>CHƯƠNG 4. CÁC PHƯƠNG PHÁP PHÂN TÍCH CÚ </b>
<b>PHÁP</b>


<b>TRƯỜNG ĐẠI HỌC BÁCH KHOA ĐÀ NẴNG</b>


<b>1.</b> <b>Phương pháp phân tích cú pháp dưới lên</b>


<b>1.3. Phương pháp Simple LR (SLR)</b>


 <b><sub>Ví dụ: </sub></b>


</div>
<span class='text_page_counter'>(198)</span><div class='page_container' data-page=198>

198


<b>CHƯƠNG 4. CÁC PHƯƠNG PHÁP PHÂN TÍCH CÚ </b>
<b>PHÁP</b>


<b>TRƯỜNG ĐẠI HỌC BÁCH KHOA ĐÀ NẴNG</b>



<b>1.</b> <b>Phương pháp phân tích cú pháp dưới lên</b>


<b>1.3. Phương pháp Simple LR (SLR)</b>
<b>Bài tập: </b>


<b>(1)cho VPG:</b> <b>A </b><b>A or B | B</b>


<b>B </b><b> B and C | C</b>


<b>C </b><b> not C | (A) | true | false</b>


</div>
<span class='text_page_counter'>(199)</span><div class='page_container' data-page=199>

199


<b>CHƯƠNG 4. CÁC PHƯƠNG PHÁP PHÂN TÍCH CÚ </b>
<b>PHÁP</b>


<b>TRƯỜNG ĐẠI HỌC BÁCH KHOA ĐÀ NẴNG</b>


<b>1.</b> <b>Phương pháp phân tích cú pháp dưới lên</b>


<b>1.3. Phương pháp Simple LR (SLR)</b>
<b>Bài tập: </b>


<b>(2)Cho VPG:</b> <b>S </b><b>AS| b</b>


<b>A </b><b> SA| a</b>


</div>
<span class='text_page_counter'>(200)</span><div class='page_container' data-page=200>

200


<b>CHƯƠNG 4. CÁC PHƯƠNG PHÁP PHÂN TÍCH CÚ </b>


<b>PHÁP</b>


<b>TRƯỜNG ĐẠI HỌC BÁCH KHOA ĐÀ NẴNG</b>


<b>1.</b> <b>Phương pháp phân tích cú pháp dưới lên</b>


<b>1.4. Phương pháp Canonical LR (LR(1))</b>


- <b><sub>Trong PP SLR xung đột chỉ xảy ra ở những </sub></b>


<b>thực thể A</b><b> .</b>


- <b><sub>Khi xảy ra xung đột ta có thể sử dụng PP </sub></b>


</div>

<!--links-->

Tài liệu bạn tìm kiếm đã sẵn sàng tải về

Tải bản đầy đủ ngay
×