Tôi muốn đưa ra một cú pháp ngôn ngữ. Tôi đã đọc một chút về ba điều này, và thực sự không thể thấy bất cứ điều gì mà người ta có thể làm mà người khác không thể. Có lý do gì để sử dụng cái khác không? Hay nó chỉ là vấn đề ưu tiên?BNF vs EBNF so với ABNF: lựa chọn nào?
Trả lời
Bạn phải suy nghĩ về EBNF và ABNF như phần mở rộng đó giúp bạn chỉ súc tích và biểu cảm hơn trong khi phát triển các ngữ pháp của bạn.
Ví dụ suy nghĩ về một biểu tượng phi terminal tùy chọn, trong một BNF ngữ pháp bạn sẽ xác định nó bằng cách sử dụng những biểu tượng trung gian như:
A ::= OPTIONAL OTHER
OPTIONAL ::= opt_part | epsilon
trong khi với EBNF bạn có thể làm điều đó trực tiếp sử dụng tùy chọn cú pháp:
A ::= [opt_part] OTHER
Sau đó, vì không có cách để thể hiện ưu tiên trong một BNF bạn có cho chúng tôi e luôn những biểu tượng trung gian cũng cho lựa chọn lồng nhau:
BNF
A ::= B C
B ::= a | b | c
EBNF
A ::= (a | b | c) C
Điều này đúng cho nhiều vấn đề cú pháp được phép trong EBNF hoặc ABNF ngữ pháp, nhờ vào đường cú pháp nhưng không phải với một bình thường BNF. ABNF kéo dài EBNF, cho phép bạn làm những điều phức tạp hơn, như việc xác định có bao nhiêu lần xuất hiện của một biểu tượng có thể được tìm thấy với nhau (tức là 4*DIGIT
)
Vì vậy, lựa chọn một ABNF hoặc một EBNF như ngôn ngữ của lựa chọn cho ngữ pháp của bạn sẽ làm cho công việc của bạn dễ dàng hơn, vì bạn sẽ biểu cảm hơn mà không làm bạn ngữ pháp với các biểu tượng vô dụng mà trình tạo phân tích cú pháp của bạn sẽ tạo ra, nhưng bạn sẽ không quan tâm đến chúng!
Bạn có thể đạt được những gì bạn muốn bằng cách sử dụng bất kỳ thứ gì trong số đó, nhưng mỗi cái là ngắn gọn và hiệu quả để thể hiện ngôn ngữ của bạn tùy thuộc vào các tính năng mà ngôn ngữ của bạn bao gồm.
Tôi đã đọc BNF, EBNF và ABNF từ wikipedia và nó đã được mô tả một số khác biệt và tại sao EBNF và ABNF đi vào bức tranh dựa trên BNF
EBNF là phiên bản BNF mở rộng/mới hơn, do đó, vấn đề trở nên đơn giản hơn: EBNF so với ABNF. Tôi không phải là một chuyên gia, nhưng nghĩ rằng nó sẽ phụ thuộc vào một ngôn ngữ, có cú pháp bạn muốn xác định. Ngoài ra còn có một số trình hiển thị cho EBNF (http://www.google.co.il/search?sourceid=chrome&ie=UTF-8&q=Ebnf-Visualizer), nhưng không thấy gì cho ABNF,
Một lựa chọn hợp lý sẽ đề xuất đi với EBNF, vì lý do đó là tiêu chuẩn ISO: ISO/IEC 14977 : 1996(E) [pdf]. Ví dụ, nó được sử dụng cho UML Human-Usable Textual Notation của OMG.
Theo Wikipedia, các chuỗi ký tự được trích dẫn kép của ABNF phân biệt chữ hoa chữ thường và các đối sánh chữ hoa chữ thường phải được định nghĩa là các giá trị ASCII dạng số. Tôi cho rằng đó là một bất lợi.
Văn bản văn bản được chỉ định thông qua việc sử dụng chuỗi được đính kèm trong dấu ngoặc kép (
"
). Các chuỗi này không phân biệt dạng chữ và tập ký tự được sử dụng là ASCII (US-). Do đó, chuỗi “abc” sẽ khớp với “abc”, “Abc”, “aBc”, “abC”, “ABc”, “AbC”, “aBC” và “ABC”. Đối với trường hợp trùng khớp chữ, các ký tự rõ ràng phải được xác định: để khớp với “aBc”, định nghĩa sẽ là%d97.66.99
.
https://en.wikipedia.org/wiki/Augmented_Backus%E2%80%93Naur_Form#Terminal_values
Tuy nhiên, RFC 7405 dường như thêm case-sensitive literals chuỗi ABNF.
- 1. Chuyển đổi EBNF sang BNF
- 2. EBNF hoặc BNF cho ngôn ngữ lập trình LOGO
- 3. Đa luồng so với Đa phiên bản - Lựa chọn nào?
- 4. Có công cụ nào để chuyển đổi giữa ANTLR và các dạng khác của BNF không?
- 5. id so với tiêu chí lựa chọn lớp
- 6. Mô hình Django - lựa chọn so với khóa ngoại?
- 7. jquery tìm so với lựa chọn bối cảnh
- 8. pyparsing - tải ABNF?
- 9. Stackpanel: Chiều cao so với ActualHeight so với ExtentHeight vs ViewportHeight vs DesiredSize vs RenderSize
- 10. CLOB so với VARCHAR2 và có lựa chọn thay thế nào khác không?
- 11. Chaining lựa chọn với Chosen
- 12. Turbogears 2 vs Django - lời khuyên nào về lựa chọn thay thế cho Turbogears 1?
- 13. trả về Chuỗi so với Số nguyên so với số không được xác định vs null
- 14. Lựa chọn Django chọn
- 15. Node-PerfectAPI vs Restify.js so với ExpressJS vs Node-APIServer
- 16. Tích lũy vs lần so với giảm so với nén
- 17. ID so với UniqueID vs ClientID vs UniqueClientID so với StaticClientID?
- 18. Thay đổi lựa chọn trong một lựa chọn với plugin được chọn
- 19. SelectList với một lựa chọn vô
- 20. Đo thời gian trong Linux - thời gian so với đồng hồ so với getrusage vs clock_gettime vs gettimeofday vs timespec_get?
- 21. WPF TreeView với nhiều lựa chọn
- 22. Log4j: DailyRollingFileAppender với MaxFileSize Lựa chọn
- 23. Quản lý nhiều lựa chọn với MVVM
- 24. Delphi so với C++ Builder - Lựa chọn tốt hơn cho lập trình viên Java Làm Win32
- 25. Một lựa chọn tốt hơn so với để hiển thị các ô bảng HTML trống?
- 26. Nhiều lựa chọn giá trị sửa mẫu lựa chọn
- 27. webforms vs asp.net mvc cho ứng dụng trang đơn - lựa chọn nào?
- 28. SortedList so với SortedDictionary vs. Sort()
- 29. Boo vs C# so với Python?
- 30. DataTable Chọn vs LINQ Chọn
So với 4 * DIGIT: tương tự có thể được thực hiện trong EBNF sử dụng cú pháp tương tự. – Kamarey
Ngoài ra: IETF sử dụng ABNF. ABNF là cách tiện dụng hơn EBNF. –