2013-03-24 27 views
8

Czy jest dostępna gramatyka POSIX sh lub czy muszę ją odczytać bezpośrednio ze specyfikacji?POSIX sh Gramatyka EBNF

Uwaga Nie interesuje mnie pure sh; rozciągnięta, ale zgodna sh jest również więcej niż w porządku dla moich celów.

Odpowiedz

5

Zrobiłem trochę więcej kopanie i znaleźć te zasoby:

  1. sh poradnik znajduje here

  2. Książka Bash zawierający atakujących 2.0 za gramatykę BNF (odszedł z here) z właściwymi dodatek still here

Przeanalizowałem źródła bash, pdksh i posh, ale nie znalazłem niczego zdalnie na poziomie abstrakcji, której potrzebuję.

+0

@ cewnik znalazł inną kopię i zapisał ją na WayBackMachine, powinien wydłużyć żywotność łącza. – rubenvb

1

Spodziewałbym się, że sh, csh, ash, bash, będą zawierać parsery. Ich wersje GNU są open source; możesz po prostu tam sprawdzić.

+0

to nie EBNF - http://git.savannah.gnu.org/cgit/bash.git/plain/parse.y – user1709408

+0

Nie czysty EBNF, ale wariacja Yacca. Możesz znaleźć zasady gramatyki, jeśli spojrzysz. Tak, są one pogrzebane w pozostałej części definicji YACC/Lex. Witamy w prawdziwych definicjach gramatyki dla narzędzi roboczych. –

6

Standard POSIX definiuje grammar dla powłoki POSIX. Definicja obejmuje adnotowaną gramatykę Yacc. W związku z tym można go przekonwertować na EBNF mniej lub bardziej mechanicznie.

Jeśli chcesz uzyskać "prawdziwą" gramatykę, musisz wyglądać mocniej. Wybierz swoją "prawdziwą powłokę" i znajdź źródło i sprawdź, co to jest gramatyka.

Należy zauważyć, że EBNF nie jest powszechnie używany. Ma ograniczoną wartość praktyczną, zwłaszcza dlatego, że zasadniczo nie ma narzędzi, które by ją wspierały. W związku z tym mało prawdopodobne jest, aby gramatyka EBNF (prawie wszystko) była dostępna od ręki.

+0

[BNF] (https://en.wikipedia.org/wiki/Backus%E2%80%93Naur_Form#History) jest z łatwością używany: [Grako] (https://pypi.python.org/pypi/grako/) wywodzi [ASTs] (https://pypi.python.org/pypi/grako/3.6.6#abstract-syntax-trees-asts) z [gramatyk 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)) w [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