X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;ds=sidebyside;f=src%2Flanguage%2Flexer%2Fsegment.h;h=5d550f531fc27c15fe71527fb01807cc41e3a6f4;hb=dc25c013a7ce573b87fd27cbefddc732733c837f;hp=686b471e18d4bc7e3536c33ed3dcbb6c7bf9a937;hpb=fe8dc2171009e90d2335f159d05f7e6660e24780;p=pspp diff --git a/src/language/lexer/segment.h b/src/language/lexer/segment.h index 686b471e18..5d550f531f 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,9 @@ enum segmenter_mode SEG_TYPE(DO_REPEAT_COMMAND) \ SEG_TYPE(INLINE_DATA) \ \ + SEG_TYPE(MACRO_ID) \ + SEG_TYPE(MACRO_BODY) \ + \ SEG_TYPE(START_DOCUMENT) \ SEG_TYPE(DOCUMENT) \ \ @@ -88,7 +91,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 +99,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 +113,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 *);