Articulo de referencia

Metasintaxis

Una metasintaxis es una sintaxis utilizada para definir la sintaxis de un lenguaje de programación o lenguaje formal . Describe la estructura y composición permitidas de frases ...

Una metasintaxis es una sintaxis utilizada para definir la sintaxis de un lenguaje de programación o lenguaje formal . Describe la estructura y composición permitidas de frases y oraciones de un metalenguaje , que se utiliza para describir un lenguaje natural o un lenguaje de programación informática. [1] Algunos de los metalenguajes formales ampliamente utilizados para lenguajes informáticos son la forma Backus-Naur (BNF), la forma Backus-Naur extendida (EBNF), la notación de sintaxis Wirth (WSN) y la forma Backus-Naur aumentada (ABNF).

Los metalenguajes tienen su propia metasintaxis, cada una compuesta de símbolos terminales , símbolos no terminales y metasímbolos . Un símbolo terminal, como una palabra o un token, es una estructura independiente en un lenguaje que se está definiendo. Un símbolo no terminal representa una categoría sintáctica , que define una o más estructuras sintácticas u oracionales válidas que consisten en un subconjunto de n elementos. Los metasímbolos proporcionan información sintáctica para fines denotacionales en una metasintaxis dada. Los terminales, no terminales y metasímbolos no se aplican en todos los metalenguajes.

Por lo general, el metalenguaje para lenguajes a nivel de token (formalmente llamados " lenguajes regulares ") no tiene no terminales porque la anidación no es un problema en estos lenguajes regulares. El inglés, como metalenguaje para describir ciertos lenguajes, no contiene metasímbolos ya que toda explicación podría hacerse usando expresiones en inglés. Solo hay ciertos metalenguajes formales que se usan para describir lenguajes recursivos (formalmente llamados lenguajes libres de contexto ) que tienen terminales, no terminales y metasímbolos en su metasintaxis.

Elemento de metasintaxis

  • Terminales: una estructura sintáctica independiente. Los terminales se pueden indicar entre comillas dobles en el nombre de los terminales.
p.ej "else", "if", "then","while"
  • No terminales: representación simbólica que define un conjunto de estructuras sintácticas permitidas que se compone de un subconjunto de elementos. Los no terminales se pueden indicar encerrando el nombre de los no terminales entre corchetes angulares.
p.ej <int>, <char>,<boolean>
  • Metasímbolo: una representación simbólica que denota información sintáctica.
p.ej :=, |, {}, (), [],*

Métodos de terminación de frases

  • Yuxtaposición: p. ej.A B
  • Alternancia: p. ej.A|B
  • Repetición: p. ej.{A B}
  • Frase opcional: p. ej.[A B]
  • Agrupamiento: p. ej.(A|B)

Convenciones específicas de metasintaxis

