projects
/
pspp
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
EXAMINE: Convert another test to Autotest framework.
[pspp]
/
src
/
data
/
identifier.c
diff --git
a/src/data/identifier.c
b/src/data/identifier.c
index 004ca5834651ac72df0be128e773721b999b1177..7bd2261e60f15ac8f162996b7ee346c1b0eb5468 100644
(file)
--- a/
src/data/identifier.c
+++ b/
src/data/identifier.c
@@
-1,23
+1,21
@@
-/* PSPP -
computes sample statistic
s.
- Copyright (C) 1997-9, 2000, 2005 Free Software Foundation, Inc.
+/* PSPP -
a program for statistical analysi
s.
+ Copyright (C) 1997-9, 2000, 2005
, 2009
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 the Free Software Foundation; either version 2 of the
-
License, or
(at your option) any later version.
+ 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
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
- This program is distributed in the hope that it will be useful,
but
- WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU
- General Public License for more details.
+ This program is distributed in the hope that it will be useful,
+
but
WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ G
NU G
eneral Public License for more details.
You should have received a copy of the GNU General Public License
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., 51 Franklin Street, Fifth Floor, Boston, MA
- 02110-1301, USA. */
+ along with this program. If not, see <http://www.gnu.org/licenses/>. */
-/*
- This file is concerned with the definition of the PSPP syntax, NOT the
+/*
+ This file is concerned with the definition of the PSPP syntax, NOT the
action of scanning/parsing code .
*/
action of scanning/parsing code .
*/
@@
-34,10
+32,10
@@
/* Returns true if C may be the first character in an
identifier in the current locale. */
bool
/* Returns true if C may be the first character in an
identifier in the current locale. */
bool
-lex_is_id1 (char c_)
+lex_is_id1 (char c_)
{
unsigned char c = c_;
{
unsigned char c = c_;
- return isalpha (c) || c == '@' || c == '#' || c == '$';
+ return isalpha (c) || c == '@' || c == '#' || c == '$'
|| c >= 128
;
}
}
@@
-54,7
+52,7
@@
lex_is_idn (char c_)
a valid identifier. Returns zero if STRING does not begin
with a valid identifier. */
size_t
a valid identifier. Returns zero if STRING does not begin
with a valid identifier. */
size_t
-lex_id_get_length (struct substring string)
+lex_id_get_length (struct substring string)
{
size_t length = 0;
if (!ss_is_empty (string) && lex_is_id1 (ss_first (string)))
{
size_t length = 0;
if (!ss_is_empty (string) && lex_is_id1 (ss_first (string)))
@@
-76,24
+74,32
@@
lex_id_get_length (struct substring string)
and those characters are identical to KEYWORD. */
bool
lex_id_match (struct substring keyword, struct substring token)
and those characters are identical to KEYWORD. */
bool
lex_id_match (struct substring keyword, struct substring token)
+{
+ return lex_id_match_n (keyword, token, 3);
+}
+
+/* Returns true if TOKEN is a case-insensitive match for at least
+ the first N characters of KEYWORD. */
+bool
+lex_id_match_n (struct substring keyword, struct substring token, size_t n)
{
size_t token_len = ss_length (token);
size_t keyword_len = ss_length (keyword);
{
size_t token_len = ss_length (token);
size_t keyword_len = ss_length (keyword);
-
- if (token_len >=
3
&& token_len < keyword_len)
+
+ if (token_len >=
n
&& token_len < keyword_len)
return ss_equals_case (ss_head (keyword, token_len), token);
else
return ss_equals_case (keyword, token);
}
\f
/* Table of keywords. */
return ss_equals_case (ss_head (keyword, token_len), token);
else
return ss_equals_case (keyword, token);
}
\f
/* Table of keywords. */
-struct keyword
+struct keyword
{
int token;
const struct substring identifier;
};
{
int token;
const struct substring identifier;
};
-static const struct keyword keywords[] =
+static const struct keyword keywords[] =
{
{ T_AND, SS_LITERAL_INITIALIZER ("AND") },
{ T_OR, SS_LITERAL_INITIALIZER ("OR") },
{
{ T_AND, SS_LITERAL_INITIALIZER ("AND") },
{ T_OR, SS_LITERAL_INITIALIZER ("OR") },
@@
-113,11
+119,11
@@
static const size_t keyword_cnt = sizeof keywords / sizeof *keywords;
/* Returns true if TOKEN is representable as a keyword. */
bool
/* Returns true if TOKEN is representable as a keyword. */
bool
-lex_is_keyword (int token)
+lex_is_keyword (int token)
{
const struct keyword *kw;
for (kw = keywords; kw < &keywords[keyword_cnt]; kw++)
{
const struct keyword *kw;
for (kw = keywords; kw < &keywords[keyword_cnt]; kw++)
- if (kw->token == token)
+ if (kw->token == token)
return true;
return false;
}
return true;
return false;
}
@@
-127,30
+133,30
@@
lex_is_keyword (int token)
int
lex_id_to_token (struct substring id)
{
int
lex_id_to_token (struct substring id)
{
- if (ss_length (id) >= 2 && ss_length (id) <= 4)
+ if (ss_length (id) >= 2 && ss_length (id) <= 4)
{
const struct keyword *kw;
for (kw = keywords; kw < &keywords[keyword_cnt]; kw++)
if (ss_equals_case (kw->identifier, id))
return kw->token;
}
{
const struct keyword *kw;
for (kw = keywords; kw < &keywords[keyword_cnt]; kw++)
if (ss_equals_case (kw->identifier, id))
return kw->token;
}
-
+
return T_ID;
}
/* Returns the name for the given keyword token type. */
const char *
return T_ID;
}
/* Returns the name for the given keyword token type. */
const char *
-lex_id_name (int token)
+lex_id_name (int token)
{
const struct keyword *kw;
for (kw = keywords; kw < &keywords[keyword_cnt]; kw++)
{
const struct keyword *kw;
for (kw = keywords; kw < &keywords[keyword_cnt]; kw++)
- if (kw->token == token)
+ 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. */
{
/* 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);
+ return ss_data (kw->identifier);
}
NOT_REACHED ();
}
}
NOT_REACHED ();
}