Elementos
Todos los lenguajes de programación tienen algunos elementos básicos primitivos para la descripción de los datos y de los procesos o transformaciones que se les aplican. Estas primitivas se definen por reglas sintácticas y semánticas que describen su estructura y significado respectivamente.Sintaxis
Forma de la superficie de un lenguaje de programación que se conoce como su sintaxis. La mayoría de los lenguajes de programación son puramente textual, que utilizan secuencias de texto, incluyendo palabras, números y signos de puntuación, al igual que los lenguajes naturales escritos. Por otra parte, hay algunos lenguajes de programación que son más de carácter gráfico, utilizando las relaciones visuales entre símbolos para especificar un programa.La sintaxis de un lenguaje describe las posibles combinaciones de símbolos que forman un programa sintácticamente correcta. El significado que se da a una combinación de símbolos es manejado por la semántica. Dado que la mayoría de lenguajes son textuales, este artículo describe la sintaxis textual.
Sintaxis del lenguaje de programación se define generalmente usando una combinación de expresiones regulares y el formulario Backus-Naur. A continuación se muestra una gramática simple, basado en Lisp:
expresión :: = átomo | Lista átomo :: = número | ¿. número de símbolo :: = símbolo :: = * lista :: =''
Esta gramática especifica lo siguiente:
- una expresión puede ser un átomo o una lista;
- un átomo puede ser un número o un símbolo;
- un número es una secuencia continua de uno o más dígitos decimales, opcionalmente precedidos por un signo más o menos;
- es un símbolo de una letra seguida de cero o más de los caracteres, y
- una lista es un par coincidente de paréntesis, con cero o más expresiones en su interior.
No todos los programas sintácticamente correctos son semánticamente correcto. Muchos programas sintácticamente correctas son, sin embargo, mal formada, según las reglas de la lengua, y pueden dar lugar a un error de traducción o ejecución. En algunos casos, estos programas pueden exhibir un comportamiento indefinido. Incluso cuando un programa está bien definido dentro de un lenguaje, todavía puede tener un significado que no está previsto por la persona que lo escribió.
Con un lenguaje natural como un ejemplo, puede que no sea posible asignar un significado a una oración gramaticalmente correcta o la frase puede ser falsa:
- "Las ideas verdes incoloras duermen furiosamente". es gramaticalmente bien formados, pero no tiene significado generalmente aceptado.
- "John es un soltero casado." es gramaticalmente bien formados pero expresa un significado que no puede ser verdad.
complejo * p = NULL; complejo abs_p = sqrt;
Si se omite la declaración de tipo en la primera línea, el programa daría lugar a un error de compilación, ya que no se definiría la "p" variable. Sin embargo, el programa todavía sería sintácticamente correcta, ya que las declaraciones de tipos proporcionan información sólo semántica.
La gramática necesaria para especificar un lenguaje de programación se puede clasificar por su posición en la jerarquía de Chomsky. La sintaxis de los lenguajes de programación se puede especificar mediante una gramática de tipo 2, es decir, son gramáticas libres de contexto. Algunos lenguajes, como Perl y Lisp, contienen construcciones que permiten la ejecución durante la fase de análisis. Idiomas que tienen construcciones que permiten al programador para alterar el comportamiento del analizador hacen análisis de sintaxis de un problema irresoluble y, en general desdibujan la distinción entre análisis y ejecución. En contraste con el sistema de macro Lisp y Perl a comenzar bloques, que pueden contener cálculos generales, las macros de C son meros reemplazos de cadenas, y no requieren la ejecución de código.