/usr/include/dovecot/sieve/sieve-lexer.h is in dovecot-dev 1:2.2.9-1ubuntu2.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 | /* Copyright (c) 2002-2013 Pigeonhole authors, see the included COPYING file
*/
#ifndef __SIEVE_LEXER_H
#define __SIEVE_LEXER_H
#include "lib.h"
#include "str.h"
#include "sieve-common.h"
enum sieve_token_type {
STT_NONE,
STT_WHITESPACE,
STT_EOF,
STT_NUMBER,
STT_IDENTIFIER,
STT_TAG,
STT_STRING,
STT_RBRACKET,
STT_LBRACKET,
STT_RCURLY,
STT_LCURLY,
STT_RSQUARE,
STT_LSQUARE,
STT_SEMICOLON,
STT_COMMA,
/* These are currently not used in the lexical specification, but a token
* is assigned to these to generate proper error messages (these are
* technically not garbage and possibly part of mistyped but otherwise
* valid tokens).
*/
STT_SLASH,
STT_COLON,
/* Error tokens */
STT_GARBAGE, /* Error reporting deferred to parser */
STT_ERROR /* Lexer is responsible for error, parser won't report additional
errors */
};
/*
* Lexer object;
*/
struct sieve_lexical_scanner;
struct sieve_lexer {
struct sieve_lexical_scanner *scanner;
enum sieve_token_type token_type;
string_t *token_str_value;
int token_int_value;
int token_line;
};
const struct sieve_lexer *sieve_lexer_create
(struct sieve_script *script, struct sieve_error_handler *ehandler,
enum sieve_error *error_r);
void sieve_lexer_free(const struct sieve_lexer **lexer);
/*
* Scanning
*/
bool sieve_lexer_skip_token(const struct sieve_lexer *lexer);
/*
* Token access
*/
static inline enum sieve_token_type sieve_lexer_token_type
(const struct sieve_lexer *lexer)
{
return lexer->token_type;
}
static inline const string_t *sieve_lexer_token_str
(const struct sieve_lexer *lexer)
{
i_assert( lexer->token_type == STT_STRING );
return lexer->token_str_value;
}
static inline const char *sieve_lexer_token_ident
(const struct sieve_lexer *lexer)
{
i_assert(
lexer->token_type == STT_TAG ||
lexer->token_type == STT_IDENTIFIER);
return str_c(lexer->token_str_value);
}
static inline int sieve_lexer_token_int
(const struct sieve_lexer *lexer)
{
i_assert(lexer->token_type == STT_NUMBER);
return lexer->token_int_value;
}
static inline bool sieve_lexer_eof
(const struct sieve_lexer *lexer)
{
return lexer->token_type == STT_EOF;
}
static inline int sieve_lexer_token_line
(const struct sieve_lexer *lexer)
{
return lexer->token_line;
}
const char *sieve_lexer_token_description
(const struct sieve_lexer *lexer);
void sieve_lexer_token_print
(const struct sieve_lexer *lexer);
#endif /* __SIEVE_LEXER_H */
|