OBSERVAÇÃO:este site foi descontinuado. O site será desativado após 31 de janeiro de 2023, e o tráfego será redirecionado para o novo site em https://protobuf.dev. Enquanto isso, as atualizações serão feitas apenas para protobuf.dev.

tokenizer.h.

Mantenha tudo organizado com as coleções Salve e categorize o conteúdo com base nas suas preferências.

#include <google/protobuf/io/tokenizer.h>
namespace google::protobuf::io

Classe para analisar texto tokenizado de um ZeroCopyInputStream.

Turmas neste arquivo

Interface abstrata de um objeto que coleta os erros que ocorrem durante a análise.
Esta classe converte um stream de texto bruto em um stream de tokens para o analisador de definição de protocolo analisar.
Estrutura que representa um token lido do stream de tokens.

Participantes do arquivo

Essas definições não fazem parte de nenhuma classe.
typedef
int ColumnNumber
Por "número da coluna", o compilador proto se refere a uma contagem do número de bytes antes de um determinado byte, exceto que um caractere de tabulação avança para o próximo múltiplo de 8 bytes. mais…

typedef io::ColumnNumber

Por "número da coluna", o compilador proto se refere a uma contagem do número de bytes antes de um determinado byte, exceto que um caractere de tabulação avança para o próximo múltiplo de 8 bytes.

Os números de colunas são baseados em zero, enquanto muitas interfaces de usuário usam números de coluna baseados em um.

classe ErrorColetaror

#include <google/protobuf/io/tokenizer.h>
namespace google::protobuf::io

Interface abstrata de um objeto que coleta os erros que ocorrem durante a análise.

Uma implementação típica pode simplesmente imprimir os erros em stdout.

Participantes

ErrorCollector()
virtual
~ErrorCollector()
virtual void
AddError(int line, ColumnNumber column, const std::string & message) = 0
Indica que houve um erro na entrada nos números de linha e coluna fornecidos. mais…
virtual void
AddWarning(int , ColumnNumber , const std::string & )
Indica que houve um aviso na entrada dos números de linha e coluna fornecidos. mais…

virtual void ErrorCollector::AddError(
        int line,
        ColumnNumber column,
        const std::string & message) = 0

Indica que houve um erro na entrada nos números de linha e coluna fornecidos.

Os números são baseados em zero. Portanto, adicione um para cada um antes de exibi-los.


virtual void ErrorCollector::AddWarning(
        int ,
        ColumnNumber ,
        const std::string & )

Indica que houve um aviso na entrada dos números de linha e coluna fornecidos.

Os números são baseados em zero. Portanto, adicione um para cada um antes de exibi-los.

classe Tokenizer

#include <google/protobuf/io/tokenizer.h>
namespace google::protobuf::io

Esta classe converte um stream de texto bruto em um stream de tokens para o analisador de definição de protocolo analisar.

Os tokens reconhecidos são semelhantes aos que compõem a linguagem C. Consulte a enumeração TokenType para ver descrições precisas. O espaço em branco e os comentários são ignorados. Por padrão, os comentários em C e C++ são reconhecidos, mas outros estilos podem ser usados se set_comment_style() for chamado.

Participantes

enum
TokenType
Tokenizer(ZeroCopyInputStream * input, ErrorCollector * error_collector)
Crie um Tokenizer que leia e tokenize o texto do stream de entrada fornecido e grave erros no error_collector. mais...
~Tokenizer()
const Token &
current()
Receba o token atual. mais…
const Token &
previous()
Retorne o token anterior, ou seja, mais...
bool
Next()
Avance para o próximo token. mais…
bool
NextWithComments(std::string * prev_trailing_comments, std::vector< std::string > * detached_comments, std::string * next_leading_comments)
Como Next(), mas também coleta comentários que aparecem entre o token anterior e o próximo. mais...

Opções

