1 /**** MSG_LICENCE DO NOT REMOVE ****/
5 #include"DataDesc/datadesc_private.h"
6 #include"DataDesc/ddt_parse.yy.h"
8 YY_BUFFER_STATE input_buffer;
11 int gras_ddt_parse_line_pos = 1;
12 int gras_ddt_parse_col_pos = 0;
13 int gras_ddt_parse_char_pos = 0;
14 int gras_ddt_parse_tok_num = 0;
25 char string_buf[GRAS_DDT_PARSE_MAX_STR_CONST];
26 char *string_buf_ptr = NULL;
30 comment_caller = INITIAL;
39 <comment>[^*\n]* /* eat anything that's not a '*' */
40 <comment>"*"+[^*/\n]* /* eat up '*'s not followed by '/'s */
42 ++gras_ddt_parse_line_pos;
43 gras_ddt_parse_col_pos=0;
44 gras_ddt_parse_char_pos++;
46 <comment>"*"+"/" BEGIN(comment_caller);
48 \" string_buf_ptr = string_buf; gras_ddt_parse_char_pos++;gras_ddt_parse_col_pos++; BEGIN(str);
50 <str>\" { /* saw closing quote - all done */
52 *string_buf_ptr = '\0';
54 gras_ddt_parse_char_pos++;
55 gras_ddt_parse_col_pos++;
56 return GRAS_DDT_PARSE_TOKEN_WORD;
57 /* return string constant token type and
63 /* error - unterminated string constant */
64 /* generate error message */
68 /* octal escape sequence */
71 (void) sscanf( yytext + 1, "%o", &result );
74 /* error, constant is out-of-bounds */
76 *string_buf_ptr++ = result;
77 gras_ddt_parse_char_pos++;
78 gras_ddt_parse_col_pos++;
82 /* generate error - bad escape sequence; something
83 * like '\48' or '\0777777'
88 *string_buf_ptr++ = '\n';
89 gras_ddt_parse_char_pos++;
90 gras_ddt_parse_col_pos++;
93 *string_buf_ptr++ = '\t';
94 gras_ddt_parse_char_pos++;
95 gras_ddt_parse_col_pos++;
98 *string_buf_ptr++ = '\r';
99 gras_ddt_parse_char_pos++;
100 gras_ddt_parse_col_pos++;
103 *string_buf_ptr++ = '\b';
104 gras_ddt_parse_char_pos++;
105 gras_ddt_parse_col_pos++;
108 *string_buf_ptr++ = '\f';
109 gras_ddt_parse_char_pos++;
110 gras_ddt_parse_col_pos++;
114 *string_buf_ptr++ = yytext[1];
115 if(yytext[1]=='\n') {
116 ++gras_ddt_parse_line_pos;
117 gras_ddt_parse_col_pos=0;
119 gras_ddt_parse_col_pos++;
121 gras_ddt_parse_char_pos++;
128 *string_buf_ptr++ = *yptr++;
129 gras_ddt_parse_char_pos++;
130 gras_ddt_parse_col_pos++;
133 ({letter}|{digit})* {
134 gras_ddt_parse_char_pos+= strlen(yytext);
135 gras_ddt_parse_col_pos+= strlen(yytext);
136 return(GRAS_DDT_PARSE_TOKEN_WORD);
139 gras_ddt_parse_char_pos++;
140 gras_ddt_parse_col_pos++;
141 return(GRAS_DDT_PARSE_TOKEN_LP);
144 gras_ddt_parse_char_pos++;
145 gras_ddt_parse_col_pos++;
146 return(GRAS_DDT_PARSE_TOKEN_RP);
149 gras_ddt_parse_char_pos++;
150 gras_ddt_parse_col_pos++;
151 return(GRAS_DDT_PARSE_TOKEN_LB);
154 gras_ddt_parse_char_pos++;
155 gras_ddt_parse_col_pos++;
156 return(GRAS_DDT_PARSE_TOKEN_RB);
159 gras_ddt_parse_char_pos++;
160 gras_ddt_parse_col_pos++;
161 return(GRAS_DDT_PARSE_TOKEN_STAR);
164 gras_ddt_parse_char_pos++;
165 gras_ddt_parse_col_pos++;
166 return(GRAS_DDT_PARSE_TOKEN_SEMI_COLON);
169 gras_ddt_parse_char_pos++;
170 gras_ddt_parse_col_pos++;
171 return(GRAS_DDT_PARSE_TOKEN_COLON);
174 gras_ddt_parse_line_pos++;
175 gras_ddt_parse_char_pos=0;
176 gras_ddt_parse_col_pos++;
179 gras_ddt_parse_char_pos++;
180 gras_ddt_parse_col_pos++;
183 /* {space}+ { return(TOKEN_SPACE);} */
185 void gras_ddt_parse_dump(void) {
186 switch(gras_ddt_parse_tok_num) {
187 case GRAS_DDT_PARSE_TOKEN_LP : {printf("TOKEN_LP ");break;}
188 case GRAS_DDT_PARSE_TOKEN_RP : {printf("TOKEN_RP ");break;}
189 case GRAS_DDT_PARSE_TOKEN_WORD : {printf("TOKEN_WORD ");break;}
190 // case GRAS_DDT_PARSE_TOKEN_SPACE : {printf("TOKEN_SPACE ");break;}
191 // case GRAS_DDT_PARSE_TOKEN_COMMENT : {printf("TOKEN_COMMENT ");break;}
192 case GRAS_DDT_PARSE_TOKEN_NEWLINE : {printf("TOKEN_NEWLINE\n");return;}
193 case GRAS_DDT_PARSE_TOKEN_EMPTY : {printf("TOKEN_EMPTY\n");return;}
194 default : {printf("Unknown token %d\n", gras_ddt_parse_tok_num);return;}
196 printf("-->%s<-- [line %d, pos %d]\n",yytext,gras_ddt_parse_line_pos,gras_ddt_parse_char_pos);
200 int gras_ddt_parse_lex_n_dump(void) {
201 gras_ddt_parse_tok_num = gras_ddt_parse_lex();
202 // gras_ddt_parse_char_pos += strlen(yytext);
203 return(gras_ddt_parse_tok_num);
206 void gras_ddt_parse_pointer_init(const char *file) {
207 file_to_parse = fopen(file,"r");
208 input_buffer = yy_create_buffer( file_to_parse, 10 );
209 yy_switch_to_buffer(input_buffer);
211 gras_ddt_parse_line_pos = 1;
212 gras_ddt_parse_char_pos = 0;
213 gras_ddt_parse_col_pos = 0;
214 gras_ddt_parse_tok_num = 0;
217 void gras_ddt_parse_pointer_close(void) {
218 yy_delete_buffer(input_buffer);
219 fclose(file_to_parse);
221 gras_ddt_parse_line_pos = 1;
222 gras_ddt_parse_char_pos = 0;
223 gras_ddt_parse_tok_num = 0;
227 void gras_ddt_parse_pointer_string_init(const char *string_to_parse) {
228 input_buffer = yy_scan_string (string_to_parse);
229 yy_switch_to_buffer(input_buffer);
231 gras_ddt_parse_line_pos = 1;
232 gras_ddt_parse_char_pos = 0;
233 gras_ddt_parse_tok_num = 0;
236 void gras_ddt_parse_pointer_string_close(void) {
237 yy_delete_buffer(input_buffer);
239 gras_ddt_parse_line_pos = 1;
240 gras_ddt_parse_char_pos = 0;
241 gras_ddt_parse_tok_num = 0;