En informática, el azúcar sintáctico es una expresión usada en teoría de lenguajes de programación para designar aquellas formas de sintaxis que hacen que un lenguaje de programación resulte más legible, conciso o cómodo para los programadores, sin añadir por sí mismas nueva capacidad expresiva al lenguaje.

El término fue acuñado por Peter J. Landin en 1964, en el contexto de su descripción de lenguajes definidos a partir de expresiones aplicativas y construcciones sintácticas adicionales. Desde entonces, la expresión se ha generalizado para referirse a construcciones que pueden traducirse o reducirse a formas más básicas del mismo lenguaje o de un lenguaje intermedio, sin cambiar el significado esencial del programa.

Una construcción suele considerarse azúcar sintáctico cuando puede eliminarse del lenguaje y reemplazarse por una forma más primitiva sin reducir su potencia expresiva. El proceso inverso, mediante el cual un compilador, intérprete o analizador transforma una construcción abreviada o más cómoda en otra más fundamental, se conoce habitualmente como desazucarización o desugaring.

Funcionamiento

El azúcar sintáctico no cambia necesariamente la semántica fundamental de un lenguaje, sino la forma en que determinadas operaciones pueden escribirse. En muchos casos, el compilador o intérprete convierte esas formas abreviadas en construcciones equivalentes antes de ejecutar, compilar u optimizar el programa.

Por ejemplo, una expresión abreviada puede expandirse internamente a una asignación, una llamada a función, una estructura de control o una combinación de instrucciones más primitivas. Esta transformación permite que el lenguaje mantenga un núcleo semántico relativamente simple mientras ofrece al programador una sintaxis más cómoda o expresiva.

Ejemplos

En varios lenguajes derivados de C, la asignación compuesta a += b permite escribir de forma abreviada una operación de suma y asignación. En casos simples equivale a a = a + b, aunque en expresiones complejas pueden existir diferencias relacionadas con la evaluación de operandos o los efectos laterales. Los operadores de incremento y decremento, como ++a o a++, son formas abreviadas para aumentar el valor de una variable. No obstante, el preincremento y el postincremento pueden diferir en el valor que devuelve la expresión. En algunos lenguajes, las construcciones de alto nivel como los bucles for, las comprensiones de listas o ciertas expresiones funcionales pueden traducirse internamente a formas más básicas del lenguaje. En Scala, ??? se usa como marcador temporal para código no implementado y lanza una excepción NotImplementedError mediante Predef.???. Aunque suele citarse como ejemplo de conveniencia sintáctica, técnicamente es una construcción de biblioteca predefinida más que una palabra clave especial del lenguaje.

Véase también

Lenguaje de programación Compilador Intérprete (informática) Semántica formal

Referencias

Categoría:Lenguajes informáticos Categoría:Terminología informática Categoría:Programación