Notación sintáctica de Wirth

La notación de sintaxis de Wirth ( WSN ) es una metasintaxis , es decir, una forma formal de describir lenguajes formales . Originalmente propuesta por Niklaus Wirth en 1977 como una alternativa a la forma Backus–Naur (BNF). Tiene varias ventajas sobre la BNF, ya que contiene una construcción de iteración explícita y evita el uso de un símbolo explícito para la cadena vacía (como <empty> o ε). [1]

WSN se ha utilizado en varias normas internacionales , comenzando por ISO 10303-21 . [2] También se utilizó para definir la sintaxis de EXPRESS , el lenguaje de modelado de datos de STEP .

WSN se define en sí misma

 SINTAXIS =  {  PRODUCCIÓN }  .  PRODUCCIÓN =  IDENTIFICADOR "="  EXPRESIÓN "."  .  EXPRESIÓN =  TÉRMINO {  "|"  TÉRMINO }  .  TÉRMINO =  FACTOR {  FACTOR }  .  FACTOR =  IDENTIFICADOR  |  LITERAL  |  "["  EXPRESIÓN "]"  |  "("  EXPRESIÓN ")"  |  "{"  EXPRESIÓN "}"  .  IDENTIFICADOR =  letra {  letra }  .  LITERAL =  """"  carácter {  carácter }  """"  .

El signo igual indica una producción. El elemento de la izquierda se define como la combinación de elementos de la derecha. Una producción termina con un punto.

  • La repetición se denota mediante llaves, por ejemplo, {a} representa ε | a | aa | aaa | ... .
  • La opcionalidad se expresa mediante corchetes, por ejemplo, [a]b representa ab | b .
  • Los paréntesis sirven para agrupar, por ejemplo, (a|b)c representa ac | bc .

Hoy damos por sentados estos conceptos, pero en 1977 eran novedosos e incluso controvertidos. Posteriormente, Wirth incorporó algunos de ellos (con una sintaxis y una notación diferentes) en la forma extendida de Backus-Naur .

Tenga en cuenta que lettery characterno se definen. Esto se debe a que los caracteres numéricos (dígitos 0 a 9) pueden incluirse en ambas definiciones o excluirse de una, según el idioma que se esté definiendo, por ejemplo :

 dígito =  "0"  |  "1"  |  "2"  |  "3"  |  "4"  | "  5"  |  "6"  |  "7"  |  "8"  |  "9"  .  mayúscula =  "A"  |  "B"  |   |  "Y"  |  "Z"  .  minúscula =  "a"  |  "b"  |   |  "y"  |  "z"  .  letra =  mayúscula |  minúscula .

Si charactercontinúa incluyendo digity otros caracteres ASCII imprimibles , entonces se aleja aún más de letter, que se puede asumir que no incluye los caracteres numéricos ni ninguno de los caracteres especiales (no alfanuméricos ).

Otro ejemplo

La sintaxis de BNF se puede representar con WSN de la siguiente manera, basándose en la traducción del propio ejemplo de BNF :

 sintaxis =  regla [  sintaxis ]  .  regla =  opt-whitespace "<"  nombre-regla ">"  opt-whitespace "::="  opt-whitespace expresión fin-línea .  opt-whitespace =  {  " "  }  .  expresión =  lista [  "|"  expresión ]  .  fin-línea =  opt-whitespace EOL |  fin-línea fin-línea .  lista =  término [  opt-whitespace lista ]  .  término =  literal |  "<"  nombre-regla ">"  .  literal =  """"  texto """"  |  "'"  texto "'"  .

Esta definición parece demasiado complicada porque el concepto de " espacio en blanco opcional " debe definirse explícitamente en BNF, pero está implícito en WSN. Incluso en este ejemplo, textse deja sin definir, pero se supone que significa " ASCII-character { ASCII-character }". ( EOLtambién se deja sin definir). Observe cómo se ha utilizado el truco dos veces porque no se definió explícitamente."<" rule-name ">"text

Uno de los problemas con BNF que ilustra este ejemplo es que al permitir el uso de caracteres de comillas simples y dobles para un literal, existe un potencial adicional de error humano al intentar crear una sintaxis legible por máquina. Uno de los conceptos que migraron a las meta sintaxis posteriores fue la idea de que dar al usuario múltiples opciones hacía más difícil escribir analizadores para gramáticas definidas por la sintaxis, por lo que los lenguajes de programación en general se han vuelto más restrictivos en cuanto a cómo se define un literal entre comillas .

Diagrama de sintaxis

Diagrama de sintaxis :

Referencias

  1. ^ Wirth, Niklaus (noviembre de 1977). "¿Qué podemos hacer con la diversidad innecesaria de notaciones para definiciones de sintaxis?". Communications of the ACM . 20 (11): 822–823. doi : 10.1145/359863.359883 . S2CID  35182224.
  2. ^ "ISO 10303-21, Sistemas de automatización industrial e integración — Representación e intercambio de datos de productos — Parte 21: Métodos de implementación: Codificación de texto claro de la estructura de intercambio". Organización Internacional de Normalización. 24 de enero de 2002. {{cite journal}}: Requiere citar revista |journal=( ayuda ) [ enlace roto ]
Obtenido de "https://es.wikipedia.org/w/index.php?title=Notación_sintaxis_de_Wirth&oldid=1175344846"