1 /* PSPP - a program for statistical analysis.
2 Copyright (C) 2010, 2011, 2013 Free Software Foundation, Inc.
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.
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.
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/>. */
20 #include "language/lexer/segment.h"
21 #include "libpspp/str.h"
25 /* PSPP syntax scanning.
27 PSPP divides traditional "lexical analysis" or "tokenization" into two
28 phases: a lower-level phase called "segmentation" and a higher-level phase
29 called "scanning". segment.h provides declarations for the segmentation
30 phase. This header file contains declarations for the scanning phase.
32 Scanning accepts as input a stream of segments, which are UTF-8 strings each
33 labeled with a segment type. It outputs a stream of "scan tokens", which
34 are the same as the tokens used by the PSPP parser with a few additional
45 enum tokenize_result token_from_segment (enum segment_type, struct substring,
52 #define MERGER_INIT { 0 }
54 int merger_add (struct merger *m, const struct token *in, struct token *out);
56 /* A simplified lexer for handling syntax in a string. */
63 struct segmenter segmenter;
66 enum string_lexer_result
73 void string_lexer_init (struct string_lexer *, const char *input,
74 size_t length, enum segmenter_mode, bool is_snippet);
75 enum string_lexer_result string_lexer_next (struct string_lexer *,