La convención estándar

  • La ' forma Backus–Naur ' denota símbolos no terminales mediante corchetes angulares en el nombre de la categoría sintáctica , mientras que denota símbolos terminales mediante comillas dobles en las palabras terminales. Los terminales nunca pueden aparecer en el lado izquierdo del metasímbolo ::=en una regla de derivación . El cuerpo de la definición en el lado derecho puede estar compuesto por varias formas alternativas, y cada construcción sintáctica alternativa está separada por el metasímbolo |. Cada una de estas construcciones alternativas puede ser terminal o no terminal.
  • La ' forma Backus–Naur extendida ' utiliza todas las funciones de BNF e introduce dos metasímbolos más para funciones adicionales. Una de estas dos nuevas funciones se aplica para indicar una frase opcional en una declaración colocando la frase entre corchetes. La segunda función se aplica para indicar una frase que se repetirá cero o más veces colocando la frase entre corchetes.
  • La notación de sintaxis de Wirth utiliza todas las funciones de EBNF, excepto que los no terminales no están necesariamente entre corchetes angulares, sino que siempre se definen en el lado derecho de =su regla de producción. Tampoco requiere que cada no terminal se defina explícitamente. Los no terminales como <text>y <opt-whitespace>se definen implícitamente como caracteres ASCII y espacios en blanco opcionales, respectivamente.
  • La ' forma aumentada de Backus-Naur ' denota símbolos no terminales al comenzar un nombre de una palabra con un alfabeto como el nombre de la categoría sintáctica. No se requieren corchetes angulares. Los símbolos terminales se denotan por palabras entre comillas dobles o por la siguiente estructura numérica: a %, seguido de bo xo d, seguido de un valor numérico o una concatenación de valores numéricos separados por .. El metasímbolo -se coloca entre dos valores numéricos para denotar el rango de valores . Al igual que en el caso de BNF, los terminales de ABNF nunca aparecen en el lado izquierdo del metasímbolo =en la regla de derivación. El metasímbolo /denota alternancias . Se utilizan espacios en blanco para separar elementos en el cuerpo de la definición. La metasintaxis para la repetición en ABNF tiene varias formas. Un *elemento que precede a un denota el elemento que se repetirá cero o más veces. El valor numérico n1 seguido de *seguido del valor numérico n2 seguido de un elemento denota el elemento que se repetirá al menos n1 veces y como máximo n2 veces. Un único valor numérico n que precede a un elemento indica que el elemento se repetirá n veces. Los comentarios pueden expresarse después del metasímbolo ;. Como en EBNF, poner una frase entre corchetes indica que la frase es opcional .

Variaciones

La convención metasintaxis de estos metalenguajes formales aún no está formalizada. Existen muchas variaciones o extensiones metasintaxis en el manual de referencia de varios lenguajes de programación informática. Una variación de la convención estándar para denotar no terminales y terminales es eliminar metasímbolos como corchetes angulares y comillas y aplicar tipos de fuente a las palabras previstas. En Ada , por ejemplo, las categorías sintácticas se denotan aplicando una fuente sans-serif en minúsculas en las palabras o símbolos previstos. Todas las palabras o símbolos terminales, en Ada, consisten en caracteres de posición de código entre 16#20# y 16#7E# (inclusive). La definición de cada conjunto de caracteres se refiere a la Norma Internacional descrita por ISO/IEC 10646:2003. En C y Java , las categorías sintácticas se denotan utilizando fuente itálica, mientras que los símbolos terminales se denotan con fuente gótica . En J , su metasintaxis no aplica metasímbolos para describir la sintaxis de J en absoluto. Más bien, todas las explicaciones sintácticas se hacen en un metalenguaje muy similar al inglés llamado Diccionario, que está documentado exclusivamente para J.

Ventajas de las extensiones

El objetivo de las nuevas extensiones es proporcionar una metasintaxis más sencilla y sin ambigüedades. En términos de simplicidad, la metanotación de BNF definitivamente no ayuda a que la metasintaxis sea más fácil de leer, ya que los metasímbolos de apertura y cierre aparecen con demasiada abundancia. En términos de ambigüedad, la metanotación de BNF genera una complejidad innecesaria cuando las comillas, los apóstrofos, los signos de menor que o de mayor que sirven como símbolos terminales, lo que ocurre a menudo. La metasintaxis extendida utiliza propiedades como mayúsculas y minúsculas, fuente y posición del código de caracteres para reducir la innecesaria complejidad antes mencionada. Además, algunos metalenguajes utilizan categorías de separadores con fuentes para incorporar características metasintácticas para las convenciones de diseño, que no son admitidas formalmente por BNF.

Véase también

Referencias

  1. ^ Sellink, Alex y Chris Verhoef. "Desarrollo, evaluación y reingeniería de descripciones de lenguajes". Mantenimiento y reingeniería de software, 2000. Actas de la Cuarta Conferencia Europea. IEEE, 2000.
Obtenido de "https://es.wikipedia.org/w/index.php?title=Metasintaxis&oldid=1192103799"