2013-03-24 31 views
8

Có sẵn ngữ pháp sh POSIX hiện có hay tôi có phải tìm ra từ đặc điểm kỹ thuật trực tiếp không?POSIX sh Ngữ pháp EBNF

Lưu ý Tôi không quan tâm nhiều đến số thuần túy sh; một sh ​​mở rộng nhưng phù hợp cũng là tốt hơn cho mục đích của tôi.

Trả lời

5

Tôi đã làm một số digging hơn và tìm thấy các nguồn lực:

  1. Một sh Hướng dẫn được đặt here

  2. Một cuốn sách Bash chứa BNF ngữ pháp Bash 2.0 (đi từ here) với liên quan phụ lục still here

Tôi đã xem xét các nguồn của bash, pdkshposh nhưng không tìm thấy bất kỳ điều gì từ xa ở mức trừu tượng mà tôi cần.

+0

@ceving tìm thấy một bản sao khác và được lưu vào WayBackMachine, nên tăng tuổi thọ liên kết. – rubenvb

1

Tôi mong rằng sh, csh, ash, bash, sẽ chứa các trình phân tích cú pháp. Các phiên bản GNU trong số này là mã nguồn mở; bạn có thể chỉ cần kiểm tra ở đó.

+0

không phải là EBNF - http://git.savannah.gnu.org/cgit/bash.git/plain/parse.y – user1709408

+0

Không thuần túy EBNF, nhưng biến thể của Yacc trên đó. Bạn có thể tìm thấy các quy tắc ngữ pháp nếu bạn nhìn. Có, chúng được chôn cất trong phần còn lại của định nghĩa YACC/Lex. Chào mừng bạn đến với định nghĩa ngữ pháp thực sự cho các công cụ làm việc. –

6

Chuẩn POSIX xác định grammar cho vỏ POSIX. Định nghĩa bao gồm ngữ pháp Yacc được chú thích. Như vậy, nó có thể được chuyển đổi sang EBNF nhiều hơn hoặc ít hơn về cơ học.

Nếu bạn muốn ngữ pháp 'thực', thì bạn phải nhìn kỹ hơn. Chọn 'vỏ thật' của bạn và tìm nguồn và tìm hiểu ngữ pháp là gì.

Lưu ý rằng EBNF không được sử dụng rộng rãi. Nó có giá trị thực tế hạn chế, không ít nhất là vì về cơ bản không có công cụ hỗ trợ nó. Do đó, bạn không thể tìm thấy một ngữ pháp EBNF (của hầu như bất cứ điều gì) off-the-shelf.

+0

[BNF] (https://en.wikipedia.org/wiki/Backus%E2%80%93Naur_Form#History) được sử dụng dễ dàng: [Grako] (https://pypi.python.org/pypi/grako/) xuất phát [ASTs] (https://pypi.python.org/pypi/grako/3.6.6#abstract-syntax-trees-asts) từ [ngữ pháp BNF] (http://stackoverflow.com/questions/334479/repository -of-bnf-grammars) ([bash] (http://my.safaribooksonline.com/book/operating-systems-and-server-administration/unix/1565923472/syntax/lbs.appd.div.3)) trong [Python] (https://docs.python.org/3.6/reference/grammar.html?highlight=grammar), [etc] (https://en.wikipedia.org/wiki/Backus%E2%80%93Naur_Form #Software_using_BNF) – jalanb

Các vấn đề liên quan