Phân tích cú pháp

Một phần của tài liệu Giáo trình lý thuyết ngôn ngữ lập trình (nghề lập trình máy tính) (Trang 85 - 86)

D. Truyền tham số dạng biến toàn cục

1.Phân tích cú pháp

Một ngôn ngữ lập trình, như trình bày ở phần trên, được thường định nghĩa bởi cú pháp hay văn phạm của nó bởi dạng chuẩn BNF. Sau đó, khi người lập trình sử dụng ngôn ngữ để viết chương trình, người lập trình phải tuân theo văn phạm đã được định nghĩa. Để kiểm tra xem một chương trình có đúng cú pháp hay không thì cần phải thực hiện phân tích cú pháp. Phân tích cú pháp là quá trình xác định xem một xâu/câu có thể được sinh ra từ một văn phạm cho trước không. Cụ thể, phân tích cú pháp của một chương trình là xác định xem từng câu lệnh của chương trình có được sinh ra bởi cú pháp của ngôn ngữ lập trình đó không.

Trong phần này, chúng ta chỉ giới thiệu sơ bộ về quá trình phân tích cú pháp. Vấn đề này sẽ được trình bày đầy đủ hơn trong bài cuối cùng của môn học.

Có nhiều phương pháp phân tích cú pháp khác nhau. Tuy nhiên, các phương pháp này đều nằm trong hai lớp: từ trên xuống (top down) và từ dưới lên (bttom-up).

Để xác định xem một chương trình nguồn có được sinh ra từ một văn phạm hay không, các phương pháp phân tích cú pháp thường xây dựng cây phân tích của chương trình nguồn dựa trên văn phạm. Nếu tồn tại cây phân tích thì ta nói chương trình được sinh ra bởi văn phạm hay chương trình đúng cú pháp, ngược lại thì chương trình nguồn là không đúng cú pháp.

Để xây dựng cây phân tích cho một chương trình nguồn, chúng ta có thể tiến hành hai cách cơ bản tương ứng với hai lớp các phương pháp phân tích cú pháp. Phương pháp phân tích từ trên xuống sẽ bắt đầu xây dựng cây phân tích từ các lá đi đến đỉnh của một câu hay chương trình cho trước. Ngược lại, phương pháp phân tích từ dưới lên sẽ bắt đầu xây dựng cây phân tích từ đỉnh đến các lá của một câu hay chương trình cho trước.

Đối với mỗi lớp phương pháp phân tích cú pháp, có nhiều phương pháp khác nhau: - Phân tích cú pháp từ trên xuống gồm:

o Phân tích đệ quy đi xuống: phương pháp này thực hiện việc xây dựng cây phân tích từ gốc đến lá và có khả năng quay lui (backtracking).

o Phân tích cú pháp đoán nhận trước: phương này phân tích từ trên xuống nhưng không bị quay lui.

o Phân tích cú pháp đoán nhận trước không đệ quy: phương này sử dụng ngăn xếp (stack) thay vì quay lui.

- Phân tích cú pháp từ dưới lên gồm:

o Phân tích cú pháp thứ tự yếu

o Phân tích cú pháp LR

Dưới đây là một ví dụ đơn giản minh họa phân tích cú pháp. Chúng có văn phạm G định nghĩa ngôn ngữ sau:

<exp>  <exp> + <term> <exp>  <exp> - <term> <exp>  <term>

<term>  9

Chương trình nguồn là biểu thức: 9 – 5 + 3.

Thực hiện việc phân tích cú pháp sẽ tạo được cây phân tích như sau:

Như thế, chương trình nguồn 9 – 5 + 3 là đúng đắn về mặt cú pháp.

Một phần của tài liệu Giáo trình lý thuyết ngôn ngữ lập trình (nghề lập trình máy tính) (Trang 85 - 86)