X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Flanguage%2Flexer%2Fsegment.h;h=199e390f7e4f1279d877c9e01935534d405a2289;hb=f982987ec1aee85979c2376eec1bb199aec6df0d;hp=686b471e18d4bc7e3536c33ed3dcbb6c7bf9a937;hpb=75a467ed2d32e1adb0c24cf89676cfb48845be98;p=pspp diff --git a/src/language/lexer/segment.h b/src/language/lexer/segment.h index 686b471e18..199e390f7e 100644 --- a/src/language/lexer/segment.h +++ b/src/language/lexer/segment.h @@ -1,5 +1,5 @@ /* PSPP - a program for statistical analysis. - Copyright (C) 2010, 2011 Free Software Foundation, Inc. + Copyright (C) 2010, 2011, 2013 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -78,6 +78,10 @@ enum segmenter_mode SEG_TYPE(DO_REPEAT_COMMAND) \ SEG_TYPE(INLINE_DATA) \ \ + SEG_TYPE(MACRO_ID) \ + SEG_TYPE(MACRO_NAME) \ + SEG_TYPE(MACRO_BODY) \ + \ SEG_TYPE(START_DOCUMENT) \ SEG_TYPE(DOCUMENT) \ \ @@ -88,7 +92,6 @@ enum segmenter_mode \ SEG_TYPE(EXPECTED_QUOTE) \ SEG_TYPE(EXPECTED_EXPONENT) \ - SEG_TYPE(UNEXPECTED_DOT) \ SEG_TYPE(UNEXPECTED_CHAR) /* Types of segments. */ @@ -97,9 +100,13 @@ enum segment_type #define SEG_TYPE(NAME) SEG_##NAME, SEG_TYPES #undef SEG_TYPE - SEG_N_TYPES }; +/* Number of segment types. */ +#define SEG_TYPE(NAME) + 1 +enum { SEG_N_TYPES = SEG_TYPES }; +#undef SEG_TYPE + const char *segment_type_to_string (enum segment_type); /* A segmenter. Opaque. */ @@ -107,14 +114,15 @@ struct segmenter { unsigned char state; unsigned char substate; + unsigned char nest; unsigned char mode; }; -void segmenter_init (struct segmenter *, enum segmenter_mode); +struct segmenter segmenter_init (enum segmenter_mode, bool is_snippet); enum segmenter_mode segmenter_get_mode (const struct segmenter *); -int segmenter_push (struct segmenter *, const char *input, size_t n, +int segmenter_push (struct segmenter *, const char *input, size_t n, bool eof, enum segment_type *); enum prompt_style segmenter_get_prompt (const struct segmenter *);