Download as docx, pdf, or txt
Download as docx, pdf, or txt
You are on page 1of 1

 Văn phạm phi ngữ cảnh gồm:

- Tập các kí hiệu kết thúc T (là các token do bộ phân tích từ vựng trả về).
- Tập các kí hiệu không kết thúc N, là những khái niệm văn phạm do mình đưa ra để mô tả cấu
trúc của một câu.
- Một kí hiệu bắt đầu S € N.
- Tấp các luật sinh P. Mỗi luật sinh p € P có dạng X -> α. X là kí hiệu không kết thúc, α là một chuỗi
các kí hiệu kết thúc và/hoặc không kết thúc (có thể rỗng). Nếu các luật sinh có cùng kí hiệu bắt
đầu, để viết gọn lại dung dấu | thay cho ->.
 Quá trình sinh: từ một văn phạm, làm sao biết được ngôn ngữ mà văn phạm đó mô tả.
Dẫn xuất trái nhất (phải nhất) là quá trình dẫn xuất luôn chọn ký hiệu không kết thúc nằm ngoài
cùng bên trái (phải) trong số các ký hiệu không kết thúc có trong chuỗi dẫn xuất để thay thế.
Dấu => để thể hiện sự thay thế trong quá trình dẫn xuất. Mỗi lần chỉ thay thế một ký hiệu không
kết thúc.
 Quá trình nhận dạng: cho một chuỗi, trả lời được chuỗi đó có đúng với văn phạm hay không. Khi
nhận dạng được tạo ra cây phân tích với nút gốc là kí hiệu bắt đầu, với mỗi luật sinh X -> Y1Y2…
Yn thêm các nút con Y1, Y2,… Yn vào nút cha X.
 Quy tắc One vs Many khi viết văn phạm: 1 đặt trước nhiều.

Quy tắc viết cho nhiều: dùng đệ quy

<many> -> <one> [<phân cách>] <many>

| <trường hợp không đệ quy>

<trường hợp không đệ quy> ta xem ít nhất là bao nhiêu:

- Là <one> nếu có ít nhất 1 phần tử hoặc có phân cách giữa các phần tử
- Là € nếu danh sách có thể rỗng hoặc không có phân cách giữa các phần tử
 Dùng đệ quy để viết cấu trúc lồng.
 Extended Backus-Naur Form (EBNF): cho phép đưa thêm các phép toán của biểu thức chính quy
vào vế phải (dạng lặp, còn BNF là đệ quy như trên).
 Nhập nhằng văn phạm: tìm được nhiều cây phân tích cho cùng một chuỗi nhập, do có thể triển
khai các kí hiệu không kết thúc ở đâu trước cũng được. Khử nhập nhằng bằng cách không cho đệ
quy nhiều nơi, chỉ cho đệ quy một bên, bằng cách bỏ một hạng tử đệ quy ở vế phải bằng hạng
tử khác.

Nếu phép toán là kết hợp trái, bỏ vào bên phải và ngược lại. Tức là kết hợp bên nào thì giữ lại hạng tử
đệ quy bên đó. Nếu không có tính kết hợp thì bỏ cả hai. ANTLR có <assoc=left> (mặc định) và
<assoc=right>.

Phép toán nào có độ ưu tiên càng thấp thì viết càng gần kí hiệu bắt đầu (do trong cây phân tích toán tử
càng gần nút gốc là kí hiêu bắt đầu thì càng được thực hiện cuối). ANTLR phép toán nào khai báo trước
thì ưu tiên cao hơn.

You might also like