En los lenguajes de programación , un identificador es un token léxico (también llamado símbolo , pero que no debe confundirse con el tipo de dato primitivo símbolo ) que nombra las entidades del lenguaje. Algunos tipos de entidades que un identificador puede denotar incluyen variables , tipos de datos , etiquetas , subrutinas y módulos .
Forma léxica
Qué secuencias de caracteres constituyen identificadores depende de la gramática léxica del lenguaje. Una regla común son las secuencias alfanuméricas , con guion bajo también permitido (en algunos lenguajes, _ no está permitido), y con la condición de que no puede comenzar con un dígito numérico (para simplificar el análisis léxico evitando confusiones con literales enteros ) – por lo que foo, foo1, foo_bar, _fooestán permitidos, pero 1foono lo es – esta es la definición utilizada en versiones anteriores de C y C++ , Python y muchos otros lenguajes. Versiones posteriores de estos lenguajes, junto con muchos otros lenguajes modernos, admiten muchos más caracteres Unicode en un identificador. Sin embargo, una restricción común es no permitir caracteres de espacio en blanco y operadores de lenguaje; esto simplifica la tokenización al hacerla de forma libre y libre de contexto . Por ejemplo, prohibir +en identificadores debido a su uso como operación binaria significa que a+by a + bpueden tokenizarse de la misma manera, mientras que si estuviera permitido, a+bsería un identificador, no una suma. Los espacios en blanco en un identificador son particularmente problemáticos, porque si se permiten espacios en los identificadores, entonces una cláusula como if rainy day then 1es válida, con rainy daycomo identificador, y tokenizar esto requiere el contexto sintáctico de estar en la condición de una cláusula if. Sin embargo, algunos lenguajes permiten espacios en los identificadores, como ALGOL 68 y algunas variantes de ALGOL; por ejemplo, la siguiente es una instrucción válida: real half pi;que podría ingresarse como .real. half pi;(las palabras clave se representan en negrita, concretamente mediante stropping ). En ALGOL esto fue posible porque las palabras clave se diferencian sintácticamente, por lo que no hay riesgo de colisión o ambigüedad, los espacios se eliminan durante la fase de reconstrucción de línea , y el código fuente se procesó mediante análisis sin escáner , por lo que el análisis léxico podía ser sensible al contexto.
En la mayoría de los idiomas, algunas secuencias de caracteres tienen la forma léxica de un identificador pero se conocen como palabras clave ; por ejemplo, ifes frecuentemente una palabra clave para una cláusula if, pero léxicamente tiene la misma forma que igo fooes decir una secuencia de letras. Esta superposición se puede manejar de varias maneras: se puede prohibir que sean identificadores (lo que simplifica la tokenización y el análisis sintáctico), en cuyo caso son palabras reservadas ; se pueden permitir ambas pero distinguirlas de otras maneras, como mediante el stropping; o se pueden permitir secuencias de palabras clave como identificadores y cuyo sentido se determina por el contexto, lo que requiere un analizador léxico sensible al contexto. Las palabras que no son palabras clave también pueden ser palabras reservadas (prohibidas como identificadores), particularmente para compatibilidad futura , en caso de que una palabra pueda convertirse en una palabra clave en el futuro. En algunos idiomas, por ejemplo, PL/1 , la distinción no es clara.
Semántica
El alcance, o accesibilidad dentro de un programa, de un identificador puede ser local o global. Un identificador global se declara fuera de las funciones y está disponible en todo el programa. Un identificador local se declara dentro de una función específica y solo está disponible dentro de esa función. [ 1 ]
En las implementaciones de lenguajes de programación que utilizan un compilador , los identificadores suelen ser entidades que solo existen en tiempo de compilación . Es decir, en tiempo de ejecución , el programa compilado contiene referencias a direcciones y desplazamientos de memoria, en lugar de los identificadores textuales (estas direcciones o desplazamientos de memoria han sido asignados por el compilador a cada identificador).
En los lenguajes que admiten reflexión , como la evaluación interactiva del código fuente (mediante un intérprete o un compilador incremental), los identificadores también son entidades de tiempo de ejecución, a veces incluso como objetos de primera clase que pueden ser manipulados y evaluados libremente. En Lisp , estos se denominan símbolos .
Los compiladores e intérpretes no suelen asignar ningún significado semántico a un identificador basándose en la secuencia de caracteres real utilizada. Sin embargo, existen excepciones. Por ejemplo:
- En Perl, una variable se indica mediante un prefijo llamado sigilo , que especifica aspectos de cómo se interpreta la variable en las expresiones .
- En Ruby, una variable se considera automáticamente inmutable si su identificador comienza con una letra mayúscula.
- En Go , la capitalización de la primera letra del nombre de una variable determina su visibilidad (mayúscula para pública, minúscula para privada).
- En Fortran, a una variable se le asigna un tipo predeterminado en función de su primera letra. Es un entero si está en el rango IN, o un real en caso contrario.
En algunos lenguajes, como Go, la unicidad de los identificadores se basa en su ortografía y su visibilidad. [ 2 ]
En HTML, un identificador es uno de los atributos posibles de un elemento HTML . Es único dentro del documento.
Véase también
Referencias
- ↑ Malik, D. (2014). Programación en C++ : del análisis del problema al diseño del programa (7.ª ed.). Cengage Learning. pág. 397. ISBN 978-1-285-85274-4.
- ↑ "Especificación del lenguaje de programación Go - El lenguaje de programación Go" . Golang.org. 8 de mayo de 2013. Consultado el 5 de junio de 2013 .
- Identificadores
- conceptos de lenguajes de programación
- Metadatos
- Entidades sintácticas