types.
*/
-#define SCAN_TYPES \
- SCAN_TYPE(BAD_HEX_LENGTH) \
- SCAN_TYPE(BAD_HEX_DIGIT) \
- \
- SCAN_TYPE(BAD_UNICODE_LENGTH) \
- SCAN_TYPE(BAD_UNICODE_DIGIT) \
- SCAN_TYPE(BAD_UNICODE_CODE_POINT) \
- \
- SCAN_TYPE(EXPECTED_QUOTE) \
- SCAN_TYPE(EXPECTED_EXPONENT) \
- SCAN_TYPE(UNEXPECTED_CHAR) \
- \
- SCAN_TYPE(SKIP)
-
-/* Types of scan tokens.
-
- Scan token types are a superset of enum token_type. Only the additional
- scan token types are defined here, so see the definition of enum token_type
- for the others. */
-enum scan_type
- {
-#define SCAN_TYPE(TYPE) SCAN_##TYPE,
- SCAN_FIRST = 255,
- SCAN_TYPES
- SCAN_LAST
-#undef SCAN_TYPE
- };
-
-const char *scan_type_to_string (enum scan_type);
-bool is_scan_type (enum scan_type);
-
-char *scan_token_to_error (const struct token *);
-
/* A scanner. Opaque. */
struct scanner
{
{
/* Complete token. */
SCAN_DONE, /* Token successfully scanned. */
+ SCAN_EMPTY, /* This segment does not produce any token. */
+ SCAN_ERROR, /* This segment yields an error message. */
SCAN_MORE, /* More segments needed to scan token. */
/* Incomplete token. */
struct segmenter segmenter;
};
+enum string_lexer_result
+ {
+ SLR_END,
+ SLR_TOKEN,
+ SLR_ERROR
+ };
+
void string_lexer_init (struct string_lexer *, const char *input,
size_t length, enum segmenter_mode, bool is_snippet);
-bool string_lexer_next (struct string_lexer *, struct token *);
+enum string_lexer_result string_lexer_next (struct string_lexer *,
+ struct token *);
#endif /* scan.h */