projects
/
pspp
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Fix XDATE.JDAY formula.
[pspp]
/
src
/
lexer.c
diff --git
a/src/lexer.c
b/src/lexer.c
index 9ad48dfb4b5431a4b41d5bb51efee6754c6e2386..e72f7f1bc6f11ac5e5efde7123751ba5d2c47b54 100644
(file)
--- a/
src/lexer.c
+++ b/
src/lexer.c
@@
-71,7
+71,7
@@
static char *prog;
/* Nonzero only if this line ends with a terminal dot. */
static int dot;
/* Nonzero only if this line ends with a terminal dot. */
static int dot;
-/* Nonzero only if the last token returned was T_
EOF
. */
+/* Nonzero only if the last token returned was T_
STOP
. */
static int eof;
/* If nonzero, next token returned by lex_get().
static int eof;
/* If nonzero, next token returned by lex_get().
@@
-95,7
+95,7
@@
static void dump_token (void);
void
lex_init (void)
{
void
lex_init (void)
{
- ds_init (
NULL,
&put_tokstr, 64);
+ ds_init (&put_tokstr, 64);
if (!lex_get_line ())
unexpected_eof ();
}
if (!lex_get_line ())
unexpected_eof ();
}
@@
-109,8
+109,8
@@
restore_token (void)
{
assert (put_token != 0);
token = put_token;
{
assert (put_token != 0);
token = put_token;
- ds_replace (&tokstr, ds_
value
(&put_tokstr));
- strncpy (tokid, ds_
value
(&put_tokstr), 8);
+ ds_replace (&tokstr, ds_
c_str
(&put_tokstr));
+ strncpy (tokid, ds_
c_str
(&put_tokstr), 8);
tokid[8] = 0;
tokval = put_tokval;
put_token = 0;
tokid[8] = 0;
tokval = put_tokval;
put_token = 0;
@@
-122,7
+122,7
@@
static void
save_token (void)
{
put_token = token;
save_token (void)
{
put_token = token;
- ds_replace (&put_tokstr, ds_
value
(&tokstr));
+ ds_replace (&put_tokstr, ds_
c_str
(&tokstr));
put_tokval = tokval;
}
put_tokval = tokval;
}
@@
-208,7
+208,7
@@
lex_get (void)
negative numbers into two tokens. */
if (*cp == '-')
{
negative numbers into two tokens. */
if (*cp == '-')
{
- ds_putc
har
(&tokstr, *prog++);
+ ds_putc (&tokstr, *prog++);
while (isspace ((unsigned char) *prog))
prog++;
while (isspace ((unsigned char) *prog))
prog++;
@@
-221,32
+221,32
@@
lex_get (void)
/* Parse the number, copying it into tokstr. */
while (isdigit ((unsigned char) *prog))
/* Parse the number, copying it into tokstr. */
while (isdigit ((unsigned char) *prog))
- ds_putc
har
(&tokstr, *prog++);
+ ds_putc (&tokstr, *prog++);
if (*prog == '.')
{
if (*prog == '.')
{
- ds_putc
har
(&tokstr, *prog++);
+ ds_putc (&tokstr, *prog++);
while (isdigit ((unsigned char) *prog))
while (isdigit ((unsigned char) *prog))
- ds_putc
har
(&tokstr, *prog++);
+ ds_putc (&tokstr, *prog++);
}
if (*prog == 'e' || *prog == 'E')
{
}
if (*prog == 'e' || *prog == 'E')
{
- ds_putc
har
(&tokstr, *prog++);
+ ds_putc (&tokstr, *prog++);
if (*prog == '+' || *prog == '-')
if (*prog == '+' || *prog == '-')
- ds_putc
har
(&tokstr, *prog++);
+ ds_putc (&tokstr, *prog++);
while (isdigit ((unsigned char) *prog))
while (isdigit ((unsigned char) *prog))
- ds_putc
har
(&tokstr, *prog++);
+ ds_putc (&tokstr, *prog++);
}
/* Parse as floating point. */
}
/* Parse as floating point. */
- tokval = strtod (ds_
value
(&tokstr), &tail);
+ tokval = strtod (ds_
c_str
(&tokstr), &tail);
if (*tail)
{
msg (SE, _("%s does not form a valid number."),
if (*tail)
{
msg (SE, _("%s does not form a valid number."),
- ds_
value
(&tokstr));
+ ds_
c_str
(&tokstr));
tokval = 0.0;
ds_clear (&tokstr);
tokval = 0.0;
ds_clear (&tokstr);
- ds_putc
har
(&tokstr, '0');
+ ds_putc (&tokstr, '0');
}
token = T_NUM;
}
token = T_NUM;
@@
-346,15
+346,15
@@
lex_get (void)
}
/* Copy id to tokstr. */
}
/* Copy id to tokstr. */
- ds_putc
har
(&tokstr, toupper ((unsigned char) *prog++));
+ ds_putc (&tokstr, toupper ((unsigned char) *prog++));
while (CHAR_IS_IDN (*prog))
while (CHAR_IS_IDN (*prog))
- ds_putc
har
(&tokstr, toupper ((unsigned char) *prog++));
+ ds_putc (&tokstr, toupper ((unsigned char) *prog++));
/* Copy tokstr to tokid, truncating it to 8 characters. */
/* Copy tokstr to tokid, truncating it to 8 characters. */
- strncpy (tokid, ds_
value
(&tokstr), 8);
+ strncpy (tokid, ds_
c_str
(&tokstr), 8);
tokid[8] = 0;
tokid[8] = 0;
- token = check_id (ds_
value
(&tokstr), ds_length (&tokstr));
+ token = check_id (ds_
c_str
(&tokstr), ds_length (&tokstr));
break;
default:
break;
default:
@@
-690,38
+690,29
@@
lex_put_back_id (const char *id)
save_token ();
token = T_ID;
ds_replace (&tokstr, id);
save_token ();
token = T_ID;
ds_replace (&tokstr, id);
- strncpy (tokid, ds_
value
(&tokstr), 8);
+ strncpy (tokid, ds_
c_str
(&tokstr), 8);
tokid[8] = 0;
}
\f
/* Weird line processing functions. */
tokid[8] = 0;
}
\f
/* Weird line processing functions. */
-/* Discards the rest of the current input line for tokenization
- purposes, but returns the entire contents of the line for use by
- the caller. */
-char *
+/* Returns the entire contents of the current line. */
+const char *
lex_entire_line (void)
{
lex_entire_line (void)
{
- prog = ds_end (&getl_buf);
- dot = 0;
- return ds_value (&getl_buf);
+ return ds_c_str (&getl_buf);
}
/* As lex_entire_line(), but only returns the part of the current line
that hasn't already been tokenized.
}
/* As lex_entire_line(), but only returns the part of the current line
that hasn't already been tokenized.
- If
HAD_DOT is non-null, stores nonzero into *HA
D_DOT if the line
+ If
END_DOT is non-null, stores nonzero into *EN
D_DOT if the line
ends with a terminal dot, or zero if it doesn't. */
ends with a terminal dot, or zero if it doesn't. */
-char *
-lex_rest_of_line (int *
ha
d_dot)
+c
onst c
har *
+lex_rest_of_line (int *
en
d_dot)
{
{
- char *s = prog;
- prog = ds_end (&getl_buf);
-
- if (had_dot)
- *had_dot = dot;
- dot = 0;
-
- return s;
+ if (end_dot)
+ *end_dot = dot;
+ return prog;
}
/* Causes the rest of the current input line to be ignored for
}
/* Causes the rest of the current input line to be ignored for
@@
-729,10
+720,7
@@
lex_rest_of_line (int *had_dot)
void
lex_discard_line (void)
{
void
lex_discard_line (void)
{
- msg (SW, _("The rest of this command has been discarded."));
-
- ds_clear (&getl_buf);
- prog = ds_value (&getl_buf);
+ prog = ds_end (&getl_buf);
dot = put_token = 0;
}
dot = put_token = 0;
}
@@
-776,7
+764,7
@@
lex_preprocess_line (void)
/* Remove C-style comments begun by slash-star and terminated by
star-slash or newline. */
quote = comment = 0;
/* Remove C-style comments begun by slash-star and terminated by
star-slash or newline. */
quote = comment = 0;
- for (cp = ds_
value
(&getl_buf); *cp; )
+ for (cp = ds_
c_str
(&getl_buf); *cp; )
{
/* If we're not commented out, toggle quoting. */
if (!comment)
{
/* If we're not commented out, toggle quoting. */
if (!comment)
@@
-817,7
+805,7
@@
lex_preprocess_line (void)
/* Strip trailing whitespace and terminal dot. */
{
size_t len = ds_length (&getl_buf);
/* Strip trailing whitespace and terminal dot. */
{
size_t len = ds_length (&getl_buf);
- char *s = ds_
value
(&getl_buf);
+ char *s = ds_
c_str
(&getl_buf);
/* Strip trailing whitespace. */
while (len > 0 && isspace ((unsigned char) s[len - 1]))
/* Strip trailing whitespace. */
while (len > 0 && isspace ((unsigned char) s[len - 1]))
@@
-842,7
+830,7
@@
lex_preprocess_line (void)
as necessary. */
if (getl_interactive != 2 && getl_mode == GETL_MODE_BATCH)
{
as necessary. */
if (getl_interactive != 2 && getl_mode == GETL_MODE_BATCH)
{
- char *s = ds_
value
(&getl_buf);
+ char *s = ds_
c_str
(&getl_buf);
if (s[0] == '+' || s[0] == '-' || s[0] == '.')
s[0] = ' ';
if (s[0] == '+' || s[0] == '-' || s[0] == '.')
s[0] = ' ';
@@
-850,7
+838,7
@@
lex_preprocess_line (void)
put_token = '.';
}
put_token = '.';
}
- prog = ds_
value
(&getl_buf);
+ prog = ds_
c_str
(&getl_buf);
}
\f
/* Token names. */
}
\f
/* Token names. */
@@
-883,7
+871,7
@@
lex_token_representation (void)
{
case T_ID:
case T_NUM:
{
case T_ID:
case T_NUM:
- return xstrdup (ds_
value
(&tokstr));
+ return xstrdup (ds_
c_str
(&tokstr));
break;
case T_STRING:
break;
case T_STRING:
@@
-891,7
+879,7
@@
lex_token_representation (void)
int hexstring = 0;
char *sp, *dp;
int hexstring = 0;
char *sp, *dp;
- for (sp = ds_
value
(&tokstr); sp < ds_end (&tokstr); sp++)
+ for (sp = ds_
c_str
(&tokstr); sp < ds_end (&tokstr); sp++)
if (!isprint ((unsigned char) *sp))
{
hexstring = 1;
if (!isprint ((unsigned char) *sp))
{
hexstring = 1;
@@
-906,14
+894,14
@@
lex_token_representation (void)
*dp++ = '\'';
if (!hexstring)
*dp++ = '\'';
if (!hexstring)
- for (sp = ds_
value
(&tokstr); *sp; )
+ for (sp = ds_
c_str
(&tokstr); *sp; )
{
if (*sp == '\'')
*dp++ = '\'';
*dp++ = (unsigned char) *sp++;
}
else
{
if (*sp == '\'')
*dp++ = '\'';
*dp++ = (unsigned char) *sp++;
}
else
- for (sp = ds_
value
(&tokstr); sp < ds_end (&tokstr); sp++)
+ for (sp = ds_
c_str
(&tokstr); sp < ds_end (&tokstr); sp++)
{
*dp++ = (((unsigned char) *sp) >> 4)["0123456789ABCDEF"];
*dp++ = (((unsigned char) *sp) & 15)["0123456789ABCDEF"];
{
*dp++ = (((unsigned char) *sp) >> 4)["0123456789ABCDEF"];
*dp++ = (((unsigned char) *sp) & 15)["0123456789ABCDEF"];
@@
-961,7
+949,7
@@
lex_negative_to_dash (void)
{
token = T_NUM;
tokval = -tokval;
{
token = T_NUM;
tokval = -tokval;
- ds_replace (&tokstr, ds_
value
(&tokstr) + 1);
+ ds_replace (&tokstr, ds_
c_str
(&tokstr) + 1);
save_token ();
token = '-';
}
save_token ();
token = '-';
}
@@
-980,7
+968,13
@@
lex_skip_comment (void)
{
for (;;)
{
{
for (;;)
{
- lex_get_line ();
+ if (!lex_get_line ())
+ {
+ put_token = T_STOP;
+ eof = 1;
+ return;
+ }
+
if (put_token == '.')
break;
if (put_token == '.')
break;
@@
-1040,7
+1034,7
@@
convert_numeric_string_to_char_string (int type)
"multiple of %d."),
gettext (base_name), ds_length (&tokstr), cpb);
"multiple of %d."),
gettext (base_name), ds_length (&tokstr), cpb);
- p = ds_
value
(&tokstr);
+ p = ds_
c_str
(&tokstr);
for (i = 0; i < nb; i++)
{
int value;
for (i = 0; i < nb; i++)
{
int value;
@@
-1070,7
+1064,7
@@
convert_numeric_string_to_char_string (int type)
value = value * base + v;
}
value = value * base + v;
}
- ds_
value
(&tokstr)[i] = (unsigned char) value;
+ ds_
c_str
(&tokstr)[i] = (unsigned char) value;
}
ds_truncate (&tokstr, nb);
}
ds_truncate (&tokstr, nb);
@@
-1109,7
+1103,7
@@
parse_string (int type)
break;
}
break;
}
- ds_putc
har
(&tokstr, *prog++);
+ ds_putc (&tokstr, *prog++);
}
prog++;
}
prog++;
@@
-1179,7
+1173,7
@@
finish:
int warned = 0;
for (i = 0; i < ds_length (&tokstr); i++)
int warned = 0;
for (i = 0; i < ds_length (&tokstr); i++)
- if (ds_
value
(&tokstr)[i] == 0)
+ if (ds_
c_str
(&tokstr)[i] == 0)
{
if (!warned)
{
{
if (!warned)
{
@@
-1187,7
+1181,7
@@
finish:
"characters. Replacing with spaces."));
warned = 1;
}
"characters. Replacing with spaces."));
warned = 1;
}
- ds_
value
(&tokstr)[i] = ' ';
+ ds_
c_str
(&tokstr)[i] = ' ';
}
}
}
}
@@
-1220,7
+1214,7
@@
dump_token (void)
break;
case T_STRING:
break;
case T_STRING:
- fprintf (stderr, "STRING\t\"%s\"\n", ds_
value
(&tokstr));
+ fprintf (stderr, "STRING\t\"%s\"\n", ds_
c_str
(&tokstr));
break;
case T_STOP:
break;
case T_STOP:
@@
-1243,4
+1237,4
@@
dump_token (void)
break;
}
}
break;
}
}
-#endif /* D
EBUGGING
*/
+#endif /* D
UMP_TOKENS
*/