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 "bool.h"
+
/* Returns nonzero if character CH may be the first character in an
identifier. */
#define CHAR_IS_ID1(CH) \
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. */
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);
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);
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);
void lex_put_back (int);
-void lex_put_forward (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);