5. Bài tập chương 2
1.5. Dạng biên dịch BNF (Backus-Naur Form)
Dạng biên dịch BNF do John Backus và Peter Naur đề xuất, là một dạng biểu diễn khác của văn phạm phi ngữ cảnh dưới dạng các định nghĩa cú pháp của ngôn ngữ hình thức. Trong dạng biên dịch BNF quy ước viết các ký hiệu, các quy tắc của văn phạm như sau:
- Các ký tự viết hoa hoặc đặt trong cặp dấu <> dùng để chỉ các ký hiệu không kết thúc
- Các ký tự viết thường hoặc đặt trong cặp nháy kép “ ” để chỉ ký hiệu kết thúc - Ký hiệu hoặc:=dùng để chỉ phạm trù cú pháp ở vế trái được giải thích bởi vế
phải
- Ký hiệu chỉ sự lựa chọn
- Ký hiệu lựa chọn [A] nghĩa là A
- Ký hiệu lặp {A} nghĩa là A AA AAA …
Trong dạng biên dịch BNF của văn phạm phi ngữ cảnh, các quy tắc có chung vế trái được viết gộp lại, thay đấu bởi dấu :=
Ví dụ với các quy tắc A aAb, A aA, A được viết là <A>:=a<A>b a<A>
Các ngôn ngữ lập trình bậc cao như Pascal, Algol, PL/1, … đều biểu diễn ở dạng BNF và là các dạng mở rộng của ngôn ngữ phi ngữ cảnh. Một tập con các từ, dạng câu trong tiếng Anh có thể định nghĩa bới 1 văn phạm phi ngữ cảnh dưới dạng biên dịch BNF.
Ví dụ 1: Dạng biên dịch của văn phạm cho 1 ngôn ngữ con của tiếng Anh: <câu>:=<danh ngữ><động từ>
<danh ngữ>:=<quán từ><tính từ><danh từ> <quán từ><danh từ> <động từ>:=<động từ><trạng từ> <động từ>
- 61 - <quán từ>:=a the
<tính từ>:=large hungry
<danh từ>:=rabit mathematician <động từ>:=eats hops
<trạng từ>:=quickly wildly
Ví dụ 2: một số nguyên có dấu được định nghĩa ở dạng biên dịch BNF như sau: <số nguyên có dấu>:=<dấu><số nguyên>
<dấu>:=+ -
<số nguyên>:=<chữ số> <chữ số><số nguyên> <chữ số>:=0 1 2 3 4 5 6 7 8 9