enum
CommentStyle
Valores válidos para set_comment_style(). mais...
void
set_allow_f_after_float(bool value)
Defina como verdadeiro para permitir que os pontos flutuantes sejam sufixados com a letra "f". mais…
void
set_comment_style(CommentStyle style)
Define o estilo do comentário.
void
set_require_space_after_number(bool require)
Indica se é necessário espaço em branco entre um número e um nome de campo. mais…
void
set_allow_multiline_strings(bool allow)
Indica se os literais de string podem abranger várias linhas. mais…
static bool
IsIdentifier(const std::string & text)
Assistente externo: valida um identificador.

Auxiliares de análise

static double
ParseFloat(const std::string & text)
Analisa um token TYPE_FLOAT. mais…
static void
ParseString(const std::string & text, std::string * output)
Analisa um token TYPE_STRING. mais…
static void
ParseStringAppend(const std::string & text, std::string * output)
Idêntico a ParseString, mas é anexado à saída.
static bool
ParseInteger(const std::string & text, uint64 max_value, uint64 * output)
Analisa um token TYPE_INTEGER. mais…

enum Tokenizer::TokenType {
  TYPE_START,
  TYPE_END,
  TYPE_IDENTIFIER,
  TYPE_INTEGER,
  TYPE_FLOAT,
  TYPE_STRING,
  TYPE_SYMBOL
}

TIPONext() ainda não foi chamado.
TIPOFim da entrada. "text" está em branco.
TIPO

Uma sequência de letras, dígitos e sublinhados, não iniciada por um dígito.

É um erro para que um número seja seguido por um identificador sem espaço no meio.

INTEIRO DO TIPO

Uma sequência de dígitos que representa um número inteiro.

Normalmente, os dígitos são decimais, mas o prefixo "0x" indica um número hexadecimal e um zero inicial indica octal, assim como os literais numéricos C. Um sinal negativo principal NÃO é incluído no token. Cabe ao analisador interpretar o operador unário com menos um por conta própria.

TYPE_FLOAT

Um literal de ponto flutuante, com uma parte fracionária e/ou um expoente.

Sempre em decimal. Novamente, nunca é negativo.

TIPO_STRING

Uma sequência entre aspas de caracteres com escape.

É possível usar aspas simples ou duplas, mas elas precisam ser iguais. Um literal de string não pode cruzar uma quebra de linha.

TIPO

Qualquer outro caractere de impressão, como "!" ou "+".

Os símbolos são sempre um único caractere, portanto, "!+$%" são quatro tokens.


Tokenizer::Tokenizer(
        ZeroCopyInputStream * input,
        ErrorCollector * error_collector)

Crie um Tokenizer que leia e tokenize o texto do stream de entrada fornecido e grave erros no error_collector.

O autor da chamada mantém a propriedade de input e error_collector.


const Token & Tokenizer::current()

Receba o token atual.

Isso é atualizado quando Next() é chamado. Antes da primeira chamada para Next(), o current() tem o tipo TYPE_START e nenhum conteúdo.


const Token & Tokenizer::previous()

Retorna o token anterior, ou seja,

o que current() retornou antes da chamada anterior para Next().


bool Tokenizer::Next()

Avance para o próximo token.

Retorna "false" se o fim da entrada for alcançado.


bool Tokenizer::NextWithComments(
        std::string * prev_trailing_comments,
        std::vector< std::string > * detached_comments,
        std::string * next_leading_comments)

Como Next(), mas também coleta comentários que aparecem entre o token anterior e o próximo.

Os comentários que parecem estar anexados ao token anterior são armazenados em *prev_tailing_comments. Os comentários que parecem ser anexados ao próximo token são armazenados em *next_lead_comments. Os comentários que aparecem entre os dois e que parecem não estar anexados a ambos serão adicionados a Detached_comments. Qualquer um desses parâmetros pode ser NULL para descartar os comentários.

