#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 arquivoEssas 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
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 & )
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) |
| ~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) |
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
}
TYPE_START,
TYPE_END,
TYPE_IDENTIFIER,
TYPE_INTEGER,
TYPE_FLOAT,
TYPE_STRING,
TYPE_SYMBOL
}
TIPO | Next() ainda não foi chamado. |
TIPO | Fim 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)
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()
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)
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
}
CPP_COMMENT_STYLE,
SH_COMMENT_STYLE
}
Valores válidos para set_comment_style().
CPP_COMMENTS_STYLE | Os comentários das linhas começam com "//", os comentários em blocos são delimitados por "/*" e "* /". |
SH_COMMENTS_STYLE | Os 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)
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)
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)
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)
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)
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)
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.