2013-03-24 7 views
8

Gibt es eine vorhandene POSIX sh-Grammatik oder muss ich sie direkt aus der Spezifikation herausfinden?POSIX sh EBNF Grammatik

Hinweis Ich bin nicht so sehr an einem reinen sh interessiert; ein erweiterter, aber konformer sh ist auch mehr als in Ordnung für meine Zwecke.

Antwort

5

Ich habe etwas mehr zu graben und fand diese Ressourcen getan:

  1. Ein sh Tutorial here

  2. A Bash befindet Buch Bash 2.0 des BNF-Grammatik enthält, mit dem entsprechenden (von here gegangen) Anhang still here

Ich habe durch die Quellen vongeschaut, pdksh und posh, aber ich habe nichts Entferntes auf der Ebene der Abstraktion gefunden, die ich brauche.

+0

@ceving fand eine andere Kopie und speicherte diese auf der WayBackMachine, sollte die Link-Langlebigkeit erhöhen. – rubenvb

1

Ich würde erwarten, dass SH, Csh, Asche, Bash, würde Parser enthalten. GNU-Versionen davon sind Open Source; Sie könnten einfach dort nachsehen.

+0

ist es nicht EBNF - http://git.savannah.gnu.org/cgit/bash.git/plain/parse.y – user1709408

+0

Nicht rein EBNF, aber Yaccs Variation darauf. Sie können die Grammatikregeln finden, wenn Sie schauen. Ja, sie sind im Rest der YACC/Lex-Definition vergraben. Willkommen bei echten Grammatikdefinitionen für Arbeitswerkzeuge. –

6

Der POSIX-Standard definiert die grammar für die POSIX-Shell. Die Definition enthält eine kommentierte Yacc-Grammatik. Als solches kann es mehr oder weniger mechanisch in EBNF umgewandelt werden.

Wenn Sie eine "echte" Grammatik wollen, dann müssen Sie härter schauen. Wähle deine "echte Shell" und finde die Quelle und finde heraus, woraus die Grammatik besteht.

Beachten Sie, dass EBNF nicht weit verbreitet ist. Es ist von begrenztem praktischen Wert, nicht zuletzt, weil es im Wesentlichen keine Werkzeuge gibt, die es unterstützen. Daher ist es unwahrscheinlich, dass Sie eine EBNF-Grammatik (von fast allem) von der Stange finden.

+0

[BNF] (https://en.wikipedia.org/wiki/Backus%E2%80%93Naur_Form#History) wird einfach verwendet: [Grako] (https://pypi.python.org/pypi/grako/) leitet [ASTs] (https://pypi.python.org/pypi/grako/3.6.6#abstract-syntax-trees-asts) aus [BNF-Grammatiken] ab (http://stackoverflow.com/questions/334479/repository) -of-bnf-Grammatiken) ([bash] (http://my.safaribooksonline.com/book/operating-systems-and-server-administration/unix/1565923472/syntax/lbs.appd.div.3)) in [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