Die EBNF der PLR (Die EBNF der PLR), Lektion, Seite 724328
https://www.purl.org/stefan_ram/pub/ebnf_python (Permalink) ist die kanonische URI dieser Seite.
Stefan Ram
Python-Kurs

Die EBNF der PLR

Die Python Language Reference  (PLR) verwendet eine spezielle Form der EBNF, die hier vorgestellt werden soll (Stand PLR 3.8.0a0 von Anfang 2019).

Die PLR selber bezeichnet ihre Form der EBNF als “modified BNF grammar notation ”.

Terminalsymbole

Terminalsymbole erscheinen in Anführungszeichen.

Schreibweise der PLR
"a"

So steht beispielweise »"a"« für das Schriftzeichen »a«.

Produktionsregeln

Produktionsregeln werden mit einem »::=« geschrieben.

Produktionsregelschreibweise der PLR
letter ::= "a"

Die obige Produktionsregel würde besagen, daß »a« ein Exemplar der Kategorie »letter« ist.

Alternativen

Alternativen werden mit einem senkrechten Strich »|« geschrieben.

Produktionsregelschreibweise der PLR
letter ::= "a" | "b"

Die obige Produktionsregel würde besagen, daß sowohl ein »a« als auch ein »b« ein Exemplar der Kategorie »letter« ist.

Sequenzen

Sequenzen werden durch Hintereinanderschreibung ausgedrückt.

Produktionsregelschreibweise der PLR
name ::= letter letter

Die obige Produktionsregel würde besagen, daß ein Name eine Abfolge von zwei Buchstaben sein kann.

Prioritäten

Eine Sequenzierung hat höhere Priorität als eine Alternative.

Produktionsregelschreibweise der PLR
name ::= 'a' 'x' | 'y'

Die obige Produktionsregel würde besagen, daß »ax« oder »y« Namen sind.

Klammern

Runde Klammer werden verwendet, um Bestandteile zusammenzufassen..

Produktionsregelschreibweise der PLR
name ::= 'a'( 'x' | 'y' )

Die obige Produktionsregel würde besagen, daß ein Name ein »a« ist, dem ein »x« oder ein »y« folgen kann.

Referenzen

Namensreferenzen

Eine Referenz auf eine Kategorie erfolgt durch Verwendung des kursiv geschriebenen  Namens der anderen Kategorie.

Produktionsregelschreibweise der PLR
name ::= letter

Die obige Produktionsregel würde besagen, daß ein Name ein (Exemplar der Kategorie) »letter« sein kann.

Beschreibungsreferenzen

Eine Kategorie kann durch eine englischsprachige Beschreibung innerhalb spitzer Klammern gebildet werden

Kategorieschreibweise der PLR
<any letter>

Die Kategorie »<any letter>« würde also „irgendeinen Buchstaben“ umfassen. (Dies wäre beispielsweise nicht ganz klar: sind nur englische Buchstaben gemeint oder beispielsweise auch griechische?)

(Solche Beschreibungen werden in der PLR nur in morphologische Produktionsregeln verwendet.)

Wiederholungen

*-Wiederholungen

Eine Wiederholung wird durch einen dem zu Wiederholendem nachfolgenden Stern »*« gekennzeichnet.

Produktionsregelschreibweise der PLR
name ::= letter*

Die obige Produktionsregel würde besagen, daß ein Name eine Wiederholung von beliebig vielen, auch null (also gar keinem), »letter« sein kann.

+-Wiederholungen

Wenn eine Wiederholung durch ein dem zu Wiederholendem nachfolgendes Plus »*« gekennzeichnet ist, so muß das Wiederholte mindestens einmal vorkommen.

Produktionsregelschreibweise der PLR
name ::= letter+

Die obige Produktionsregel würde besagen, daß ein Name eine Wiederholung von beliebig vielen, aber mindestens einem, »letter« sein kann.

Optionen

Etwas Optionales wird durch Einschluß in eckige Klammern gekennzeichnet.

Produktionsregelschreibweise der PLR
name ::= letter [letter]

Die obige Produktionsregel würde besagen, daß ein Name ein Buchstabe ist, dem ein weiterer Buchstabe folgen kann. »[letter]« bedeutet also „ein oder kein »letter«“.

