La notación de sintaxis de Wirth ( WSN ) es una metasintaxis , es decir, una forma formal de describir los lenguajes formales . Originalmente propuesto por Niklaus Wirth en 1977 como una alternativa a la forma Backus-Naur (BNF). Tiene varias ventajas sobre BNF en 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
WSN se ha utilizado en varios estándares internacionales , comenzando con ISO 10303-21 . [2] También se utilizó para definir la sintaxis de EXPRESS , el lenguaje de modelado de datos de STEP .
WSN definido en sí mismo
SINTAXIS = { PRODUCCIÓN } . PRODUCCIÓN = IDENTIFICADOR "=" EXPRESIÓN "." . EXPRESIÓN = TÉRMINO { "|" TERM } . TERM = 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 finaliza con un punto (punto).
- La repetición se indica mediante corchetes, por ejemplo, {a} significa ε | a | aa | aaa | ... .
- La opcionalidad se expresa entre corchetes, por ejemplo, [a] b significa ab | b .
- Los paréntesis sirven para agrupaciones, por ejemplo, (a | b) c significa ac | bc .
Hoy damos por sentados estos conceptos, pero eran novedosos e incluso controvertidos en 1977. Wirth incorporó más tarde algunos de los conceptos (con una sintaxis y notación diferente) en la forma extendida de Backus-Naur .
Tenga en cuenta que letter
y character
se dejan sin definir. Esto se debe a que los caracteres numéricos (dígitos del 0 al 9) pueden incluirse en ambas definiciones o excluirse de una, según el idioma que se defina, por ejemplo :
dígito = "0" | "1" | "2" | "3" | "4" | "5" | "6" | "7" | "8" | "9" . mayúsculas = "A" | "B" | … | "Y" | "Z" . minúscula = "a" | "b" | … | "y" | "z" . letra = mayúscula | minúscula .
Si character
pasa a incluir digit
y otros caracteres ASCII imprimibles , entonces diverge aún más de lo letter
que se puede asumir que no incluye los dígitos ni ninguno de los caracteres especiales (no alfanuméricos ).
Otro ejemplo
La sintaxis de BNF se puede representar con WSN de la siguiente manera, según la traducción del ejemplo BNF de sí mismo :
sintaxis = regla [ sintaxis ] . rule = opt-whitespace "<" rule-name ">" opt-whitespace ":: =" opt-whitepace expresión final de línea . opt-whitespace = { "" } . expresión = lista [ "|" expresión ] . fin de línea = opt-espacio en blanco EOL | fin de línea fin de línea . lista = término [ opt-lista de espacios en blanco ] . 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, no text
se define, pero se supone que significa " ASCII-character { ASCII-character }
". ( EOL
también se deja sin definir). Observe cómo el kludge "<" rule-name ">"
se ha utilizado dos veces porque text
no se definió explícitamente.
Uno de los problemas con BNF que ilustra este ejemplo es que al permitir que se usen caracteres de comillas simples y comillas dobles para a literal
, existe un potencial adicional de error humano al intentar crear una sintaxis legible por máquina. Uno de los conceptos que se migraron a metasintaxis posteriores fue la idea de que dar al usuario múltiples opciones dificultaba la escritura de analizadores sintácticos para las gramáticas definidas por la sintaxis, por lo que los lenguajes informáticos en general se han vuelto más restrictivos en cómo se define un literal entre comillas .
Diagrama de sintaxis
Referencias
- ^ Wirth, Niklaus (noviembre de 1977). "¿Qué podemos hacer con la diversidad innecesaria de notaciones para las definiciones de sintaxis?". Comunicaciones de la ACM . 20 (11): 822–823. doi : 10.1145 / 359863.359883 .
- ^ "ISO 10303-21, Sistemas e integración de automatización industrial - 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. 2002-01-24. Cite journal requiere
|journal=
( ayuda )