e72a3e47bc9637d93ad3c1f764b7099686df6d3d
[pspp] / src / language / lexer / lexer.c
1 /* PSPP - a program for statistical analysis.
2    Copyright (C) 1997-9, 2000, 2006, 2009, 2010, 2011 Free Software Foundation, Inc.
3
4    This program is free software: you can redistribute it and/or modify
5    it under the terms of the GNU General Public License as published by
6    the Free Software Foundation, either version 3 of the License, or
7    (at your option) any later version.
8
9    This program is distributed in the hope that it will be useful,
10    but WITHOUT ANY WARRANTY; without even the implied warranty of
11    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12    GNU General Public License for more details.
13
14    You should have received a copy of the GNU General Public License
15    along with this program.  If not, see <http://www.gnu.org/licenses/>. */
16
17 #include <config.h>
18
19 #include "language/lexer/lexer.h"
20
21 #include <errno.h>
22 #include <fcntl.h>
23 #include <limits.h>
24 #include <math.h>
25 #include <stdarg.h>
26 #include <stdlib.h>
27 #include <string.h>
28 #include <unictype.h>
29 #include <unistd.h>
30 #include <unistr.h>
31 #include <uniwidth.h>
32
33 #include "data/file-name.h"
34 #include "language/command.h"
35 #include "language/lexer/scan.h"
36 #include "language/lexer/segment.h"
37 #include "language/lexer/token.h"
38 #include "libpspp/assertion.h"
39 #include "libpspp/cast.h"
40 #include "libpspp/deque.h"
41 #include "libpspp/i18n.h"
42 #include "libpspp/ll.h"
43 #include "libpspp/message.h"
44 #include "libpspp/misc.h"
45 #include "libpspp/str.h"
46 #include "libpspp/u8-istream.h"
47 #include "output/journal.h"
48 #include "output/text-item.h"
49
50 #include "gl/c-ctype.h"
51 #include "gl/minmax.h"
52 #include "gl/xalloc.h"
53 #include "gl/xmemdup0.h"
54
55 #include "gettext.h"
56 #define _(msgid) gettext (msgid)
57 #define N_(msgid) msgid
58
59 /* A token within a lex_source. */
60 struct lex_token
61   {
62     /* The regular token information. */
63     struct token token;
64
65     /* Location of token in terms of the lex_source's buffer.
66        src->tail <= line_pos <= token_pos <= src->head. */
67     size_t token_pos;           /* Start of token. */
68     size_t token_len;           /* Length of source for token in bytes. */
69     size_t line_pos;            /* Start of line containing token_pos. */
70     int first_line;             /* Line number at token_pos. */
71   };
72
73 /* A source of tokens, corresponding to a syntax file.
74
75    This is conceptually a lex_reader wrapped with everything needed to convert
76    its UTF-8 bytes into tokens. */
77 struct lex_source
78   {
79     struct ll ll;               /* In lexer's list of sources. */
80     struct lex_reader *reader;
81     struct segmenter segmenter;
82     bool eof;                   /* True if T_STOP was read from 'reader'. */
83
84     /* Buffer of UTF-8 bytes. */
85     char *buffer;
86     size_t allocated;           /* Number of bytes allocated. */
87     size_t tail;                /* &buffer[0] offset into UTF-8 source. */
88     size_t head;                /* &buffer[head - tail] offset into source. */
89
90     /* Positions in source file, tail <= pos <= head for each member here. */
91     size_t journal_pos;         /* First byte not yet output to journal. */
92     size_t seg_pos;             /* First byte not yet scanned as token. */
93     size_t line_pos;            /* First byte of line containing seg_pos. */
94
95     int n_newlines;             /* Number of new-lines up to seg_pos. */
96     bool suppress_next_newline;
97
98     /* Tokens. */
99     struct deque deque;         /* Indexes into 'tokens'. */
100     struct lex_token *tokens;   /* Lookahead tokens for parser. */
101   };
102
103 static struct lex_source *lex_source_create (struct lex_reader *);
104 static void lex_source_destroy (struct lex_source *);
105
106 /* Lexer. */
107 struct lexer
108   {
109     struct ll_list sources;     /* Contains "struct lex_source"s. */
110   };
111
112 static struct lex_source *lex_source__ (const struct lexer *);
113 static const struct lex_token *lex_next__ (const struct lexer *, int n);
114 static void lex_source_push_endcmd__ (struct lex_source *);
115
116 static void lex_source_pop__ (struct lex_source *);
117 static bool lex_source_get__ (const struct lex_source *);
118 static void lex_source_error_valist (struct lex_source *, int n0, int n1,
119                                      const char *format, va_list)
120    PRINTF_FORMAT (4, 0);
121 static const struct lex_token *lex_source_next__ (const struct lex_source *,
122                                                   int n);
123 \f
124 /* Initializes READER with the specified CLASS and otherwise some reasonable
125    defaults.  The caller should fill in the others members as desired. */
126 void
127 lex_reader_init (struct lex_reader *reader,
128                  const struct lex_reader_class *class)
129 {
130   reader->class = class;
131   reader->syntax = LEX_SYNTAX_AUTO;
132   reader->error = LEX_ERROR_INTERACTIVE;
133   reader->file_name = NULL;
134   reader->line_number = 0;
135 }
136
137 /* Frees any file name already in READER and replaces it by a copy of
138    FILE_NAME, or if FILE_NAME is null then clears any existing name. */
139 void
140 lex_reader_set_file_name (struct lex_reader *reader, const char *file_name)
141 {
142   free (reader->file_name);
143   reader->file_name = file_name != NULL ? xstrdup (file_name) : NULL;
144 }
145 \f
146 /* Creates and returns a new lexer. */
147 struct lexer *
148 lex_create (void)
149 {
150   struct lexer *lexer = xzalloc (sizeof *lexer);
151   ll_init (&lexer->sources);
152   return lexer;
153 }
154
155 /* Destroys LEXER. */
156 void
157 lex_destroy (struct lexer *lexer)
158 {
159   if (lexer != NULL)
160     {
161       struct lex_source *source, *next;
162
163       ll_for_each_safe (source, next, struct lex_source, ll, &lexer->sources)
164         lex_source_destroy (source);
165       free (lexer);
166     }
167 }
168
169 /* Inserts READER into LEXER so that the next token read by LEXER comes from
170    READER.  Before the caller, LEXER must either be empty or at a T_ENDCMD
171    token. */
172 void
173 lex_include (struct lexer *lexer, struct lex_reader *reader)
174 {
175   assert (ll_is_empty (&lexer->sources) || lex_token (lexer) == T_ENDCMD);
176   ll_push_head (&lexer->sources, &lex_source_create (reader)->ll);
177 }
178
179 /* Appends READER to LEXER, so that it will be read after all other current
180    readers have already been read. */
181 void
182 lex_append (struct lexer *lexer, struct lex_reader *reader)
183 {
184   ll_push_tail (&lexer->sources, &lex_source_create (reader)->ll);
185 }
186 \f
187 /* Advacning. */
188
189 static struct lex_token *
190 lex_push_token__ (struct lex_source *src)
191 {
192   struct lex_token *token;
193
194   if (deque_is_full (&src->deque))
195     src->tokens = deque_expand (&src->deque, src->tokens, sizeof *src->tokens);
196
197   token = &src->tokens[deque_push_front (&src->deque)];
198   token_init (&token->token);
199   return token;
200 }
201
202 static void
203 lex_source_pop__ (struct lex_source *src)
204 {
205   token_destroy (&src->tokens[deque_pop_back (&src->deque)].token);
206 }
207
208 static void
209 lex_source_pop_front (struct lex_source *src)
210 {
211   token_destroy (&src->tokens[deque_pop_front (&src->deque)].token);
212 }
213
214 /* Advances LEXER to the next token, consuming the current token. */
215 void
216 lex_get (struct lexer *lexer)
217 {
218   struct lex_source *src;
219
220   src = lex_source__ (lexer);
221   if (src == NULL)
222     return;
223
224   if (!deque_is_empty (&src->deque))
225     lex_source_pop__ (src);
226
227   while (deque_is_empty (&src->deque))
228     if (!lex_source_get__ (src))
229       {
230         lex_source_destroy (src);
231         src = lex_source__ (lexer);
232         if (src == NULL)
233           return;
234       }
235 }
236 \f
237 /* Issuing errors. */
238
239 /* Prints a syntax error message containing the current token and
240    given message MESSAGE (if non-null). */
241 void
242 lex_error (struct lexer *lexer, const char *format, ...)
243 {
244   va_list args;
245
246   va_start (args, format);
247   lex_next_error_valist (lexer, 0, 0, format, args);
248   va_end (args);
249 }
250
251 /* Prints a syntax error message containing the current token and
252    given message MESSAGE (if non-null). */
253 void
254 lex_error_valist (struct lexer *lexer, const char *format, va_list args)
255 {
256   lex_next_error_valist (lexer, 0, 0, format, args);
257 }
258
259 /* Prints a syntax error message containing the current token and
260    given message MESSAGE (if non-null). */
261 void
262 lex_next_error (struct lexer *lexer, int n0, int n1, const char *format, ...)
263 {
264   va_list args;
265
266   va_start (args, format);
267   lex_next_error_valist (lexer, n0, n1, format, args);
268   va_end (args);
269 }
270
271 /* Prints a syntax error message saying that OPTION0 or one of the other
272    strings following it, up to the first NULL, is expected. */
273 void
274 lex_error_expecting (struct lexer *lexer, const char *option0, ...)
275 {
276   enum { MAX_OPTIONS = 8 };
277   const char *options[MAX_OPTIONS + 1];
278   va_list args;
279   int n;
280
281   va_start (args, option0);
282   options[0] = option0;
283   n = 0;
284   while (n + 1 < MAX_OPTIONS && options[n] != NULL)
285     options[++n] = va_arg (args, const char *);
286   va_end (args);
287
288   switch (n)
289     {
290     case 0:
291       lex_error (lexer, NULL);
292       break;
293
294     case 1:
295       lex_error (lexer, _("expecting %s"), options[0]);
296       break;
297
298     case 2:
299       lex_error (lexer, _("expecting %s or %s"), options[0], options[1]);
300       break;
301
302     case 3:
303       lex_error (lexer, _("expecting %s, %s, or %s"), options[0], options[1],
304                  options[2]);
305       break;
306
307     case 4:
308       lex_error (lexer, _("expecting %s, %s, %s, or %s"),
309                  options[0], options[1], options[2], options[3]);
310       break;
311
312     case 5:
313       lex_error (lexer, _("expecting %s, %s, %s, %s, or %s"),
314                  options[0], options[1], options[2], options[3], options[4]);
315       break;
316
317     case 6:
318       lex_error (lexer, _("expecting %s, %s, %s, %s, %s, or %s"),
319                  options[0], options[1], options[2], options[3], options[4],
320                  options[5]);
321       break;
322
323     case 7:
324       lex_error (lexer, _("expecting %s, %s, %s, %s, %s, %s, or %s"),
325                  options[0], options[1], options[2], options[3], options[4],
326                  options[5], options[6]);
327       break;
328
329     case 8:
330       lex_error (lexer, _("expecting %s, %s, %s, %s, %s, %s, %s, or %s"),
331                  options[0], options[1], options[2], options[3], options[4],
332                  options[5], options[6], options[7]);
333       break;
334
335     default:
336       NOT_REACHED ();
337     }
338 }
339
340 /* Reports an error to the effect that subcommand SBC may only be specified
341    once.
342
343    This function does not take a lexer as an argument or use lex_error(),
344    because the result would ordinarily just be redundant: "Syntax error at
345    SUBCOMMAND: Subcommand SUBCOMMAND may only be specified once.", which does
346    not help the user find the error. */
347 void
348 lex_sbc_only_once (const char *sbc)
349 {
350   msg (SE, _("Subcommand %s may only be specified once."), sbc);
351 }
352
353 /* Reports an error to the effect that subcommand SBC is missing.
354
355    This function does not take a lexer as an argument or use lex_error(),
356    because a missing subcommand can normally be detected only after the whole
357    command has been parsed, and so lex_error() would always report "Syntax
358    error at end of command", which does not help the user find the error. */
359 void
360 lex_sbc_missing (const char *sbc)
361 {
362   msg (SE, _("Required subcommand %s was not specified."), sbc);
363 }
364
365 /* Reports an error to the effect that specification SPEC may only be specified
366    once within subcommand SBC. */
367 void
368 lex_spec_only_once (struct lexer *lexer, const char *sbc, const char *spec)
369 {
370   lex_error (lexer, _("%s may only be specified once within subcommand %s"),
371              spec, sbc);
372 }
373
374 /* Reports an error to the effect that specification SPEC is missing within
375    subcommand SBC. */
376 void
377 lex_spec_missing (struct lexer *lexer, const char *sbc, const char *spec)
378 {
379   lex_error (lexer, _("Required %s specification missing from %s subcommand"),
380              sbc, spec);
381 }
382
383 /* Prints a syntax error message containing the current token and
384    given message MESSAGE (if non-null). */
385 void
386 lex_next_error_valist (struct lexer *lexer, int n0, int n1,
387                        const char *format, va_list args)
388 {
389   struct lex_source *src = lex_source__ (lexer);
390
391   if (src != NULL)
392     lex_source_error_valist (src, n0, n1, format, args);
393   else
394     {
395       struct string s;
396
397       ds_init_empty (&s);
398       ds_put_format (&s, _("Syntax error at end of input"));
399       if (format != NULL)
400         {
401           ds_put_cstr (&s, ": ");
402           ds_put_vformat (&s, format, args);
403         }
404       ds_put_byte (&s, '.');
405       msg (SE, "%s", ds_cstr (&s));
406       ds_destroy (&s);
407     }
408 }
409
410 /* Checks that we're at end of command.
411    If so, returns a successful command completion code.
412    If not, flags a syntax error and returns an error command
413    completion code. */
414 int
415 lex_end_of_command (struct lexer *lexer)
416 {
417   if (lex_token (lexer) != T_ENDCMD && lex_token (lexer) != T_STOP)
418     {
419       lex_error (lexer, _("expecting end of command"));
420       return CMD_FAILURE;
421     }
422   else
423     return CMD_SUCCESS;
424 }
425 \f
426 /* Token testing functions. */
427
428 /* Returns true if the current token is a number. */
429 bool
430 lex_is_number (struct lexer *lexer)
431 {
432   return lex_next_is_number (lexer, 0);
433 }
434
435 /* Returns true if the current token is a string. */
436 bool
437 lex_is_string (struct lexer *lexer)
438 {
439   return lex_next_is_string (lexer, 0);
440 }
441
442 /* Returns the value of the current token, which must be a
443    floating point number. */
444 double
445 lex_number (struct lexer *lexer)
446 {
447   return lex_next_number (lexer, 0);
448 }
449
450 /* Returns true iff the current token is an integer. */
451 bool
452 lex_is_integer (struct lexer *lexer)
453 {
454   return lex_next_is_integer (lexer, 0);
455 }
456
457 /* Returns the value of the current token, which must be an
458    integer. */
459 long
460 lex_integer (struct lexer *lexer)
461 {
462   return lex_next_integer (lexer, 0);
463 }
464 \f
465 /* Token testing functions with lookahead.
466
467    A value of 0 for N as an argument to any of these functions refers to the
468    current token.  Lookahead is limited to the current command.  Any N greater
469    than the number of tokens remaining in the current command will be treated
470    as referring to a T_ENDCMD token. */
471
472 /* Returns true if the token N ahead of the current token is a number. */
473 bool
474 lex_next_is_number (struct lexer *lexer, int n)
475 {
476   enum token_type next_token = lex_next_token (lexer, n);
477   return next_token == T_POS_NUM || next_token == T_NEG_NUM;
478 }
479
480 /* Returns true if the token N ahead of the current token is a string. */
481 bool
482 lex_next_is_string (struct lexer *lexer, int n)
483 {
484   return lex_next_token (lexer, n) == T_STRING;
485 }
486
487 /* Returns the value of the token N ahead of the current token, which must be a
488    floating point number. */
489 double
490 lex_next_number (struct lexer *lexer, int n)
491 {
492   assert (lex_next_is_number (lexer, n));
493   return lex_next_tokval (lexer, n);
494 }
495
496 /* Returns true if the token N ahead of the current token is an integer. */
497 bool
498 lex_next_is_integer (struct lexer *lexer, int n)
499 {
500   double value;
501
502   if (!lex_next_is_number (lexer, n))
503     return false;
504
505   value = lex_next_tokval (lexer, n);
506   return value > LONG_MIN && value <= LONG_MAX && floor (value) == value;
507 }
508
509 /* Returns the value of the token N ahead of the current token, which must be
510    an integer. */
511 long
512 lex_next_integer (struct lexer *lexer, int n)
513 {
514   assert (lex_next_is_integer (lexer, n));
515   return lex_next_tokval (lexer, n);
516 }
517 \f
518 /* Token matching functions. */
519
520 /* If the current token has the specified TYPE, skips it and returns true.
521    Otherwise, returns false. */
522 bool
523 lex_match (struct lexer *lexer, enum token_type type)
524 {
525   if (lex_token (lexer) == type)
526     {
527       lex_get (lexer);
528       return true;
529     }
530   else
531     return false;
532 }
533
534 /* If the current token matches IDENTIFIER, skips it and returns true.
535    IDENTIFIER may be abbreviated to its first three letters.  Otherwise,
536    returns false.
537
538    IDENTIFIER must be an ASCII string. */
539 bool
540 lex_match_id (struct lexer *lexer, const char *identifier)
541 {
542   return lex_match_id_n (lexer, identifier, 3);
543 }
544
545 /* If the current token is IDENTIFIER, skips it and returns true.  IDENTIFIER
546    may be abbreviated to its first N letters.  Otherwise, returns false.
547
548    IDENTIFIER must be an ASCII string. */
549 bool
550 lex_match_id_n (struct lexer *lexer, const char *identifier, size_t n)
551 {
552   if (lex_token (lexer) == T_ID
553       && lex_id_match_n (ss_cstr (identifier), lex_tokss (lexer), n))
554     {
555       lex_get (lexer);
556       return true;
557     }
558   else
559     return false;
560 }
561
562 /* If the current token is integer X, skips it and returns true.  Otherwise,
563    returns false. */
564 bool
565 lex_match_int (struct lexer *lexer, int x)
566 {
567   if (lex_is_integer (lexer) && lex_integer (lexer) == x)
568     {
569       lex_get (lexer);
570       return true;
571     }
572   else
573     return false;
574 }
575 \f
576 /* Forced matches. */
577
578 /* If this token is IDENTIFIER, skips it and returns true.  IDENTIFIER may be
579    abbreviated to its first 3 letters.  Otherwise, reports an error and returns
580    false.
581
582    IDENTIFIER must be an ASCII string. */
583 bool
584 lex_force_match_id (struct lexer *lexer, const char *identifier)
585 {
586   if (lex_match_id (lexer, identifier))
587     return true;
588   else
589     {
590       lex_error_expecting (lexer, identifier, NULL_SENTINEL);
591       return false;
592     }
593 }
594
595 /* If the current token has the specified TYPE, skips it and returns true.
596    Otherwise, reports an error and returns false. */
597 bool
598 lex_force_match (struct lexer *lexer, enum token_type type)
599 {
600   if (lex_token (lexer) == type)
601     {
602       lex_get (lexer);
603       return true;
604     }
605   else
606     {
607       char *s = xasprintf ("`%s'", token_type_to_string (type));
608       lex_error_expecting (lexer, s, NULL_SENTINEL);
609       free (s);
610       return false;
611     }
612 }
613
614 /* If the current token is a string, does nothing and returns true.
615    Otherwise, reports an error and returns false. */
616 bool
617 lex_force_string (struct lexer *lexer)
618 {
619   if (lex_is_string (lexer))
620     return true;
621   else
622     {
623       lex_error (lexer, _("expecting string"));
624       return false;
625     }
626 }
627
628 /* If the current token is a string or an identifier, does nothing and returns
629    true.  Otherwise, reports an error and returns false.
630
631    This is meant for use in syntactic situations where we want to encourage the
632    user to supply a quoted string, but for compatibility we also accept
633    identifiers.  (One example of such a situation is file names.)  Therefore,
634    the error message issued when the current token is wrong only says that a
635    string is expected and doesn't mention that an identifier would also be
636    accepted. */
637 bool
638 lex_force_string_or_id (struct lexer *lexer)
639 {
640   return lex_is_integer (lexer) || lex_force_string (lexer);
641 }
642
643 /* If the current token is an integer, does nothing and returns true.
644    Otherwise, reports an error and returns false. */
645 bool
646 lex_force_int (struct lexer *lexer)
647 {
648   if (lex_is_integer (lexer))
649     return true;
650   else
651     {
652       lex_error (lexer, _("expecting integer"));
653       return false;
654     }
655 }
656
657 /* If the current token is a number, does nothing and returns true.
658    Otherwise, reports an error and returns false. */
659 bool
660 lex_force_num (struct lexer *lexer)
661 {
662   if (lex_is_number (lexer))
663     return true;
664
665   lex_error (lexer, _("expecting number"));
666   return false;
667 }
668
669 /* If the current token is an identifier, does nothing and returns true.
670    Otherwise, reports an error and returns false. */
671 bool
672 lex_force_id (struct lexer *lexer)
673 {
674   if (lex_token (lexer) == T_ID)
675     return true;
676
677   lex_error (lexer, _("expecting identifier"));
678   return false;
679 }
680 \f
681 /* Token accessors. */
682
683 /* Returns the type of LEXER's current token. */
684 enum token_type
685 lex_token (const struct lexer *lexer)
686 {
687   return lex_next_token (lexer, 0);
688 }
689
690 /* Returns the number in LEXER's current token.
691
692    Only T_NEG_NUM and T_POS_NUM tokens have meaningful values.  For other
693    tokens this function will always return zero. */
694 double
695 lex_tokval (const struct lexer *lexer)
696 {
697   return lex_next_tokval (lexer, 0);
698 }
699
700 /* Returns the null-terminated string in LEXER's current token, UTF-8 encoded.
701
702    Only T_ID and T_STRING tokens have meaningful strings.  For other tokens
703    this functions this function will always return NULL.
704
705    The UTF-8 encoding of the returned string is correct for variable names and
706    other identifiers.  Use filename_to_utf8() to use it as a filename.  Use
707    data_in() to use it in a "union value".  */
708 const char *
709 lex_tokcstr (const struct lexer *lexer)
710 {
711   return lex_next_tokcstr (lexer, 0);
712 }
713
714 /* Returns the string in LEXER's current token, UTF-8 encoded.  The string is
715    null-terminated (but the null terminator is not included in the returned
716    substring's 'length').
717
718    Only T_ID and T_STRING tokens have meaningful strings.  For other tokens
719    this functions this function will always return NULL.
720
721    The UTF-8 encoding of the returned string is correct for variable names and
722    other identifiers.  Use filename_to_utf8() to use it as a filename.  Use
723    data_in() to use it in a "union value".  */
724 struct substring
725 lex_tokss (const struct lexer *lexer)
726 {
727   return lex_next_tokss (lexer, 0);
728 }
729 \f
730 /* Looking ahead.
731
732    A value of 0 for N as an argument to any of these functions refers to the
733    current token.  Lookahead is limited to the current command.  Any N greater
734    than the number of tokens remaining in the current command will be treated
735    as referring to a T_ENDCMD token. */
736
737 static const struct lex_token *
738 lex_next__ (const struct lexer *lexer_, int n)
739 {
740   struct lexer *lexer = CONST_CAST (struct lexer *, lexer_);
741   struct lex_source *src = lex_source__ (lexer);
742
743   if (src != NULL)
744     return lex_source_next__ (src, n);
745   else
746     {
747       static const struct lex_token stop_token =
748         { TOKEN_INITIALIZER (T_STOP, 0.0, ""), 0, 0, 0, 0 };
749
750       return &stop_token;
751     }
752 }
753
754 static const struct lex_token *
755 lex_source_next__ (const struct lex_source *src, int n)
756 {
757   while (deque_count (&src->deque) <= n)
758     {
759       if (!deque_is_empty (&src->deque))
760         {
761           struct lex_token *front;
762
763           front = &src->tokens[deque_front (&src->deque, 0)];
764           if (front->token.type == T_STOP || front->token.type == T_ENDCMD)
765             return front;
766         }
767
768       lex_source_get__ (src);
769     }
770
771   return &src->tokens[deque_back (&src->deque, n)];
772 }
773
774 /* Returns the "struct token" of the token N after the current one in LEXER.
775    The returned pointer can be invalidated by pretty much any succeeding call
776    into the lexer, although the string pointer within the returned token is
777    only invalidated by consuming the token (e.g. with lex_get()). */
778 const struct token *
779 lex_next (const struct lexer *lexer, int n)
780 {
781   return &lex_next__ (lexer, n)->token;
782 }
783
784 /* Returns the type of the token N after the current one in LEXER. */
785 enum token_type
786 lex_next_token (const struct lexer *lexer, int n)
787 {
788   return lex_next (lexer, n)->type;
789 }
790
791 /* Returns the number in the tokn N after the current one in LEXER.
792
793    Only T_NEG_NUM and T_POS_NUM tokens have meaningful values.  For other
794    tokens this function will always return zero. */
795 double
796 lex_next_tokval (const struct lexer *lexer, int n)
797 {
798   const struct token *token = lex_next (lexer, n);
799   return token->number;
800 }
801
802 /* Returns the null-terminated string in the token N after the current one, in
803    UTF-8 encoding.
804
805    Only T_ID and T_STRING tokens have meaningful strings.  For other tokens
806    this functions this function will always return NULL.
807
808    The UTF-8 encoding of the returned string is correct for variable names and
809    other identifiers.  Use filename_to_utf8() to use it as a filename.  Use
810    data_in() to use it in a "union value".  */
811 const char *
812 lex_next_tokcstr (const struct lexer *lexer, int n)
813 {
814   return lex_next_tokss (lexer, n).string;
815 }
816
817 /* Returns the string in the token N after the current one, in UTF-8 encoding.
818    The string is null-terminated (but the null terminator is not included in
819    the returned substring's 'length').
820
821    Only T_ID and T_STRING tokens have meaningful strings.  For other tokens
822    this functions this function will always return NULL.
823
824    The UTF-8 encoding of the returned string is correct for variable names and
825    other identifiers.  Use filename_to_utf8() to use it as a filename.  Use
826    data_in() to use it in a "union value".  */
827 struct substring
828 lex_next_tokss (const struct lexer *lexer, int n)
829 {
830   return lex_next (lexer, n)->string;
831 }
832
833 /* If LEXER is positioned at the (pseudo)identifier S, skips it and returns
834    true.  Otherwise, returns false.
835
836    S may consist of an arbitrary number of identifiers, integers, and
837    punctuation e.g. "KRUSKAL-WALLIS", "2SLS", or "END INPUT PROGRAM".
838    Identifiers may be abbreviated to their first three letters.  Currently only
839    hyphens, slashes, and equals signs are supported as punctuation (but it
840    would be easy to add more).
841
842    S must be an ASCII string. */
843 bool
844 lex_match_phrase (struct lexer *lexer, const char *s)
845 {
846   int tok_idx;
847
848   for (tok_idx = 0; ; tok_idx++)
849     {
850       enum token_type token;
851       unsigned char c;
852
853       while (c_isspace (*s))
854         s++;
855
856       c = *s;
857       if (c == '\0')
858         {
859           int i;
860
861           for (i = 0; i < tok_idx; i++)
862             lex_get (lexer);
863           return true;
864         }
865
866       token = lex_next_token (lexer, tok_idx);
867       switch (c)
868         {
869         case '-':
870           if (token != T_DASH)
871             return false;
872           s++;
873           break;
874
875         case '/':
876           if (token != T_SLASH)
877             return false;
878           s++;
879           break;
880
881         case '=':
882           if (token != T_EQUALS)
883             return false;
884           s++;
885           break;
886
887         case '0': case '1': case '2': case '3': case '4':
888         case '5': case '6': case '7': case '8': case '9':
889           {
890             unsigned int value;
891
892             if (token != T_POS_NUM)
893               return false;
894
895             value = 0;
896             do
897               {
898                 value = value * 10 + (*s++ - '0');
899               }
900             while (c_isdigit (*s));
901
902             if (lex_next_tokval (lexer, tok_idx) != value)
903               return false;
904           }
905           break;
906
907         default:
908           if (lex_is_id1 (c))
909             {
910               int len;
911
912               if (token != T_ID)
913                 return false;
914
915               len = lex_id_get_length (ss_cstr (s));
916               if (!lex_id_match (ss_buffer (s, len),
917                                  lex_next_tokss (lexer, tok_idx)))
918                 return false;
919
920               s += len;
921             }
922           else
923             NOT_REACHED ();
924         }
925     }
926 }
927
928 static int
929 lex_source_get_first_line_number (const struct lex_source *src, int n)
930 {
931   return lex_source_next__ (src, n)->first_line;
932 }
933
934 static int
935 count_newlines (char *s, size_t length)
936 {
937   int n_newlines = 0;
938   char *newline;
939
940   while ((newline = memchr (s, '\n', length)) != NULL)
941     {
942       n_newlines++;
943       length -= (newline + 1) - s;
944       s = newline + 1;
945     }
946
947   return n_newlines;
948 }
949
950 static int
951 lex_source_get_last_line_number (const struct lex_source *src, int n)
952 {
953   const struct lex_token *token = lex_source_next__ (src, n);
954
955   if (token->first_line == 0)
956     return 0;
957   else
958     {
959       char *token_str = &src->buffer[token->token_pos - src->tail];
960       return token->first_line + count_newlines (token_str, token->token_len) + 1;
961     }
962 }
963
964 static int
965 count_columns (const char *s_, size_t length)
966 {
967   const uint8_t *s = CHAR_CAST (const uint8_t *, s_);
968   int columns;
969   size_t ofs;
970   int mblen;
971
972   columns = 0;
973   for (ofs = 0; ofs < length; ofs += mblen)
974     {
975       ucs4_t uc;
976
977       mblen = u8_mbtouc (&uc, s + ofs, length - ofs);
978       if (uc != '\t')
979         {
980           int width = uc_width (uc, "UTF-8");
981           if (width > 0)
982             columns += width;
983         }
984       else
985         columns = ROUND_UP (columns + 1, 8);
986     }
987
988   return columns + 1;
989 }
990
991 static int
992 lex_source_get_first_column (const struct lex_source *src, int n)
993 {
994   const struct lex_token *token = lex_source_next__ (src, n);
995   return count_columns (&src->buffer[token->line_pos - src->tail],
996                         token->token_pos - token->line_pos);
997 }
998
999 static int
1000 lex_source_get_last_column (const struct lex_source *src, int n)
1001 {
1002   const struct lex_token *token = lex_source_next__ (src, n);
1003   char *start, *end, *newline;
1004
1005   start = &src->buffer[token->line_pos - src->tail];
1006   end = &src->buffer[(token->token_pos + token->token_len) - src->tail];
1007   newline = memrchr (start, '\n', end - start);
1008   if (newline != NULL)
1009     start = newline + 1;
1010   return count_columns (start, end - start);
1011 }
1012
1013 /* Returns the 1-based line number of the start of the syntax that represents
1014    the token N after the current one in LEXER.  Returns 0 for a T_STOP token or
1015    if the token is drawn from a source that does not have line numbers. */
1016 int
1017 lex_get_first_line_number (const struct lexer *lexer, int n)
1018 {
1019   const struct lex_source *src = lex_source__ (lexer);
1020   return src != NULL ? lex_source_get_first_line_number (src, n) : 0;
1021 }
1022
1023 /* Returns the 1-based line number of the end of the syntax that represents the
1024    token N after the current one in LEXER, plus 1.  Returns 0 for a T_STOP
1025    token or if the token is drawn from a source that does not have line
1026    numbers.
1027
1028    Most of the time, a single token is wholly within a single line of syntax,
1029    but there are two exceptions: a T_STRING token can be made up of multiple
1030    segments on adjacent lines connected with "+" punctuators, and a T_NEG_NUM
1031    token can consist of a "-" on one line followed by the number on the next.
1032  */
1033 int
1034 lex_get_last_line_number (const struct lexer *lexer, int n)
1035 {
1036   const struct lex_source *src = lex_source__ (lexer);
1037   return src != NULL ? lex_source_get_last_line_number (src, n) : 0;
1038 }
1039
1040 /* Returns the 1-based column number of the start of the syntax that represents
1041    the token N after the current one in LEXER.  Returns 0 for a T_STOP
1042    token.
1043
1044    Column numbers are measured according to the width of characters as shown in
1045    a typical fixed-width font, in which CJK characters have width 2 and
1046    combining characters have width 0.  */
1047 int
1048 lex_get_first_column (const struct lexer *lexer, int n)
1049 {
1050   const struct lex_source *src = lex_source__ (lexer);
1051   return src != NULL ? lex_source_get_first_column (src, n) : 0;
1052 }
1053
1054 /* Returns the 1-based column number of the end of the syntax that represents
1055    the token N after the current one in LEXER, plus 1.  Returns 0 for a T_STOP
1056    token.
1057
1058    Column numbers are measured according to the width of characters as shown in
1059    a typical fixed-width font, in which CJK characters have width 2 and
1060    combining characters have width 0.  */
1061 int
1062 lex_get_last_column (const struct lexer *lexer, int n)
1063 {
1064   const struct lex_source *src = lex_source__ (lexer);
1065   return src != NULL ? lex_source_get_last_column (src, n) : 0;
1066 }
1067
1068 /* Returns the name of the syntax file from which the current command is drawn.
1069    Returns NULL for a T_STOP token or if the command's source does not have
1070    line numbers.
1071
1072    There is no version of this function that takes an N argument because
1073    lookahead only works to the end of a command and any given command is always
1074    within a single syntax file. */
1075 const char *
1076 lex_get_file_name (const struct lexer *lexer)
1077 {
1078   struct lex_source *src = lex_source__ (lexer);
1079   return src == NULL ? NULL : src->reader->file_name;
1080 }
1081
1082 /* Returns the syntax mode for the syntax file from which the current drawn is
1083    drawn.  Returns LEX_SYNTAX_AUTO for a T_STOP token or if the command's
1084    source does not have line numbers.
1085
1086    There is no version of this function that takes an N argument because
1087    lookahead only works to the end of a command and any given command is always
1088    within a single syntax file. */
1089 enum lex_syntax_mode
1090 lex_get_syntax_mode (const struct lexer *lexer)
1091 {
1092   struct lex_source *src = lex_source__ (lexer);
1093   return src == NULL ? LEX_SYNTAX_AUTO : src->reader->syntax;
1094 }
1095
1096 /* Returns the error mode for the syntax file from which the current drawn is
1097    drawn.  Returns LEX_ERROR_INTERACTIVE for a T_STOP token or if the command's
1098    source does not have line numbers.
1099
1100    There is no version of this function that takes an N argument because
1101    lookahead only works to the end of a command and any given command is always
1102    within a single syntax file. */
1103 enum lex_error_mode
1104 lex_get_error_mode (const struct lexer *lexer)
1105 {
1106   struct lex_source *src = lex_source__ (lexer);
1107   return src == NULL ? LEX_ERROR_INTERACTIVE : src->reader->error;
1108 }
1109
1110 /* If the source that LEXER is currently reading has error mode
1111    LEX_ERROR_INTERACTIVE, discards all buffered input and tokens, so that the
1112    next token to be read comes directly from whatever is next read from the
1113    stream.
1114
1115    It makes sense to call this function after encountering an error in a
1116    command entered on the console, because usually the user would prefer not to
1117    have cascading errors. */
1118 void
1119 lex_interactive_reset (struct lexer *lexer)
1120 {
1121   struct lex_source *src = lex_source__ (lexer);
1122   if (src != NULL && src->reader->error == LEX_ERROR_INTERACTIVE)
1123     {
1124       src->head = src->tail = 0;
1125       src->journal_pos = src->seg_pos = src->line_pos = 0;
1126       src->n_newlines = 0;
1127       src->suppress_next_newline = false;
1128       segmenter_init (&src->segmenter, segmenter_get_mode (&src->segmenter));
1129       while (!deque_is_empty (&src->deque))
1130         lex_source_pop__ (src);
1131       lex_source_push_endcmd__ (src);
1132     }
1133 }
1134
1135 /* Advances past any tokens in LEXER up to a T_ENDCMD or T_STOP. */
1136 void
1137 lex_discard_rest_of_command (struct lexer *lexer)
1138 {
1139   while (lex_token (lexer) != T_STOP && lex_token (lexer) != T_ENDCMD)
1140     lex_get (lexer);
1141 }
1142
1143 /* Discards all lookahead tokens in LEXER, then discards all input sources
1144    until it encounters one with error mode LEX_ERROR_INTERACTIVE or until it
1145    runs out of input sources. */
1146 void
1147 lex_discard_noninteractive (struct lexer *lexer)
1148 {
1149   struct lex_source *src = lex_source__ (lexer);
1150
1151   if (src != NULL)
1152     {
1153       while (!deque_is_empty (&src->deque))
1154         lex_source_pop__ (src);
1155
1156       for (; src != NULL && src->reader->error != LEX_ERROR_INTERACTIVE;
1157            src = lex_source__ (lexer))
1158         lex_source_destroy (src);
1159     }
1160 }
1161 \f
1162 static size_t
1163 lex_source_max_tail__ (const struct lex_source *src)
1164 {
1165   const struct lex_token *token;
1166   size_t max_tail;
1167
1168   assert (src->seg_pos >= src->line_pos);
1169   max_tail = MIN (src->journal_pos, src->line_pos);
1170
1171   /* Use the oldest token also.  (We know that src->deque cannot be empty
1172      because we are in the process of adding a new token, which is already
1173      initialized enough to use here.) */
1174   token = &src->tokens[deque_back (&src->deque, 0)];
1175   assert (token->token_pos >= token->line_pos);
1176   max_tail = MIN (max_tail, token->line_pos);
1177
1178   return max_tail;
1179 }
1180
1181 static void
1182 lex_source_expand__ (struct lex_source *src)
1183 {
1184   if (src->head - src->tail >= src->allocated)
1185     {
1186       size_t max_tail = lex_source_max_tail__ (src);
1187       if (max_tail > src->tail)
1188         {
1189           /* Advance the tail, freeing up room at the head. */
1190           memmove (src->buffer, src->buffer + (max_tail - src->tail),
1191                    src->head - max_tail);
1192           src->tail = max_tail;
1193         }
1194       else
1195         {
1196           /* Buffer is completely full.  Expand it. */
1197           src->buffer = x2realloc (src->buffer, &src->allocated);
1198         }
1199     }
1200   else
1201     {
1202       /* There's space available at the head of the buffer.  Nothing to do. */
1203     }
1204 }
1205
1206 static void
1207 lex_source_read__ (struct lex_source *src)
1208 {
1209   do
1210     {
1211       size_t head_ofs;
1212       size_t n;
1213
1214       lex_source_expand__ (src);
1215
1216       head_ofs = src->head - src->tail;
1217       n = src->reader->class->read (src->reader, &src->buffer[head_ofs],
1218                                     src->allocated - head_ofs,
1219                                     segmenter_get_prompt (&src->segmenter));
1220       if (n == 0)
1221         {
1222           /* End of input.
1223
1224              Ensure that the input always ends in a new-line followed by a null
1225              byte, as required by the segmenter library. */
1226
1227           if (src->head == src->tail
1228               || src->buffer[src->head - src->tail - 1] != '\n')
1229             src->buffer[src->head++ - src->tail] = '\n';
1230
1231           lex_source_expand__ (src);
1232           src->buffer[src->head++ - src->tail] = '\0';
1233
1234           return;
1235         }
1236
1237       src->head += n;
1238     }
1239   while (!memchr (&src->buffer[src->seg_pos - src->tail], '\n',
1240                   src->head - src->seg_pos));
1241 }
1242
1243 static struct lex_source *
1244 lex_source__ (const struct lexer *lexer)
1245 {
1246   return (ll_is_empty (&lexer->sources) ? NULL
1247           : ll_data (ll_head (&lexer->sources), struct lex_source, ll));
1248 }
1249
1250 static struct substring
1251 lex_source_get_syntax__ (const struct lex_source *src, int n0, int n1)
1252 {
1253   const struct lex_token *token0 = lex_source_next__ (src, n0);
1254   const struct lex_token *token1 = lex_source_next__ (src, MAX (n0, n1));
1255   size_t start = token0->token_pos;
1256   size_t end = token1->token_pos + token1->token_len;
1257
1258   return ss_buffer (&src->buffer[start - src->tail], end - start);
1259 }
1260
1261 static void
1262 lex_ellipsize__ (struct substring in, char *out, size_t out_size)
1263 {
1264   size_t out_maxlen;
1265   size_t out_len;
1266   int mblen;
1267
1268   assert (out_size >= 16);
1269   out_maxlen = out_size - (in.length >= out_size ? 3 : 0) - 1;
1270   for (out_len = 0; out_len < in.length; out_len += mblen)
1271     {
1272       if (in.string[out_len] == '\n'
1273           || (in.string[out_len] == '\r'
1274               && out_len + 1 < in.length
1275               && in.string[out_len + 1] == '\n'))
1276         break;
1277
1278       mblen = u8_mblen (CHAR_CAST (const uint8_t *, in.string + out_len),
1279                         in.length - out_len);
1280       if (out_len + mblen > out_maxlen)
1281         break;
1282     }
1283
1284   memcpy (out, in.string, out_len);
1285   strcpy (&out[out_len], out_len < in.length ? "..." : "");
1286 }
1287
1288 static void
1289 lex_source_error_valist (struct lex_source *src, int n0, int n1,
1290                          const char *format, va_list args)
1291 {
1292   const struct lex_token *token;
1293   struct string s;
1294   struct msg m;
1295
1296   ds_init_empty (&s);
1297
1298   token = lex_source_next__ (src, n0);
1299   if (token->token.type == T_ENDCMD)
1300     ds_put_cstr (&s, _("Syntax error at end of command"));
1301   else
1302     {
1303       struct substring syntax = lex_source_get_syntax__ (src, n0, n1);
1304       if (!ss_is_empty (syntax))
1305         {
1306           char syntax_cstr[64];
1307
1308           lex_ellipsize__ (syntax, syntax_cstr, sizeof syntax_cstr);
1309           ds_put_format (&s, _("Syntax error at `%s'"), syntax_cstr);
1310         }
1311       else
1312         ds_put_cstr (&s, _("Syntax error"));
1313     }
1314
1315   if (format)
1316     {
1317       ds_put_cstr (&s, ": ");
1318       ds_put_vformat (&s, format, args);
1319     }
1320   ds_put_byte (&s, '.');
1321
1322   m.category = MSG_C_SYNTAX;
1323   m.severity = MSG_S_ERROR;
1324   m.file_name = src->reader->file_name;
1325   m.first_line = lex_source_get_first_line_number (src, n0);
1326   m.last_line = lex_source_get_last_line_number (src, n1);
1327   m.first_column = lex_source_get_first_column (src, n0);
1328   m.last_column = lex_source_get_last_column (src, n1);
1329   m.text = ds_steal_cstr (&s);
1330   msg_emit (&m);
1331 }
1332
1333 static void PRINTF_FORMAT (2, 3)
1334 lex_get_error (struct lex_source *src, const char *format, ...)
1335 {
1336   va_list args;
1337   int n;
1338
1339   va_start (args, format);
1340
1341   n = deque_count (&src->deque) - 1;
1342   lex_source_error_valist (src, n, n, format, args);
1343   lex_source_pop_front (src);
1344
1345   va_end (args);
1346 }
1347
1348 static bool
1349 lex_source_get__ (const struct lex_source *src_)
1350 {
1351   struct lex_source *src = CONST_CAST (struct lex_source *, src_);
1352
1353   struct state
1354     {
1355       struct segmenter segmenter;
1356       enum segment_type last_segment;
1357       int newlines;
1358       size_t line_pos;
1359       size_t seg_pos;
1360     };
1361
1362   struct state state, saved;
1363   enum scan_result result;
1364   struct scanner scanner;
1365   struct lex_token *token;
1366   int n_lines;
1367   int i;
1368
1369   if (src->eof)
1370     return false;
1371
1372   state.segmenter = src->segmenter;
1373   state.newlines = 0;
1374   state.seg_pos = src->seg_pos;
1375   state.line_pos = src->line_pos;
1376   saved = state;
1377
1378   token = lex_push_token__ (src);
1379   scanner_init (&scanner, &token->token);
1380   token->line_pos = src->line_pos;
1381   token->token_pos = src->seg_pos;
1382   if (src->reader->line_number > 0)
1383     token->first_line = src->reader->line_number + src->n_newlines;
1384   else
1385     token->first_line = 0;
1386
1387   for (;;)
1388     {
1389       enum segment_type type;
1390       const char *segment;
1391       size_t seg_maxlen;
1392       int seg_len;
1393
1394       segment = &src->buffer[state.seg_pos - src->tail];
1395       seg_maxlen = src->head - state.seg_pos;
1396       seg_len = segmenter_push (&state.segmenter, segment, seg_maxlen, &type);
1397       if (seg_len < 0)
1398         {
1399           lex_source_read__ (src);
1400           continue;
1401         }
1402
1403       state.last_segment = type;
1404       state.seg_pos += seg_len;
1405       if (type == SEG_NEWLINE)
1406         {
1407           state.newlines++;
1408           state.line_pos = state.seg_pos;
1409         }
1410
1411       result = scanner_push (&scanner, type, ss_buffer (segment, seg_len),
1412                              &token->token);
1413       if (result == SCAN_SAVE)
1414         saved = state;
1415       else if (result == SCAN_BACK)
1416         {
1417           state = saved;
1418           break;
1419         }
1420       else if (result == SCAN_DONE)
1421         break;
1422     }
1423
1424   n_lines = state.newlines;
1425   if (state.last_segment == SEG_END_COMMAND && !src->suppress_next_newline)
1426     {
1427       n_lines++;
1428       src->suppress_next_newline = true;
1429     }
1430   else if (n_lines > 0 && src->suppress_next_newline)
1431     {
1432       n_lines--;
1433       src->suppress_next_newline = false;
1434     }
1435   for (i = 0; i < n_lines; i++)
1436     {
1437       const char *newline;
1438       const char *line;
1439       size_t line_len;
1440       char *syntax;
1441
1442       line = &src->buffer[src->journal_pos - src->tail];
1443       newline = rawmemchr (line, '\n');
1444       line_len = newline - line;
1445       if (line_len > 0 && line[line_len - 1] == '\r')
1446         line_len--;
1447
1448       syntax = malloc (line_len + 2);
1449       memcpy (syntax, line, line_len);
1450       syntax[line_len] = '\n';
1451       syntax[line_len + 1] = '\0';
1452
1453       text_item_submit (text_item_create_nocopy (TEXT_ITEM_SYNTAX, syntax));
1454
1455       src->journal_pos += newline - line + 1;
1456     }
1457
1458   token->token_len = state.seg_pos - src->seg_pos;
1459
1460   src->segmenter = state.segmenter;
1461   src->seg_pos = state.seg_pos;
1462   src->line_pos = state.line_pos;
1463   src->n_newlines += state.newlines;
1464
1465   switch (token->token.type)
1466     {
1467     default:
1468       break;
1469
1470     case T_STOP:
1471       token->token.type = T_ENDCMD;
1472       src->eof = true;
1473       break;
1474
1475     case SCAN_BAD_HEX_LENGTH:
1476       lex_get_error (src, _("String of hex digits has %d characters, which "
1477                             "is not a multiple of 2"),
1478                      (int) token->token.number);
1479       break;
1480
1481     case SCAN_BAD_HEX_DIGIT:
1482     case SCAN_BAD_UNICODE_DIGIT:
1483       lex_get_error (src, _("`%c' is not a valid hex digit"),
1484                      (int) token->token.number);
1485       break;
1486
1487     case SCAN_BAD_UNICODE_LENGTH:
1488       lex_get_error (src, _("Unicode string contains %d bytes, which is "
1489                             "not in the valid range of 1 to 8 bytes"),
1490                      (int) token->token.number);
1491       break;
1492
1493     case SCAN_BAD_UNICODE_CODE_POINT:
1494       lex_get_error (src, _("U+%04X is not a valid Unicode code point"),
1495                      (int) token->token.number);
1496       break;
1497
1498     case SCAN_EXPECTED_QUOTE:
1499       lex_get_error (src, _("Unterminated string constant"));
1500       break;
1501
1502     case SCAN_EXPECTED_EXPONENT:
1503       lex_get_error (src, _("Missing exponent following `%s'"),
1504                      token->token.string.string);
1505       break;
1506
1507     case SCAN_UNEXPECTED_DOT:
1508       lex_get_error (src, _("Unexpected `.' in middle of command"));
1509       break;
1510
1511     case SCAN_UNEXPECTED_CHAR:
1512       {
1513         char c_name[16];
1514         lex_get_error (src, _("Bad character %s in input"),
1515                        uc_name (token->token.number, c_name));
1516       }
1517       break;
1518
1519     case SCAN_SKIP:
1520       lex_source_pop_front (src);
1521       break;
1522     }
1523
1524   return true;
1525 }
1526 \f
1527 static void
1528 lex_source_push_endcmd__ (struct lex_source *src)
1529 {
1530   struct lex_token *token = lex_push_token__ (src);
1531   token->token.type = T_ENDCMD;
1532   token->token_pos = 0;
1533   token->token_len = 0;
1534   token->line_pos = 0;
1535   token->first_line = 0;
1536 }
1537
1538 static struct lex_source *
1539 lex_source_create (struct lex_reader *reader)
1540 {
1541   struct lex_source *src;
1542   enum segmenter_mode mode;
1543
1544   src = xzalloc (sizeof *src);
1545   src->reader = reader;
1546
1547   if (reader->syntax == LEX_SYNTAX_AUTO)
1548     mode = SEG_MODE_AUTO;
1549   else if (reader->syntax == LEX_SYNTAX_INTERACTIVE)
1550     mode = SEG_MODE_INTERACTIVE;
1551   else if (reader->syntax == LEX_SYNTAX_BATCH)
1552     mode = SEG_MODE_BATCH;
1553   else
1554     NOT_REACHED ();
1555   segmenter_init (&src->segmenter, mode);
1556
1557   src->tokens = deque_init (&src->deque, 4, sizeof *src->tokens);
1558
1559   lex_source_push_endcmd__ (src);
1560
1561   return src;
1562 }
1563
1564 static void
1565 lex_source_destroy (struct lex_source *src)
1566 {
1567   char *file_name = src->reader->file_name;
1568   if (src->reader->class->destroy != NULL)
1569     src->reader->class->destroy (src->reader);
1570   free (file_name);
1571   free (src->buffer);
1572   while (!deque_is_empty (&src->deque))
1573     lex_source_pop__ (src);
1574   free (src->tokens);
1575   ll_remove (&src->ll);
1576   free (src);
1577 }
1578 \f
1579 struct lex_file_reader
1580   {
1581     struct lex_reader reader;
1582     struct u8_istream *istream;
1583     char *file_name;
1584   };
1585
1586 static struct lex_reader_class lex_file_reader_class;
1587
1588 /* Creates and returns a new lex_reader that will read from file FILE_NAME (or
1589    from stdin if FILE_NAME is "-").  The file is expected to be encoded with
1590    ENCODING, which should take one of the forms accepted by
1591    u8_istream_for_file().  SYNTAX and ERROR become the syntax mode and error
1592    mode of the new reader, respectively.
1593
1594    Returns a null pointer if FILE_NAME cannot be opened. */
1595 struct lex_reader *
1596 lex_reader_for_file (const char *file_name, const char *encoding,
1597                      enum lex_syntax_mode syntax,
1598                      enum lex_error_mode error)
1599 {
1600   struct lex_file_reader *r;
1601   struct u8_istream *istream;
1602
1603   istream = (!strcmp(file_name, "-")
1604              ? u8_istream_for_fd (encoding, STDIN_FILENO)
1605              : u8_istream_for_file (encoding, file_name, O_RDONLY));
1606   if (istream == NULL)
1607     {
1608       msg (ME, _("Opening `%s': %s."), file_name, strerror (errno));
1609       return NULL;
1610     }
1611
1612   r = xmalloc (sizeof *r);
1613   lex_reader_init (&r->reader, &lex_file_reader_class);
1614   r->reader.syntax = syntax;
1615   r->reader.error = error;
1616   r->reader.file_name = xstrdup (file_name);
1617   r->reader.line_number = 1;
1618   r->istream = istream;
1619   r->file_name = xstrdup (file_name);
1620
1621   return &r->reader;
1622 }
1623
1624 static struct lex_file_reader *
1625 lex_file_reader_cast (struct lex_reader *r)
1626 {
1627   return UP_CAST (r, struct lex_file_reader, reader);
1628 }
1629
1630 static size_t
1631 lex_file_read (struct lex_reader *r_, char *buf, size_t n,
1632                enum prompt_style prompt_style UNUSED)
1633 {
1634   struct lex_file_reader *r = lex_file_reader_cast (r_);
1635   ssize_t n_read = u8_istream_read (r->istream, buf, n);
1636   if (n_read < 0)
1637     {
1638       msg (ME, _("Error reading `%s': %s."), r->file_name, strerror (errno));
1639       return 0;
1640     }
1641   return n_read;
1642 }
1643
1644 static void
1645 lex_file_close (struct lex_reader *r_)
1646 {
1647   struct lex_file_reader *r = lex_file_reader_cast (r_);
1648
1649   if (u8_istream_fileno (r->istream) != STDIN_FILENO)
1650     {
1651       if (u8_istream_close (r->istream) != 0)
1652         msg (ME, _("Error closing `%s': %s."), r->file_name, strerror (errno));
1653     }
1654   else
1655     u8_istream_free (r->istream);
1656
1657   free (r->file_name);
1658   free (r);
1659 }
1660
1661 static struct lex_reader_class lex_file_reader_class =
1662   {
1663     lex_file_read,
1664     lex_file_close
1665   };
1666 \f
1667 struct lex_string_reader
1668   {
1669     struct lex_reader reader;
1670     struct substring s;
1671     size_t offset;
1672   };
1673
1674 static struct lex_reader_class lex_string_reader_class;
1675
1676 /* Creates and returns a new lex_reader for the contents of S, which must be
1677    encoded in UTF-8.  The new reader takes ownership of S and will free it
1678    with ss_dealloc() when it is closed. */
1679 struct lex_reader *
1680 lex_reader_for_substring_nocopy (struct substring s)
1681 {
1682   struct lex_string_reader *r;
1683
1684   r = xmalloc (sizeof *r);
1685   lex_reader_init (&r->reader, &lex_string_reader_class);
1686   r->reader.syntax = LEX_SYNTAX_INTERACTIVE;
1687   r->s = s;
1688   r->offset = 0;
1689
1690   return &r->reader;
1691 }
1692
1693 /* Creates and returns a new lex_reader for a copy of null-terminated string S,
1694    which must be encoded in UTF-8.  The caller retains ownership of S. */
1695 struct lex_reader *
1696 lex_reader_for_string (const char *s)
1697 {
1698   struct substring ss;
1699   ss_alloc_substring (&ss, ss_cstr (s));
1700   return lex_reader_for_substring_nocopy (ss);
1701 }
1702
1703 /* Formats FORMAT as a printf()-like format string and creates and returns a
1704    new lex_reader for the formatted result.  */
1705 struct lex_reader *
1706 lex_reader_for_format (const char *format, ...)
1707 {
1708   struct lex_reader *r;
1709   va_list args;
1710
1711   va_start (args, format);
1712   r = lex_reader_for_substring_nocopy (ss_cstr (xvasprintf (format, args)));
1713   va_end (args);
1714
1715   return r;
1716 }
1717
1718 static struct lex_string_reader *
1719 lex_string_reader_cast (struct lex_reader *r)
1720 {
1721   return UP_CAST (r, struct lex_string_reader, reader);
1722 }
1723
1724 static size_t
1725 lex_string_read (struct lex_reader *r_, char *buf, size_t n,
1726                  enum prompt_style prompt_style UNUSED)
1727 {
1728   struct lex_string_reader *r = lex_string_reader_cast (r_);
1729   size_t chunk;
1730
1731   chunk = MIN (n, r->s.length - r->offset);
1732   memcpy (buf, r->s.string + r->offset, chunk);
1733   r->offset += chunk;
1734
1735   return chunk;
1736 }
1737
1738 static void
1739 lex_string_close (struct lex_reader *r_)
1740 {
1741   struct lex_string_reader *r = lex_string_reader_cast (r_);
1742
1743   ss_dealloc (&r->s);
1744   free (r);
1745 }
1746
1747 static struct lex_reader_class lex_string_reader_class =
1748   {
1749     lex_string_read,
1750     lex_string_close
1751   };