Mehr zu Prioritäten

Die höchste Priorität haben die Kennzeichnungen von Optionen oder Wiederholungen mit »[«, »]«, »*« oder »+«.

Die Prorität der Sequenz befindet sich in der Mitte.

Die niedrigste Priorität hat die Alternative »|«.

Angaben außerhalb der EBNF

Außerhalb der EBNF wird in PLR 3.8.0a0 Abschnitt 1.2 festgelegt, daß alle Verwendungen der EBNF im Kapitel 2 “Lexical Analysis ” als morphologisch zu verstehen sind (Terminalsymbole sind einzelne Schriftzeichen, und es darf kein  zusätzlicher Leerraum eingefügt werden) und alle Verwendungen nach jenem Kapitel als syntaktisch zu verstehen sind (Terminalsymbole sind einzelne Schriftzeichen, und es darf zusätzlicher Leerraum eingefügt werden).

Außerdem gibt es einige Regeln zur Einrückung, zur Fortsetzung von Zeilen und zur Gestaltung von Leerraum, die nicht durch die EBNF-Produktionsregeln ausgedrückt werden.

Seltener gebrauchte Notationen

Bereiche von Zeichen

Bereiche von Zeichen des ASCII-Codes werden mit drei Punkten »...« gekennzeichnet. Diese drei Punkte habe höhere Priorität als die Sequenz aber niedrigere als Optionen und Wiederholungen.

Schreibweise der PLR
"a"..."z"

Die Schreibweise »"a"..."z"« steht für alle Buchstaben zwischen »a« und »z«,die es im ASCII-Code gibt.

Druckbare Zeichen des ASCII -Codes
 !"#$%&'()*+,-./0123456789:;<=>? @ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_ `abcdefghijklmnopqrstuvwxyz{|}~

Beispiele aus der PLR

Morphologie eines Zeichenfolgenliterals

stringliteral ::= [stringprefix](shortstring | longstring)

stringprefix ::= "r" | "u" | "R" | "U" | "f" | "F"

| "fr" | "Fr" | "fR" | "FR" | "rf" | "rF" | "Rf" | "RF"

shortstring ::= "'" shortstringitem* "'" | '"' shortstringitem* '"'

longstring ::= "'''" longstringitem* "'''" | '"""' longstringitem* '"""'

shortstringitem ::= shortstringchar | stringescapeseq

longstringitem ::= longstringchar | stringescapeseq

shortstringchar ::= <any source character except "\" or newline or the quote>

longstringchar ::= <any source character except "\">

stringescapeseq ::= "\" <any source character>

Syntax eines additiven Ausdrucks

m_expr ::= u_expr | m_expr "*" u_expr | m_expr "@" m_expr |

m_expr "//" u_expr| m_expr "/" u_expr |

m_expr "%" u_expr

a_expr ::= m_expr | a_expr "+" m_expr | a_expr "-" m_expr

Syntax einer if-Anweisung

if_stmt ::= "if" expression ":" suite

( "elif" expression ":" suite )*

["else" ":" suite]

 

Seiteninformationen und Impressum   |   Mitteilungsformular  |   "ram@zedat.fu-berlin.de" (ohne die Anführungszeichen) ist die Netzpostadresse von Stefan Ram.   |   Eine Verbindung zur Stefan-Ram-Startseite befindet sich oben auf dieser Seite hinter dem Text "Stefan Ram".)  |   Der Urheber dieses Textes ist Stefan Ram. Alle Rechte sind vorbehalten. Diese Seite ist eine Veröffentlichung von Stefan Ram. Schlüsselwörter zu dieser Seite/relevant keywords describing this page: Stefan Ram Berlin slrprd slrprd stefanramberlin spellched stefanram724328 stefan_ram:724328 Die EBNF der PLR Stefan Ram, Berlin, and, or, near, uni, online, slrprd, slrprdqxx, slrprddoc, slrprd724328, slrprddef724328, PbclevtugFgrsnaEnz Erklärung, Beschreibung, Info, Information, Hinweis,

Der Urheber dieses Textes ist Stefan Ram. Alle Rechte sind vorbehalten. Diese Seite ist eine Veröffentlichung von Stefan Ram.
https://www.purl.org/stefan_ram/pub/ebnf_python