2013-03-24 3 views
8

Есть ли существующая грамматика POSIX sh или мне нужно выяснить ее из спецификации напрямую?POSIX sh EBNF grammar

Примечание: Меня интересует только sh; расширенный, но соответствующий sh также более чем подходит для моих целей.

ответ

5

Я сделал еще некоторое рытье и нашел эти ресурсы:

  1. sh учебник находится here

  2. Баш книга, содержащая грамматику BNF Bash 2.0 в (путь от here) с соответствующими приложение still here

Я просмотрел источники bash, pdksh и posh, но ничего не нашли удаленно на уровне абстракции, в которой я нуждаюсь.

+0

@ceving нашел другую копию и сохранил ее в WayBackMachine, должен увеличить долговечность ссылки. – rubenvb

1

Я бы ожидал, что sh, csh, ash, bash будут содержать парсеры. Варианты GNU - с открытым исходным кодом; вы можете просто пойти туда проверить.

+0

это не EBNF - http://git.savannah.gnu.org/cgit/bash.git/plain/parse.y – user1709408

+0

Не чистый EBNF, но вариация Yacc на нем. Вы можете найти правила грамматики, если вы посмотрите. Да, они похоронены среди остальной части определения YACC/Lex. Добро пожаловать в настоящие определения грамматики для рабочих инструментов. –

6

В стандарте POSIX определяется оболочка POSIX grammar. Определение включает аннотированную грамматику Yacc. Таким образом, он может быть преобразован в EBNF более или менее механически.

Если вы хотите «настоящую» грамматику, вам придется выглядеть сложнее. Выберите свою «настоящую оболочку» и найдите источник и определите, из чего состоит грамматика.

Обратите внимание, что EBNF широко не используется. Он имеет ограниченную практическую ценность, не в последнюю очередь потому, что по существу нет инструментов, которые его поддерживают. Таким образом, вы вряд ли найдете грамматику EBNF (почти ничего) готовой.

+0

[BNF] (https://en.wikipedia.org/wiki/Backus%E2%80%93Naur_Form#History) используется легко: [Grako] (https://pypi.python.org/pypi/grako/) выводит [ASTs] (https://pypi.python.org/pypi/grako/3.6.6#abstract-syntax-trees-asts) из [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)) в [Python] (https://docs.python.org/3.6/reference/grammar.html?highlight=grammar), [и т. Д.] (Https://en.wikipedia.org/wiki/Backus%E2%80%93Naur_Form #Software_using_BNF) – jalanb