Adopt use of gnulib for portability.
[pspp-builds.git] / src / lexer.h
index 2dd7da06273cfb11e2d11ddf745158385c588108..af3aeb0ae0f7bf54b5c5b226dd37ad3775fbbe17 100644 (file)
 
    You should have received a copy of the GNU General Public License
    along with this program; if not, write to the Free Software
-   Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
-   02111-1307, USA. */
+   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+   02110-1301, USA. */
 
 #if !lexer_h
 #define lexer_h 1
 
+#include "var.h"
+#include <ctype.h>
+#include <stdbool.h>
+
 /* Returns nonzero if character CH may be the first character in an
    identifier. */
 #define CHAR_IS_ID1(CH)                                \
@@ -41,7 +45,8 @@
 enum
   {
     T_ID = 256, /* Identifier. */
-    T_NUM,     /* Number. */
+    T_POS_NUM, /* Positive number. */
+    T_NEG_NUM, /* Negative number. */
     T_STRING,  /* Quoted string. */
     T_STOP,    /* End of input. */
 
@@ -65,19 +70,19 @@ enum
 
     T_FIRST_KEYWORD = T_AND,
     T_LAST_KEYWORD = T_WITH,
-    T_N_KEYWORDS = T_LAST_KEYWORD - T_FIRST_KEYWORD + 1,
+    T_N_KEYWORDS = T_LAST_KEYWORD - T_FIRST_KEYWORD + 1
   };
 
-
 extern int token;
 extern double tokval;
-extern char tokid[9];
+extern char tokid[LONG_NAME_LEN + 1];
 extern struct string tokstr;
 
 #include <stddef.h>
 
 /* Initialization. */
 void lex_init (void);
+void lex_done (void);
 
 /* Common functions. */
 void lex_get (void);
@@ -85,10 +90,10 @@ void lex_error (const char *, ...);
 int lex_end_of_command (void);
 
 /* Token testing functions. */
-int lex_integer_p (void);
+bool lex_is_number (void);
+double lex_number (void);
+bool lex_is_integer (void);
 long lex_integer (void);
-int lex_double_p (void);
-double lex_double (void);
 
 /* Token matching functions. */
 int lex_match (int);
@@ -107,6 +112,7 @@ int lex_force_string (void);
 int lex_id_match_len (const char *keyword_string, size_t keyword_len,
                      const char *token_string, size_t token_len);
 int lex_id_match (const char *keyword_string, const char *token_string);
+int lex_id_to_token (const char *id, size_t len);
        
 /* Weird token functions. */
 int lex_look_ahead (void);
@@ -114,8 +120,8 @@ void lex_put_back (int);
 void lex_put_back_id (const char *tokid);
 
 /* Weird line processing functions. */
-char *lex_entire_line (void);
-char *lex_rest_of_line (int *had_dot);
+const char *lex_entire_line (void);
+const char *lex_rest_of_line (int *end_dot);
 void lex_discard_line (void);
 void lex_set_prog (char *p);