Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 23 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
23
Dung lượng
550,77 KB
Nội dung
Bài BNF sơ đồ cú pháp Siêu ngữ Backus biến thể • Siêu ngữ (metalanguage ):Ngôn ngữ sử dụng lệnh để mô tả ngôn ngữ khác • BNF (Backus Naur Form) dạng siêu cú pháp để mơ tả ngơn ngữ lập trình • BNF sử dụng rộng rãi để mô tả văn phạm ngơn ngữ lập trình, tập lệnh giao thức truyền thông Ký pháp BNF • Ký pháp BNF tập luật ,vế trái luật cấu trúc cú pháp • Tên cấu trúc cú pháp gọi ký hiệu khơng kết thúc • Các ký hiệu khơng kết thúc thường bao cặp • Các ký hiệu kết thúc thường phân cách cặp nháy đơn nháy kép Ký pháp BNF • Mỗi ký hiệu không kết thúc định nghĩa hay nhiều luật • Các luật có dạng N::=s (N ký hiệu không kết thúc, s xâu gồm hay nhiều ký hiệu kết thúc khơng kết thúc Các luật có chung vế trái phân cách | ) Ví dụ BNF : văn phạm sản sinh số thực ::= | '.’ | '.’< dãy chữ số > | 'e’ ::= | ‘+’ | ‘-‘ ::= ‘0’ | ::= ‘1’ | ‘2’ | ‘3’ | ‘4’ | ‘5’ | ‘6’ | ‘7’ | ‘8’ | ‘9’ < dãy chữ số > ::= | < dãy chữ số > ::= ‘0’ | ‘1’ | ‘2’ | ‘3’ | ‘4’ | ‘5’ | ‘6’ | ‘7’ | ‘8’ | ‘9’ Văn phạm viết BNF, công cụ phổ biến để biểu diễn cú pháp ngôn ngữ lập trình EBNF • EBNF (Extended BNF ) phát triển từ ký pháp BNF EBNF có ký pháp tương tự BNF đơn giản hoá cách sử dụng số ký hiệu đặc biệt : [] phần tuỳ chọn(có khơng) {} phần lặp lại số lần tuỳ ý không xuất lần (Nếu lặp lại m hay n lần , dùng n hay m số dưới) Không cần dùng ‘’ cho ký hiệu kết thúc So sánh BNF EBNF Ví dụ • Trong EBNF ::= IF THEN [ELSE ] • Trong BNF ::= ‘IF’ ‘THEN’ | ‘IF’ ‘THEN’ ‘ELSE’ Ví dụ: Một đoạn văn phạm Python EBNF compound_stmt: if_stmt | while_stmt | for_stmt | try_stmt | with_stmt | funcdef | classdef | decorated | async_stmt async_stmt: 'async' (funcdef | with_stmt | for_stmt) if_stmt: 'if' test ':' suite ('elif' test ':' suite)* ['else' ':' suite] while_stmt: 'while' test ':' suite ['else' ':' suite] for_stmt: 'for' exprlist 'in' testlist ':' suite ['else' ':' suite] try_stmt: ('try' ':' suite ((except_clause ':' suite)+ ['else' ':' suite] ['finally' ':' suite] | 'finally' ':' suite)) with_stmt: 'with' with_item (',' with_item)* ':' suite with_item: test ['as' expr] Văn phạm KPL viết BNF 01) ::= KW_PROGRAM TK_IDENT SB_SEMICOLON SB_PERIOD 02) 03) ::= KW_CONST ::= 04) ::= KW_TYPE 05) ::= 06) ::= KW_VAR 07) ::= 08) ::= | 09) ::= KW_BEGIN KW_END 10) ::= 11) ::= e 12) ::= TK_IDENT SB_EQUAL SB_SEMICOLON 13) ::= 14) ::= e 15) ::= TK_IDENT SB_EQUAL SB_SEMICOLON 16) ::= 17) ::= e 18) ::= TK_IDENT SB_COLON SB_SEMICOLON Văn phạm KPL viết BNF 19) ::= s 20) ::= s 21) ::= e 22) ::= KW_FUNCTION TK_IDENT SB_COLON SB_SEMICOLON SB_SEMICOLON 23) ::= KW_PROCEDURE TK_IDENT SB_SEMICOLON SB_SEMICOLON 24) 25) ::= SB_LPAR SB_RPAR ::= e 26) ::= SB_SEMICOLON 27) ::= e 28) 29) 30) 31) 32) 33) ::= ::= ::= ::= ::= TK_IDENT SB_COLON ::= KW_VAR TK_IDENT SB_COLON KW_INTEGER KW_CHAR TK_IDENT KW_ARRAY SB_LSEL TK_NUMBER SB_RSEL KW_OF 10 Văn phạm KPL viết BNF 34) ::= KW_INTEGER 35) ::= KW_CHAR 36) ::= TK_NUMBER 37) ::= TK_IDENT 38) ::= TK_CHAR 40) 41) 42) 43) ::= ::= ::= ::= SB_PLUS SB_MINUS TK_CHAR 44) ::= TK_IDENT 45) ::= TK_NUMBER 46) ::= 47) ::= SB_SEMICOLON 48) ::= e 11 Văn phạm KPL viết BNF 49) 50) 51) 52) 53) 54) 55) 56) 57) ::= ::= ::= ::= ::= ::= ::= e ::= SB_ASSIGN ::= TK_IDENT SB_ASSIGN 58) ::= KW_CALL TK_IDENT 59) ::= KW_BEGIN KW_END 60) ::= KW_IF KW_THEN 61) 62) ::= KW_ELSE ::= e 63) 64) ::= KW_WHILE KW_DO ::= KW_FOR TK_IDENT SB_ASSIGN KW_TO KW_DO 12 Văn phạm KPL viết BNF 65) ::= SB_LPAR SB_RPAR 66) ::= e 67) ::= SB_COMMA 68) ::= e 68) ::= 69) 70) 71) 72) 73) 74) ::= ::= ::= ::= ::= ::= SB_EQ SB_NEQ SB_LE SB_LT SB_GE SB_GT 13 Văn phạm KPL viết BNF 75) ::= SB_PLUS 76) ::= SB_MINUS 77) ::= 78) ::= 79) ::= SB_PLUS 80) ::= SB_MINUS 81) ::= e 82) ::= 83) 84) 85) 86) 87) 88) 89) ::= SB_TIMES ::= SB_SLASH ::= e ::= ::= ::= ::= SB_LPAR SB_RPAR 90) ::= TK_IDENT 91) ::= TK_IDENT 92) ::= SB_LSEL SB_RSEL 93) ::= e 14 Sơ đồ cú pháp • Là công cụ để mô tả cú pháp ngơn ngữ lập trình dạng đồ thị • Mỗi sơ đồ cú pháp đồ thị định hướng với lối vào lối xác định • Mỗi sơ đồ cú pháp có tên 15 Ví dụ sơ đồ cú pháp 16 Sơ đồ cú pháp KPL (Tổng thể CT) 17 Sơ đồ cú pháp KPL (Khối) 18 Sơ đồ cú pháp KPL (tham số, không dấu) 19 Sơ đồ cú pháp KPL (Khai báo) 20 Sơ đồ cú pháp KPL (lệnh) 21 Sơ đồ cú pháp KPL (biểu thức) 22 Sơ đồ cú pháp KPL (thừa số,điều kiện) 23