[Không ai biết] ngữ pháp khác "đặc thù" của ngôn ngữ lập trình hiện đại?
Một trong những mục yêu thích của tôi, Modula-3, được thiết kế vào năm 1990 với sự chúc phúc của Niklaus Wirth là ngôn ngữ mới nhất trong "gia đình Pascal". Có ai khác nhớ những người này chiến đấu khủng khiếp về nơi dấu chấm phẩy phải là dấu phân tách hoặc terminator? Trong Modula-3, lựa chọn là của bạn! Các EBNF cho một chuỗi các câu lệnh là
stmt ::= BEGIN [stmt {; stmt} [;]] END
Tương tự như vậy, khi viết giải pháp thay thế trong một tuyên bố CASE
, Modula-3 cho phép bạn sử dụng các thanh dọc |
là một trong hai thiết bị tách hoặc một tiền tố.Vì vậy, bạn có thể viết
CASE c OF
| 'a', 'e', 'i', 'o', 'u' => RETURN Char.Vowel
| 'y' => RETURN Char.Semivowel
ELSE RETURN Char.Consonant
END
hoặc bạn có thể rời khỏi thanh đầu tiên, có lẽ vì bạn muốn viết OF
ở vị trí đó.
Tôi nghĩ những gì tôi thích nhiều như bản thân thiết kế là nhận thức của các nhà thiết kế rằng có một cuộc chiến tôn giáo đang diễn ra và sự kiên trì của họ trong việc tìm cách hỗ trợ cả hai bên. Hãy để người lập trình chọn!
P.S. Mục tiêu Caml cho phép sử dụng cho phép của |
trong trường hợp các biểu thức trong khi các phương ngữ tiêu chuẩn trước đó và chặt chẽ tiêu chuẩn ML không. Kết quả là, biểu thức trường hợp thường xấu hơn trong mã ML Chuẩn.
EDIT: Sau khi nhìn thấy câu trả lời TED của tôi đã kiểm tra ngữ pháp Modula-2 và anh ấy là đúng, Modula-2 cũng hỗ trợ dấu chấm phẩy như terminator, nhưng thông qua các thiết bị của tuyên bố trống rỗng, mà làm những thứ như thế
x := x + 1;;;;;; RETURN x
hợp pháp. Tôi cho rằng đó không phải là một điều xấu. Modula-2 không cho phép sử dụng linh hoạt bộ phân tách chữ hoa |
, tuy nhiên; dường như có nguồn gốc từ Modula-3.
Nếu tôi nhớ lại, khi tôi học C từ K & R ban đầu (pre-ANSI) vào năm 1983, dấu phẩy sau được cho phép. Điều này đã được cố ý để cho phép tạo mã tự động dễ dàng hơn (bằng các công cụ như YACC). – Ralph
Nó cũng giúp khi (như trong định nghĩa 'enum') mỗi mục nằm trên một dòng riêng của nó: thêm một giá trị mới vào cuối đơn giản là một dòng bổ sung (không yêu cầu thay đổi dòng mới áp chót), có khả năng tránh sự phụ thuộc trên/bởi bất kỳ thay đổi nào đối với đường mới áp chót. – jhfrontz