Uma série de comentários de linha que aparecem em linhas consecutivas, sem nenhum outro token aparecendo nessas linhas, será tratado como um único comentário.

Somente o conteúdo do comentário é retornado. Os marcadores de comentário (por exemplo, //) são removidos. Para comentários em bloco, um espaço em branco inicial e um asterisco são removidos do início de cada linha, exceto da primeira. As novas linhas estão incluídas na saída.

Exemplos:

optional int32 foo = 1;  // Comment attached to foo.
// Comment attached to bar.
optional int32 bar = 2;

optional string baz = 3;
// Comment attached to baz.
// Another line attached to baz.

// Comment attached to qux.
//
// Another line attached to qux.
optional double qux = 4;

// Detached comment.  This is not attached to qux or corge
// because there are blank lines separating it from both.

optional string corge = 5;
/* Block comment attached
 * to corge.  Leading asterisks
 * will be removed. * /
/* Block comment attached to
 * grault. * /
optional int32 grault = 6;
   *  

enum Tokenizer::CommentStyle {
  CPP_COMMENT_STYLE,
  SH_COMMENT_STYLE
}

Valores válidos para set_comment_style().

CPP_COMMENTS_STYLEOs comentários das linhas começam com "//", os comentários em blocos são delimitados por "/*" e "* /".
SH_COMMENTS_STYLEOs comentários da linha começam com "#". Não é possível escrever comentários em bloco.

void Tokenizer::set_allow_f_after_float(
        bool value)

Defina como verdadeiro para permitir que os pontos flutuantes sejam sufixados com a letra "f".

Os tokens que seriam números inteiros, mas que tiverem o sufixo "f", serão forçados a serem interpretados como flutuantes. Para todas as outras finalidades, o "f" é ignorado.


void Tokenizer::set_require_space_after_number(
        bool require)

Indica se é necessário espaço em branco entre um número e um nome de campo.

O padrão é "true". Não use esse recurso, apenas para limpeza interna do Google.


void Tokenizer::set_allow_multiline_strings(
        bool allow)

Indica se os literais de string podem abranger várias linhas.

O padrão é false Não use esse recurso, apenas para limpeza interna do Google.


static double Tokenizer::ParseFloat(
        const std::string & text)

Analisa um token TYPE_FLOAT.

Isso nunca falha, desde que o texto venha de um token TYPE_FLOAT analisado pelo Tokenizer. Caso contrário, o resultado é indefinido (possivelmente uma falha de declaração).


static void Tokenizer::ParseString(
        const std::string & text,
        std::string * output)

Analisa um token TYPE_STRING.

Isso nunca falha, desde que o texto venha de um token TYPE_STRING analisado pelo Tokenizer. Caso contrário, o resultado é indefinido (possivelmente uma falha de declaração).


static bool Tokenizer::ParseInteger(
        const std::string & text,
        uint64 max_value,
        uint64 * output)

Analisa um token TYPE_INTEGER.

Retorna false, se o resultado for maior que max_value. Caso contrário, retorna verdadeiro e define *output como o resultado. Se o texto não for de um Token do tipo TYPE_INTEGER originalmente analisado por um Tokenizer, o resultado será indefinido (possivelmente uma falha de declaração).

struct Tokenizer::Token

#include <google/protobuf/io/tokenizer.h>
namespace google::protobuf::io

Estrutura que representa um token lido do stream de tokens.

Participantes

TokenType
type
std::string
text
O texto exato do token como ele apareceu na entrada. mais…
int
line
"line" e "column" especificam a posição do primeiro caractere do token no stream de entrada. mais…
ColumnNumber
column
ColumnNumber
end_column

std::string Token::text

O texto exato do token como ele apareceu na entrada.

Por exemplo, tokens de TYPE_STRING ainda vão receber escape e estar entre aspas.


int Token::line

"line" e "column" especificam a posição do primeiro caractere do token no stream de entrada.

Eles são baseados em zero.