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