Was ist der Unterschied zwischen: und :: und ::: in Javascript-Grammatik

9

In der ECMAScript-Grammatikspezifikation für Javascript sind Blöcke definiert mit einem doppelten Doppelpunkt wie folgt:

%Vor%

Und Blöcke mit einem einzigen Doppelpunkt wie folgt definiert:

%Vor%

Und sogar Blöcke mit einem dreifachen Doppelpunkt:

%Vor%

Was ist der Unterschied zwischen den Einfach-, Doppel- und Dreifach-Doppelpunkten?

    
jfriend00 28.03.2015, 01:46
quelle

2 Antworten

2
  

Die lexikalische JSON-Grammatik wird verwendet, um Zeichenfolgen in Token zu übersetzen, und ähnelt Teilen der lexikalischen Grammatik von ECMAScript. Die syntaktische JSON-Grammatik beschreibt, wie Sequenzen von Token aus der lexikalischen JSON-Grammatik syntaktisch korrekte JSON-Objektbeschreibungen bilden können.

Lexikalische Regeln ( "::" ) für Token bedeuten "wie die Teile der Sprache aussehen". Es definiert Regeln wie " 5.5 ist eine Zahl".

Syntaktische Regeln ( ":" ) für Ausdrücke bedeuten "wie die Teile miteinander interagieren". Es definiert Regeln wie " 5.5 abc macht keinen Sinn".

Der Tripel-Doppelpunkt ( ":::" ) scheint speziell reserviert zu sein, um Regeln für die Umwandlung von Strings in Zahlen zu definieren. Die Zeichenfolge " 0x1235 " (mit Leerzeichen) ist eine gültige Zahl. Die Triple-Colon-Regeln definieren das.

Der Tripel-Doppelpunkt ( ":::" ) scheint auch für die Uri-String-Grammatik verwendet zu werden. Am häufigsten wie folgt verwendet: "f%20o%20o" dekodiert zu "f o o" . Diese Regeln definieren die Struktur des "numerischen" Teils der Strings.

    
Joe Frambach 28.03.2015 02:13
quelle
1

Siehe Standard-ECMA-262 5.1 Ausgabe / Juni 2011 /

  

5.1.1 Kontextfreie Grammatiken

     

Eine kontextfreie Grammatik besteht aus einer Reihe von Produktionen. Jeder   Produktion hat ein abstraktes Symbol, das als Nichtterminal bezeichnet wird   linke Seite, und eine Folge von null oder mehr nichtterminalen und   Terminal-Symbole als seine rechte Seite. Für jede Grammatik, die   Terminalsymbole werden aus einem bestimmten Alphabet gezeichnet.

     

Ausgehend von einem Satz, der aus einem einzelnen unterschiedenen besteht   Nonterminal, genannt das Zielsymbol, eine gegebene kontextfreie Grammatik   spezifiziert eine Sprache, nämlich die (vielleicht unendliche) Menge von möglichen   Folgen von Endsymbolen, die sich wiederholt ergeben können   Ersetzen irgendeines Nichtterminals in der Sequenz durch eine rechte Seite von a   Produktion, für die das Nonterminal die linke Seite ist.

     

5.1.6 Grammatiknotation

     

Terminalsymbole der lexikalischen und String-Grammatiken und einige der terminalen Symbole der syntaktischen Grammatik werden in fester Breite angezeigt   Schriftart, sowohl in den Produktionen der Grammatiken als auch in diesem   Spezifikation, wenn der Text sich direkt auf ein solches Terminal bezieht   Symbol. Diese sollen in einem Programm genau so erscheinen wie geschrieben. Alle   auf diese Weise spezifizierte Terminal-Symbol-Zeichen sind zu verstehen   als das entsprechende Unicode-Zeichen aus dem ASCII-Bereich, im Gegensatz   zu ähnlich aussehenden Zeichen aus anderen Unicode-Bereichen.

     

Nichtterminale Symbole werden kursiv dargestellt. Die Definition von a   Nichtterminal wird eingeführt, indem der Name des Nichtterminals definiert wird   gefolgt von einem oder mehreren Doppelpunkten. (Die Anzahl der Doppelpunkte gibt an   zu welcher Grammatik die Produktion gehört.) Eine oder mehrere Alternativen   rechte Seiten für das Nichtterminal folgen dann auf nachfolgenden Zeilen.   Zum Beispiel die syntaktische Definition:

%Vor%
  

gibt an, dass das Nonterminal WhileStatement das Token darstellt, während   gefolgt von einem Token mit der linken Klammer, gefolgt von einem Ausdruck,   gefolgt von einem Token mit der rechten Klammer, gefolgt von einer Anweisung. Das   Vorkommen von Ausdruck und Aussage sind selbst Nichtterminale.   Ein weiteres Beispiel ist die syntaktische Definition:

%Vor%

:::

  

Produktionen der numerischen Zeichenkettengrammatik unterscheiden sich dadurch, dass sie haben   drei Doppelpunkte ":::" als Satzzeichen.

::

  

Die Produktionen der lexikalischen und RegExp-Grammatiken unterscheiden sich durch   mit zwei Doppelpunkten "::" als Trennzeichen. Das lexikalische und   RegExp-Grammatiken teilen einige Produktionen.

:

  

Produktionen der syntaktischen Grammatik zeichnen sich dadurch aus, dass sie einfach sind   Ein Doppelpunkt ":" als Interpunktion.

Hinweis,

  

5.1.5 Die JSON-Grammatik

     

Produktionen der JSON lexikalischen Grammatik zeichnen sich dadurch aus, dass sie   zwei Doppelpunkte "::" als Trennzeichen. Die JSON lexikalische Grammatik   verwendet einige Produktionen aus der lexikalischen Grammatik ECMAScript. Der JSON   syntaktische Grammatik ähnelt Teilen der ECMAScript-Syntax   Grammatik. Produktionen der syntaktischen JSON-Grammatik werden unterschieden   Verwenden Sie einen Doppelpunkt ":" als Trennzeichen.

    
guest271314 28.03.2015 19:27
quelle

Tags und Links