En los lenguajes informáticos , los identificadores son tokens (también llamados símbolos , pero que no deben confundirse con el tipo primitivo de símbolo ) que nombran las entidades del lenguaje. Algunos de los tipos de entidades que puede indicar un identificador incluyen variables , tipos , etiquetas , subrutinas y paquetes .
Forma léxica
Qué secuencias de caracteres constituyen identificadores depende de la gramática léxica del idioma. Una regla común son las secuencias alfanuméricas , con guiones bajos también permitidos (en algunos idiomas, _ no está permitido), y con la condición de que no comiencen con un dígito numérico (para simplificar la lexización evitando confundir con literales enteros ), por lo que foo, foo1, foo_bar, _foo
están permitidos, pero 1foo
no lo es: esta es la definición utilizada en versiones anteriores de C y C ++ , Python y muchos otros lenguajes. Las versiones posteriores de estos idiomas, junto con muchos otros idiomas 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 idioma; esto simplifica la tokenización haciéndolo de forma libre y sin contexto . Por ejemplo, prohibir +
en identificadores debido a su uso como una operación binaria significa que a+b
y a + b
puede ser tokenizado igual, mientras que si estuviera permitido, a+b
sería un identificador, no una adición. El espacio en blanco en el identificador es particularmente problemático, como si se permitieran espacios en los identificadores, entonces una cláusula como if rainy day then 1
es legal, con rainy day
un identificador, pero tokenizar esto requiere el contexto de frase de estar en la condición de una cláusula if. Sin embargo, algunos idiomas permiten espacios en los identificadores, como ALGOL 68 y algunas variantes de ALGOL; por ejemplo, la siguiente es una declaración válida: real half pi;
que podría ingresarse como .real. half pi;
(las palabras clave se representan en negrita, concretamente mediante trazos ). En ALGOL esto fue posible porque las palabras clave están diferenciadas 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 la línea y la fuente se procesó mediante análisis sintáctico sin escáner , por lo que el lexing podrí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, if
con frecuencia es una palabra clave para un si cláusula, pero léxico es de la misma forma que ig
o foo
es decir, una secuencia de letras. Esta superposición se puede manejar de varias maneras: se les puede prohibir que sean identificadores, lo que simplifica la tokenización y el análisis, en cuyo caso son palabras reservadas ; ambos pueden estar permitidos pero distinguidos de otras formas, como por medio del estropajo; o se pueden permitir secuencias de palabras clave como identificadores y cuyo sentido se determina a partir del contexto, lo que requiere un lexer sensible al contexto. Las palabras que no son palabras clave también pueden ser palabras reservadas (prohibidas como identificadores), particularmente para compatibilidad con versiones posteriores , en caso de que una palabra se convierta en una palabra clave en el futuro. En algunos idiomas, por ejemplo, PL / 1 , la distinción no está clara.
Semántica
El alcance o la 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]
Para las implementaciones de lenguajes de programación que utilizan un compilador , los identificadores a menudo son solo entidades de tiempo de compilación . Es decir, en tiempo de ejecución, el programa compilado contiene referencias a direcciones de memoria y compensaciones en lugar de los tokens identificadores textuales (estas direcciones de memoria, o compensaciones, han sido asignadas por el compilador a cada identificador).
En los lenguajes que admiten la reflexión , como la evaluación interactiva del código fuente (utilizando un intérprete o un compilador incremental), los identificadores también son entidades en tiempo de ejecución, a veces incluso como objetos de primera clase que pueden manipularse y evaluarse libremente. En Lisp , estos se llaman símbolos .
Los compiladores e intérpretes no suelen asignar ningún significado semántico a un identificador en función de 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 expresiones .
- En Ruby, una variable se considera automáticamente inmutable si su identificador comienza con una letra mayúscula.
- En Fortran , la primera letra del nombre de una variable indica si de forma predeterminada se crea como una variable de punto flotante o entero .
- En Go , el uso de mayúsculas en la primera letra del nombre de una variable determina su visibilidad (mayúsculas para público, minúsculas para privado).
En algunos idiomas, como Go, la singularidad de los identificadores se basa en su ortografía y su visibilidad. [2]
En HTML, un identificador es uno de los posibles atributos de un elemento HTML . Es único dentro del documento.
Referencias
- ↑ Malik, D. (2014). Programación C ++: del análisis de problemas al diseño de programas (7ª ed.). Cenage Learning. pag. 397. ISBN 978-1-285-85274-4.
- ^ "La especificación del lenguaje de programación Go - El lenguaje de programación Go" . Golang.org. 2013-05-08 . Consultado el 5 de junio de 2013 .
Ver también
- Convención de nomenclatura (programación)