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, _foosão permitidos , mas 1foonã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+be a + bpode ser tokenizado da mesma forma, enquanto se fosse permitido, a+bseria 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 daycomo 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 igou a foosaber, 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.

Referências

Veja também