X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Fdata%2Fidentifier.c;h=a757b31e3a03a8a644a7520fccec4ec8e81e6c14;hb=409300edc12ed72186b67704e529584d87fd91ba;hp=1e149b8dc3ea9673c801be8ed7cb0010dbb546b5;hpb=691c25e36fd1ee722dd35419d6110e3876b99f9c;p=pspp diff --git a/src/data/identifier.c b/src/data/identifier.c index 1e149b8dc3..a757b31e3a 100644 --- a/src/data/identifier.c +++ b/src/data/identifier.c @@ -1,5 +1,5 @@ /* PSPP - a program for statistical analysis. - Copyright (C) 1997-9, 2000, 2005, 2009, 2010 Free Software Foundation, Inc. + Copyright (C) 1997-9, 2000, 2005, 2009, 2010, 2011, 2012 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -23,7 +23,6 @@ #include "data/identifier.h" -#include #include #include @@ -31,6 +30,124 @@ #include "gl/c-ctype.h" +#include "gettext.h" +#define _(msgid) gettext (msgid) + +/* Tokens. */ + +/* Returns TYPE as a string, e.g. "ID" for T_ID. */ +const char * +token_type_to_name (enum token_type type) +{ + switch (type) + { +#define TOKEN_TYPE(TYPE) case T_##TYPE: return #TYPE; + TOKEN_TYPES +#undef TOKEN_TYPE + case TOKEN_N_TYPES: + default: + return "unknown token type"; + } +} + +/* Returns an ASCII string that yields TOKEN if it appeared in a syntax file, + as a statically allocated constant string. This function returns NULL for + tokens that don't have any fixed string representation, such as identifier + and number tokens. */ +const char * +token_type_to_string (enum token_type token) +{ + switch (token) + { + case T_ID: + case T_POS_NUM: + case T_NEG_NUM: + case T_STRING: + case T_STOP: + return NULL; + + case T_ENDCMD: + return "."; + + case T_PLUS: + return "+"; + + case T_DASH: + return "-"; + + case T_ASTERISK: + return "*"; + + case T_SLASH: + return "/"; + + case T_EQUALS: + return "="; + + case T_LPAREN: + return "("; + + case T_RPAREN: + return ")"; + + case T_LBRACK: + return "["; + + case T_RBRACK: + return "]"; + + case T_COMMA: + return ","; + + case T_AND: + return "AND"; + + case T_OR: + return "OR"; + + case T_NOT: + return "NOT"; + + case T_EQ: + return "EQ"; + + case T_GE: + return ">="; + + case T_GT: + return ">"; + + case T_LE: + return "<="; + + case T_LT: + return "<"; + + case T_NE: + return "~="; + + case T_ALL: + return "ALL"; + + case T_BY: + return "BY"; + + case T_TO: + return "TO"; + + case T_WITH: + return "WITH"; + + case T_EXP: + return "**"; + + case TOKEN_N_TYPES: + NOT_REACHED (); + } + + NOT_REACHED (); +} + /* Recognizing identifiers. */ static bool @@ -79,8 +196,9 @@ lex_uc_is_id1 (ucs4_t uc) bool lex_uc_is_idn (ucs4_t uc) { - return (is_ascii_id1 (uc) || isdigit (uc) || uc == '.' || uc == '_' - || (uc >= 0x80 && uc_is_property_id_continue (uc))); + return (uc < 0x80 + ? is_ascii_id1 (uc) || isdigit (uc) || uc == '.' || uc == '_' + : uc >= 0x80 && uc_is_property_id_continue (uc)); } /* Returns true if Unicode code point UC is a space that separates tokens. */ @@ -197,20 +315,3 @@ lex_id_to_token (struct substring id) return T_ID; } - -/* Returns the name for the given keyword token type. */ -const char * -lex_id_name (enum token_type token) -{ - const struct keyword *kw; - - for (kw = keywords; kw < &keywords[keyword_cnt]; kw++) - if (kw->token == token) - { - /* A "struct substring" is not guaranteed to be - null-terminated, as our caller expects, but in this - case it always will be. */ - return ss_data (kw->identifier); - } - NOT_REACHED (); -}