Identificador (linguagens de computador) - Identifier (computer languages)
Em linguagens de computador , os identificadores são tokens (também chamados de símbolos , mas não devem ser confundidos com o tipo primitivo de símbolo ) que nomeiam as entidades da linguagem. Alguns dos tipos de entidades que um identificador pode denotar incluem variáveis , tipos , rótulos , sub-rotinas e pacotes .
Forma lexical
As sequências de caracteres que constituem os identificadores dependem da gramática lexical do idioma. Uma regra comum são sequências alfanuméricas , com sublinhado também permitido (em alguns idiomas, _ não é permitido) e com a condição de que não pode começar com um dígito numérico (para simplificar a lexing evitando confundir com literais inteiros ) - então foo, foo1, foo_bar, _foo
são permitidos , mas 1foo
não é - esta é a definição usada em versões anteriores de C e C ++ , Python e muitas outras linguagens. Versões posteriores desses idiomas, junto com muitos outros idiomas modernos, oferecem suporte a muitos mais caracteres Unicode em um identificador. No entanto, uma restrição comum é não permitir caracteres de espaço em branco e operadores de idioma; Isto simplifica tokenization, fazendo-o de forma livre e livre de contexto . Por exemplo, proibir +
em identificadores devido ao seu uso como operação binária significa que a+b
e a + b
pode ser tokenizado da mesma forma, enquanto se fosse permitido, a+b
seria um identificador, não uma adição. Espaços em branco no identificador são particularmente problemáticos, como se espaços fossem permitidos em identificadores, uma cláusula como if rainy day then 1
é legal, com rainy day
como um identificador, mas tokenizar isso requer o contexto frasal de estar na condição de uma cláusula if. Algumas linguagens permitem espaços em identificadores, no entanto, como ALGOL 68 e algumas variantes de ALGOL - por exemplo, o seguinte é uma declaração válida: real half pi;
que pode ser inserida como .real. half pi;
(palavras-chave são representadas em negrito, concretamente por meio de stropping ). No ALGOL, isso foi possível porque as palavras-chave são sintaticamente diferenciadas, portanto, não há risco de colisão ou ambigüidade, os espaços são eliminados durante a fase de reconstrução da linha e a fonte foi processada por meio de análise sem scanner , portanto, lexing pode ser sensível ao contexto.
Na maioria dos idiomas, algumas sequências de caracteres têm a forma lexical de um identificador, mas são conhecidas como palavras - chave - por exemplo, if
é frequentemente uma palavra-chave para uma cláusula if, mas lexicamente tem a mesma forma ig
ou a foo
saber, uma sequência de letras. Essa sobreposição pode ser tratada de várias maneiras: podem ser proibidos de serem identificadores - o que simplifica a tokenização e a análise - nesse caso, são palavras reservadas ; ambos podem ser permitidos, mas diferenciados de outras maneiras, como por meio de stropping; ou sequências de palavras-chave podem ser permitidas como identificadores e cujo sentido é determinado a partir do contexto, o que requer um lexer sensível ao contexto. As não palavras-chave também podem ser palavras reservadas (proibidas como identificadores), principalmente para compatibilidade futura , caso uma palavra possa se tornar uma palavra-chave no futuro. Em alguns idiomas, por exemplo, PL / 1 , a distinção não é clara.
Semântica
O escopo ou acessibilidade dentro de um programa de um identificador pode ser local ou global. Um identificador global é declarado fora das funções e está disponível em todo o programa. Um identificador local é declarado em uma função específica e está disponível apenas nessa função.
Para implementações de linguagens de programação que usam um compilador , os identificadores geralmente são apenas entidades de tempo de compilação . Ou seja, em tempo de execução, o programa compilado contém referências a endereços de memória e deslocamentos, em vez de tokens identificadores textuais (esses endereços de memória, ou deslocamentos, foram atribuídos pelo compilador a cada identificador).
Em linguagens que suportam reflexão , como avaliação interativa do código-fonte (usando um interpretador ou um compilador incremental), os identificadores também são entidades de tempo de execução, às vezes até como objetos de primeira classe que podem ser livremente manipulados e avaliados. Em Lisp , eles são chamados de símbolos .
Compiladores e intérpretes geralmente não atribuem nenhum significado semântico a um identificador com base na sequência de caracteres real usada. No entanto, existem exceções. Por exemplo:
- Em Perl, uma variável é indicada usando um prefixo chamado sigilo , que especifica aspectos de como a variável é interpretada nas expressões .
- Em Ruby, uma variável é automaticamente considerada imutável se seu identificador começa com uma letra maiúscula.
- Em Fortran , a primeira letra no nome de uma variável indica se, por padrão, ela é criada como um inteiro ou variável de ponto flutuante .
- Em Go , a capitalização da primeira letra do nome de uma variável determina sua visibilidade (maiúsculas para público, minúsculas para privado).
Em alguns idiomas, como Go, a exclusividade dos identificadores é baseada em sua grafia e visibilidade.
Em HTML, um identificador é um dos atributos possíveis de um elemento HTML . É único no documento.