Sequência de fuga - Escape sequence

Na ciência da computação , uma sequência de escape é uma combinação de caracteres que tem um significado diferente dos caracteres literais nela contidos; ele é marcado por um ou mais caracteres precedentes (e possivelmente finalizadores).

Exemplos

  • Em C e em muitas linguagens de programação derivadas, uma sequência de escape de string é uma série de dois ou mais caracteres, começando com uma barra invertida\ .
    • Observe que em C uma barra invertida imediatamente seguida por uma nova linha não constitui uma sequência de escape, mas une as linhas de origem física em linhas lógicas na segunda fase de tradução, enquanto as sequências de escape de string são convertidas na quinta fase de tradução.
    • Para representar o próprio caractere de barra invertida, \\pode ser usado, em que a primeira barra invertida indica um escape e a segunda especifica que uma barra invertida está sendo escapada.
    • Um caractere pode ser escapado de várias maneiras diferentes. Partindo do princípio de codificação ASCII, as sequências de escape \x5c, \\, \134e \x5Ctodos codificam o mesmo carácter: a barra invertida \.
  • Para dispositivos que respondem a sequências de escape ANSI , a combinação de três ou mais caracteres começando com o caractere de "escape" ASCII (código de caractere decimal 27) seguido pelo caractere de colchete esquerdo [(código de caractere decimal 91) define uma seqüência de escape.

Sequências de controle

Quando direcionada, esta série de caracteres é usada para alterar o estado dos computadores e seus dispositivos periféricos conectados, ao invés de serem exibidos ou impressos como bytes de dados regulares seriam, estes também são conhecidos como sequências de controle , refletindo seu uso no controle do dispositivo , começando com o Control Sequence Initiator - originalmente o "caractere de escape" código ASCII - caractere 27 (decimal) - freqüentemente escrito "Esc" nas teclas .

Com a introdução dos terminais ANSI, a maioria das sequências de escape começou com os dois caracteres "ESC" e depois "[" ou um caractere CSI especialmente alocado com um código 155 (decimal).

Nem todas as sequências de controle usaram um caractere de escape; por exemplo:

  • Dados Seqüências gerais de controle de terminal, mas muitas vezes ainda eram chamadas de seqüências de escape, e o uso muito comum de caracteres especiais de "escape" em linguagens de programação e parâmetros de linha de comando hoje costumam usar o caractere de "barra invertida" para iniciar a seqüência.

As sequências de escape em comunicações são comumente usadas quando um computador e um periférico têm apenas um único canal através do qual enviar informações para frente e para trás (portanto, as sequências de escape são um exemplo de sinalização dentro da banda ). Eles eram comuns quando a maioria dos terminais burros usavam ASCII com 7 bits de dados para comunicação e, às vezes, eram usados ​​para alternar para um conjunto de caracteres diferente para caracteres "estrangeiros" ou gráficos que, de outra forma, seriam restritos pelos 128 códigos disponíveis em 7 bits de dados. Mesmo terminais relativamente "burros" responderam a algumas sequências de escape, incluindo as impressoras mecânicas teletipo originais (nas quais os "teletipos de vidro" ou VDUs foram baseados) responderam aos caracteres 27 e 31 para alternar entre os modos de letras e números.

Teclado

Um caractere de escape é geralmente atribuído à tecla Esc em um teclado de computador e pode ser enviado de outras maneiras que não como parte de uma sequência de escape. Por exemplo, a tecla Esc pode ser usada como um caractere de entrada em editores como o vi , ou para fazer backup de um nível em um menu em alguns aplicativos. Os terminais Hewlett Packard HP 2640 tinham uma tecla para um modo de "funções de exibição" que exibia gráficos para todos os caracteres de controle, incluindo Esc, para auxiliar na depuração de aplicativos.

Se a tecla Esc e outras teclas que enviam sequências de escape são supostamente significativas para um aplicativo, surge uma ambigüidade se um terminal de caractere estiver em uso. Quando o aplicativo recebe o caractere de escape ASCII , não está claro se esse caractere é o resultado do usuário pressionando a tecla Esc ou se é o caractere inicial de uma sequência de escape (por exemplo, resultante de um pressionamento de tecla de seta). O método tradicional de resolver a ambigüidade é observar se outro caractere segue ou não rapidamente o caractere de escape. Caso contrário, presume-se que não faça parte de uma sequência de escape. Essa heurística pode falhar em algumas circunstâncias, especialmente sem velocidades de comunicação modernas e rápidas.

As sequências de escape datam de pelo menos o código Baudot de 1874 .

Controle de modem

O conjunto de comandos Hayes , por exemplo, define uma única sequência de escape, +++ . (Para interpretar +++ , que pode ser uma parte dos dados, como a sequência de escape, o remetente interrompe a comunicação por um segundo antes e depois de +++ ). Quando o modem encontra isso em um fluxo de dados, ele alterna de seu modo normal de operação, que simplesmente envia quaisquer caracteres para o telefone, para um modo de comando em que os dados a seguir são considerados parte da linguagem de comando. Você pode voltar ao modo online enviando o comando O.

O conjunto de comandos Hayes é modal , alternando do modo de comando para o modo online. Isso não é apropriado no caso em que os comandos e dados alternam rapidamente. Um exemplo de linguagem de controle de sequência de escape não modal é o VT100 , que usa uma série de comandos prefixados por um introdutor de sequência de controle .

Comparação com caracteres de controle

Um caractere de controle é um caractere que, isoladamente, tem alguma função de controle, como retorno de carro (CR). As sequências de escape, ao contrário, consistem em um ou mais caracteres de escape que alteram a interpretação dos caracteres subsequentes.

Terminais de dados de vídeo ASCII

O terminal VT52 usava comandos simples de dígrafo como escape-A: isoladamente, "A" significava simplesmente a letra "A", mas como parte da sequência de escape "escape-A", tinha um significado diferente. O VT52 também suportava parâmetros: não era uma linguagem de controle direta codificada como substituição.

O terminal VT100 posterior implementou o padrão de sequências de escape ANSI mais sofisticado (agora ECMA-48) para funções como controle de movimento do cursor, conjunto de caracteres e aprimoramentos de exibição. A série Hewlett Packard HP 2640 tinha talvez as sequências de escape mais elaboradas para modos de bloco e caractere, teclas de programação e seus rótulos soft, vetores gráficos e até mesmo salvar dados em fitas ou arquivos de disco.

Use em DOS e Windows

Uma utilidade, ANSI.sys , pode ser utilizado para permitir a interpretação dos ANSI (ECMA-48) sequências de terminal, sob DOS (usando $ena PROMPT comando) ou em janelas de comando em 16 bits do Windows . O surgimento de aplicativos GUI , que gravam diretamente em cartões de exibição, reduziu muito o uso de sequências de escape em plataformas Microsoft, mas eles ainda podem ser usados ​​para criar interfaces de tela interativas de acesso aleatório baseadas em caracteres com as rotinas de biblioteca baseadas em caracteres, como como printf sem recorrer a um programa GUI.

Use em monitores Linux e Unix

O terminal de texto padrão e as janelas de texto (como usando xterm ) respondem às sequências de escape ANSI.

Citando fuga

Visão geral

Quando um caractere de escape é necessário dentro da string entre aspas / escapada, há duas estratégias usadas nas linguagens de programação e script:

  • delimitador duplo (por exemplo 'He didn''t do it.')
  • sequência de escape secundária

Um exemplo do último está no uso do acento circunflexo ( ^). Por exemplo, isso resulta em "Você pode fazer isso através de Recortar e Colar" no CMD . (caso contrário, o E comercial tem uso restrito)

echo You can do so via Cut^&Paste

Em detalhe

Um uso comum de sequências de escape é, na verdade, remover caracteres de controle encontrados em um fluxo de dados binários para que eles não causem sua função de controle por engano. Nesse caso, o caractere de controle é substituído por um "caractere de escape" definido (que não precisa ser o caractere de escape US-ASCII) e um ou mais outros caracteres; após sair do contexto em que o caractere de controle teria causado uma ação, a sequência é reconhecida e substituída pelo caractere removido. Para transmitir o próprio "caractere de escape", duas cópias são enviadas.

Em muitas linguagens de programação e interfaces de linha de comando, sequências de escape são usadas em literais de caracteres e literais de string , para expressar caracteres que não podem ser impressos ou entrar em conflito com a sintaxe de caracteres ou strings. Por exemplo, os próprios caracteres de controle podem não ter permissão para serem colocados no programa codificado pelo programa editor ou podem ter efeitos colaterais indesejáveis ​​se digitados em um comando. O caractere de fim de aspas também é um problema para programadores que pode ser resolvido escapando dele. Na maioria dos contextos, o caractere de escape é a barra invertida (" \ ").

Amostras

Por exemplo, o caractere de aspa simples pode ser expresso como '\''uma vez que a escrita '''não é aceitável.

Muitas linguagens de programação modernas especificam o caractere aspas duplas ( ") como um delimitador para um literal de string. O caractere de escape de barra invertida normalmente fornece maneiras de incluir aspas duplas dentro de uma string literal, por exemplo, modificando o significado do caractere aspas embutido na string ( \") ou modificando o significado de uma sequência de caracteres, incluindo o valor hexadecimal de um caractere aspas duplas ( \x22) Ambas as sequências codificam um doublequote literal ( ").

Em Perl ou Python 2

print "Nancy said "Hello World!" to the crowd.";

produz um erro de sintaxe, enquanto:

print "Nancy said \"Hello World!\" to the crowd.";  ### example of \"

produz a saída pretendida. Outra alternativa:

print "Nancy said \x22Hello World!\x22 to the crowd.";  ### example of \x22

usa "\ x" para indicar que os dois caracteres a seguir são dígitos hexadecimais, sendo "22" o valor ASCII para aspas duplas em hexadecimal.

C , C ++ , Java e Ruby permitem exatamente os mesmos dois estilos de escape de barra invertida. A linguagem PostScript e o formato Microsoft Rich Text também usam escapes de barra invertida. A codificação para impressão entre aspas usa o sinal de igual como um caractere de escape.

URL e URI usam codificação percentual para citar caracteres com um significado especial, como para caracteres não ASCII.

Outro truque sintático semelhante (e parcialmente sobreposto) é o stropping .

Algumas linguagens de programação também fornecem outras maneiras de representar caracteres especiais em literais, sem exigir um caractere de escape (consulte, por exemplo, colisão de delimitador ).

Veja também

Referências