scan: Get rid of scan token types in favor of new scan result state.
[pspp] / src / language / lexer / scan.h
index 0dde2738049d6d8fdbe2f4bcdb6f5a2bf7b8a3e2..bd76e3ffda0d0ca5aa12bad80aa01bb4867bf62a 100644 (file)
@@ -35,39 +35,6 @@ struct token;
    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
   {
@@ -80,6 +47,8 @@ enum scan_result
   {
     /* 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. */
@@ -101,8 +70,16 @@ struct string_lexer
     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 */