Volksdata 1.0b7
RDF library
Loading...
Searching...
No Matches
parser_nt.c
Go to the documentation of this file.
1/* Generated by re2c 4.4 on Sun Mar 8 17:24:17 2026 */
2#line 1 "lexer_nt.re"
5
6#line 1 "../../include/volksdata/codec/parser_common.h"
12#ifndef VOLK_PARSER_COMMON_H
13#define VOLK_PARSER_COMMON_H
14
16
17
25#define YYCTYPE uint8_t
26#define YYCURSOR it->cur
27#define YYMARKER it->mar
28#define YYLIMIT it->lim
29#define YYFILL fill(it) == 0
30
31
32typedef struct parse_it_t {
33 FILE * fh;
34 const char * sh;
35 size_t buf_size;
37 * lim,
39 * cur,
40 * mar,
41 * tok,
42 * bol;
44 unsigned line;
45 unsigned ct;
46 bool eof;
47
48#line 49 "parser_nt.c"
50#line 41 "../../include/volksdata/codec/parser_common.h"
51
53
54
55static int fill(ParseIterator *it);
56
57
67static void parse_init (ParseIterator *it, FILE *fh, const char *sh)
68{
69 if(fh) {
70 // Stream handling. It engages YYFILL and reads by chunks.
71 it->fh = fh;
72 it->sh = NULL;
73 it->buf_size = CHUNK_SIZE;
74 it->buf = malloc(it->buf_size);
75 if (!it->buf) log_error ("Error allocating lexer buffer.");
76 it->cur = it->mar = it->tok = it->lim = it->buf + it->buf_size - 1;
77 it->bol = it->buf;
78 it->eof = false;
79 it->lim[0] = 0;
80 } else {
81 // String handling. Uses the provided string as the buffer.
82 it->fh = NULL;
83 it->sh = sh;
84 it->buf_size = strlen(sh) + 1;
85 it->buf = NULL;
86 it->cur = it->tok = (YYCTYPE*)it->sh;
87 it->lim = it->mar = it->cur + it->buf_size - 1;
88 it->bol = it->cur;
89 it->eof = true;
90 }
91 it->line = 1;
92 it->ct = 0;
93
94#line 95 "parser_nt.c"
95it->yyt1 = NULL; it->yyt2 = NULL; it->yyt3 = NULL;
96#line 83 "../../include/volksdata/codec/parser_common.h"
97
98}
99
100
101int
102fill(ParseIterator *it)
103{
104 log_debug ("Filling codec buffer @ %p.", it->buf);
105 if (it->eof) return 1;
106
107 size_t shift = it->tok - it->buf;
108 size_t used = it->lim - it->tok;
109
110 // If buffer is too small for the lexeme, double the capacity.
111 if (shift < 1) {
112 shift += it->buf_size;
113 it->buf_size *= 2;
114 // Store offsets to reapply to moved buffer.
115 size_t
116 cur_off = it->cur - it->buf,
117 tok_off = it->tok - it->buf,
118 lim_off = it->lim - it->buf,
119 mar_off = it->mar - it->buf;
120
121 log_debug ("Reallocating buffer to %zu bytes.", it->buf_size);
122 YYCTYPE *tmp = realloc (it->buf, it->buf_size);
123 if (!tmp) {
124 log_error ("Memory allocation error.");
125 return -1;
126 }
127 it->buf = tmp;
128 // Move all relative points if address changed.
129 it->cur = it->buf + cur_off;
130 it->tok = it->buf + tok_off;
131 it->lim = it->buf + lim_off;
132 it->mar = it->buf + mar_off;
133 } else {
134 log_debug ("Shifting bytes: %zu", shift);
135 memmove (it->buf, it->tok, used);
136 log_trace ("Limit offset before reading data: %zu", it->lim - it->tok);
137 it->lim -= shift;
138 it->cur -= shift;
139 it->mar -= shift;
140 it->tok -= shift;
141 }
142 it->lim += fread (it->lim, 1, it->buf_size - used - 1, it->fh);
143
144#line 145 "parser_nt.c"
145if (it->yyt1) it->yyt1 -= shift; if (it->yyt2) it->yyt2 -= shift; if (it->yyt3) it->yyt3 -= shift;
146#line 129 "../../include/volksdata/codec/parser_common.h"
147
148 log_trace ("Cursor offset from last token: %zu", it->cur - it->tok);
149 log_trace ("Limit offset from last token: %zu", it->lim - it->tok);
150 it->lim[0] = 0;
151 it->eof = it->lim < it->buf + it->buf_size - 1;
152 return 0;
153}
154
155
156#endif // VOLK_PARSER_COMMON_H
157#line 4 "lexer_nt.re"
158
159
160
161// Parser interface. Required here to silence linters.
163void NTParse();
165#ifdef VOLK_CODEC_DEBUG
166void NTParseTrace();
167#endif
168
169// Lexer.
170
171static int lex (ParseIterator *it, VOLK_Term **term)
172{
173 const YYCTYPE *lit_data_e, *dtype_s, *lang_s;
174 //(void) lit_data_e;
175 //(void) dtype_s;
176 //(void) lang_s;
177
178loop:
179
180 it->tok = it->cur;
181
182 *term = NULL;
183
184
185#line 186 "parser_nt.c"
186{
187 YYCTYPE yych;
188 unsigned int yyaccept = 0;
189yyFillLabel0:
190 yych = *YYCURSOR;
191 switch (yych) {
192 case '\t':
193 case ' ': goto yy3;
194 case '\n':
195 case '\r': goto yy5;
196 case '"': goto yy7;
197 case '#': goto yy8;
198 case '.': goto yy10;
199 case '<': goto yy11;
200 case '_': goto yy12;
201 default:
202 if (YYLIMIT <= YYCURSOR) {
203 if (YYFILL) goto yyFillLabel0;
204 goto yy110;
205 }
206 goto yy1;
207 }
208yy1:
209 ++YYCURSOR;
210yy2:
211#line 162 "lexer_nt.re"
212 {
213 log_error (
214 "Invalid token @ %p: %s (\\x%x)",
215 YYCURSOR - it->buf - 1, it->tok, *it->tok);
216
217 return -1;
218 }
219#line 220 "parser_nt.c"
220yy3:
221 ++YYCURSOR;
222yyFillLabel1:
223 yych = *YYCURSOR;
224 switch (yych) {
225 case '\t':
226 case ' ': goto yy3;
227 default:
228 if (YYLIMIT <= YYCURSOR) {
229 if (YYFILL) goto yyFillLabel1;
230 }
231 goto yy4;
232 }
233yy4:
234#line 145 "lexer_nt.re"
235 {
236 log_debug ("Separator.");
237
238 return T_WS;
239 }
240#line 241 "parser_nt.c"
241yy5:
242 ++YYCURSOR;
243yyFillLabel2:
244 yych = *YYCURSOR;
245 switch (yych) {
246 case '\t' ... '\n':
247 case '\r':
248 case ' ': goto yy5;
249 default:
250 if (YYLIMIT <= YYCURSOR) {
251 if (YYFILL) goto yyFillLabel2;
252 }
253 goto yy6;
254 }
255yy6:
256#line 61 "lexer_nt.re"
257 {
258 it->line ++;
259 it->bol = YYCURSOR;
260 log_debug ("New line: #%u.", it->line);
261 return T_EOL;
262 }
263#line 264 "parser_nt.c"
264yy7:
265 yyaccept = 0;
266 YYMARKER = ++YYCURSOR;
267yyFillLabel3:
268 yych = *YYCURSOR;
269 switch (yych) {
270 case 0x00:
271 if (YYLIMIT <= YYCURSOR) {
272 if (YYFILL) goto yyFillLabel3;
273 goto yy2;
274 }
275 goto yy13;
276 case 0x01 ... '\t':
277 case '\v' ... '\f':
278 case 0x0E ... 0x7F:
279 case 0xC2 ... 0xF4: goto yy14;
280 default: goto yy2;
281 }
282yy8:
283 yyaccept = 1;
284 YYMARKER = ++YYCURSOR;
285yyFillLabel4:
286 yych = *YYCURSOR;
287 switch (yych) {
288 case 0x00:
289 case 0x01 ... '\t':
290 case '\v' ... 0x7F:
291 if (YYLIMIT <= YYCURSOR) {
292 if (YYFILL) goto yyFillLabel4;
293 goto yy9;
294 }
295 goto yy8;
296 case 0xC2 ... 0xDF: goto yy25;
297 case 0xE0: goto yy26;
298 case 0xE1 ... 0xEF: goto yy27;
299 case 0xF0: goto yy28;
300 case 0xF1 ... 0xF3: goto yy29;
301 case 0xF4: goto yy30;
302 default: goto yy9;
303 }
304yy9:
305#line 151 "lexer_nt.re"
306 {
307 size_t size = YYCURSOR - it->tok + 1;
308 YYCTYPE *data = malloc (size);
309 memcpy (data, it->tok, size);
310 data [size - 1] = '\0';
311 log_debug ("Comment: `%s`", data);
312 free (data);
313
314 goto loop;
315 }
316#line 317 "parser_nt.c"
317yy10:
318 ++YYCURSOR;
319#line 138 "lexer_nt.re"
320 {
321 log_debug ("End of triple.");
322 it->ct ++;
323
324 return T_DOT;
325 }
326#line 327 "parser_nt.c"
327yy11:
328 yyaccept = 0;
329 YYMARKER = ++YYCURSOR;
330yyFillLabel5:
331 yych = *YYCURSOR;
332 switch (yych) {
333 case '!':
334 case '#' ... ';':
335 case '=' ... ']':
336 case '_':
337 case 'a' ... 'z':
338 case '~' ... 0x7F:
339 case 0xC2 ... 0xF4: goto yy32;
340 default:
341 if (YYLIMIT <= YYCURSOR) {
342 if (YYFILL) goto yyFillLabel5;
343 }
344 goto yy2;
345 }
346yy12:
347 yyaccept = 0;
348 YYMARKER = ++YYCURSOR;
349yyFillLabel6:
350 yych = *YYCURSOR;
351 switch (yych) {
352 case ':': goto yy41;
353 default:
354 if (YYLIMIT <= YYCURSOR) {
355 if (YYFILL) goto yyFillLabel6;
356 }
357 goto yy2;
358 }
359yy13:
360 ++YYCURSOR;
361yyFillLabel7:
362 yych = *YYCURSOR;
363yy14:
364 switch (yych) {
365 case 0x00:
366 case 0x01 ... '\t':
367 case '\v' ... '\f':
368 case 0x0E ... '!':
369 case '#' ... '[':
370 case ']' ... 0x7F:
371 if (YYLIMIT <= YYCURSOR) {
372 if (YYFILL) goto yyFillLabel7;
373 goto yy15;
374 }
375 goto yy13;
376 case '"': goto yy16;
377 case '\\': goto yy18;
378 case 0xC2 ... 0xDF: goto yy19;
379 case 0xE0: goto yy20;
380 case 0xE1 ... 0xEF: goto yy21;
381 case 0xF0: goto yy22;
382 case 0xF1 ... 0xF3: goto yy23;
383 case 0xF4: goto yy24;
384 default: goto yy15;
385 }
386yy15:
388 switch (yyaccept) {
389 case 0: goto yy2;
390 case 1: goto yy9;
391 case 2:
392 it->yyt1 = YYCURSOR;
393 it->yyt2 = NULL;
394 it->yyt3 = NULL;
395 goto yy17;
396 case 3:
397 it->yyt2 = NULL;
398 it->yyt3 = NULL;
399 goto yy17;
400 case 4: goto yy51;
401 default:
402 it->yyt2 = NULL;
403 goto yy17;
404 }
405yy16:
406 yyaccept = 2;
407 YYMARKER = ++YYCURSOR;
408yyFillLabel8:
409 yych = *YYCURSOR;
410 switch (yych) {
411 case '\t':
412 case ' ':
413 it->yyt1 = YYCURSOR;
414 goto yy42;
415 case '@':
416 it->yyt1 = YYCURSOR;
417 it->yyt3 = YYCURSOR;
418 goto yy43;
419 case '^':
420 it->yyt1 = YYCURSOR;
421 goto yy44;
422 default:
423 if (YYLIMIT <= YYCURSOR) {
424 if (YYFILL) goto yyFillLabel8;
425 }
426 it->yyt1 = YYCURSOR;
427 it->yyt2 = NULL;
428 it->yyt3 = NULL;
429 goto yy17;
430 }
431yy17:
432 lit_data_e = it->yyt1;
433 dtype_s = it->yyt2;
434 lang_s = it->yyt3;
435#line 85 "lexer_nt.re"
436 {
437 // Only unescape Unicode from data.
438 size_t size = lit_data_e - it->tok - 2;
439 YYCTYPE *data = unescape_unicode (it->tok + 1, size);
440 log_trace ("Literal data: %s", data);
441
442 char *metadata = NULL;
443 const YYCTYPE *md_marker;
445
446 if (dtype_s) {
447 md_marker = dtype_s;
448 size = YYCURSOR - md_marker - 1;
449 } else if (lang_s) {
451 md_marker = lang_s;
452 size = YYCURSOR - md_marker;
453 } else md_marker = NULL;
454
455 if (md_marker) {
456 metadata = malloc (size);
457 memcpy (metadata, md_marker + 1, size);
458 metadata [size - 1] = '\0';
459 log_trace ("metadata: %s", metadata);
460 }
461
462 if (type == VOLK_TERM_LITERAL) {
463 VOLK_Term *dtype;
464 dtype = (metadata ? VOLK_iriref_new ((char *) metadata) : NULL);
465
466 *term = VOLK_literal_new ((char *) data, dtype);
467
468 } else *term = VOLK_lt_literal_new ((char *) data, (char *) metadata);
469
470 free (data);
471 free (metadata);
472
473 if (UNLIKELY (!term)) return -1;
474 return T_LITERAL;
475 }
476#line 477 "parser_nt.c"
477yy18:
478 ++YYCURSOR;
479yyFillLabel9:
480 yych = *YYCURSOR;
481 switch (yych) {
482 case '"':
483 case '\'':
484 case '\\':
485 case 'b':
486 case 'f':
487 case 'n':
488 case 'r':
489 case 't': goto yy13;
490 case 'U': goto yy45;
491 case 'u': goto yy46;
492 default:
493 if (YYLIMIT <= YYCURSOR) {
494 if (YYFILL) goto yyFillLabel9;
495 }
496 goto yy15;
497 }
498yy19:
499 ++YYCURSOR;
500yyFillLabel10:
501 yych = *YYCURSOR;
502 switch (yych) {
503 case 0x80 ... 0xBF: goto yy13;
504 default:
505 if (YYLIMIT <= YYCURSOR) {
506 if (YYFILL) goto yyFillLabel10;
507 }
508 goto yy15;
509 }
510yy20:
511 ++YYCURSOR;
512yyFillLabel11:
513 yych = *YYCURSOR;
514 switch (yych) {
515 case 0xA0 ... 0xBF: goto yy19;
516 default:
517 if (YYLIMIT <= YYCURSOR) {
518 if (YYFILL) goto yyFillLabel11;
519 }
520 goto yy15;
521 }
522yy21:
523 ++YYCURSOR;
524yyFillLabel12:
525 yych = *YYCURSOR;
526 switch (yych) {
527 case 0x80 ... 0xBF: goto yy19;
528 default:
529 if (YYLIMIT <= YYCURSOR) {
530 if (YYFILL) goto yyFillLabel12;
531 }
532 goto yy15;
533 }
534yy22:
535 ++YYCURSOR;
536yyFillLabel13:
537 yych = *YYCURSOR;
538 switch (yych) {
539 case 0x90 ... 0xBF: goto yy21;
540 default:
541 if (YYLIMIT <= YYCURSOR) {
542 if (YYFILL) goto yyFillLabel13;
543 }
544 goto yy15;
545 }
546yy23:
547 ++YYCURSOR;
548yyFillLabel14:
549 yych = *YYCURSOR;
550 switch (yych) {
551 case 0x80 ... 0xBF: goto yy21;
552 default:
553 if (YYLIMIT <= YYCURSOR) {
554 if (YYFILL) goto yyFillLabel14;
555 }
556 goto yy15;
557 }
558yy24:
559 ++YYCURSOR;
560yyFillLabel15:
561 yych = *YYCURSOR;
562 switch (yych) {
563 case 0x80 ... 0x8F: goto yy21;
564 default:
565 if (YYLIMIT <= YYCURSOR) {
566 if (YYFILL) goto yyFillLabel15;
567 }
568 goto yy15;
569 }
570yy25:
571 ++YYCURSOR;
572yyFillLabel16:
573 yych = *YYCURSOR;
574 switch (yych) {
575 case 0x80 ... 0xBF: goto yy8;
576 default:
577 if (YYLIMIT <= YYCURSOR) {
578 if (YYFILL) goto yyFillLabel16;
579 }
580 goto yy15;
581 }
582yy26:
583 ++YYCURSOR;
584yyFillLabel17:
585 yych = *YYCURSOR;
586 switch (yych) {
587 case 0xA0 ... 0xBF: goto yy25;
588 default:
589 if (YYLIMIT <= YYCURSOR) {
590 if (YYFILL) goto yyFillLabel17;
591 }
592 goto yy15;
593 }
594yy27:
595 ++YYCURSOR;
596yyFillLabel18:
597 yych = *YYCURSOR;
598 switch (yych) {
599 case 0x80 ... 0xBF: goto yy25;
600 default:
601 if (YYLIMIT <= YYCURSOR) {
602 if (YYFILL) goto yyFillLabel18;
603 }
604 goto yy15;
605 }
606yy28:
607 ++YYCURSOR;
608yyFillLabel19:
609 yych = *YYCURSOR;
610 switch (yych) {
611 case 0x90 ... 0xBF: goto yy27;
612 default:
613 if (YYLIMIT <= YYCURSOR) {
614 if (YYFILL) goto yyFillLabel19;
615 }
616 goto yy15;
617 }
618yy29:
619 ++YYCURSOR;
620yyFillLabel20:
621 yych = *YYCURSOR;
622 switch (yych) {
623 case 0x80 ... 0xBF: goto yy27;
624 default:
625 if (YYLIMIT <= YYCURSOR) {
626 if (YYFILL) goto yyFillLabel20;
627 }
628 goto yy15;
629 }
630yy30:
631 ++YYCURSOR;
632yyFillLabel21:
633 yych = *YYCURSOR;
634 switch (yych) {
635 case 0x80 ... 0x8F: goto yy27;
636 default:
637 if (YYLIMIT <= YYCURSOR) {
638 if (YYFILL) goto yyFillLabel21;
639 }
640 goto yy15;
641 }
642yy31:
643 ++YYCURSOR;
644yyFillLabel22:
645 yych = *YYCURSOR;
646yy32:
647 switch (yych) {
648 case '!':
649 case '#' ... ';':
650 case '=':
651 case '?' ... '[':
652 case ']':
653 case '_':
654 case 'a' ... 'z':
655 case '~' ... 0x7F: goto yy31;
656 case '>': goto yy33;
657 case '\\': goto yy34;
658 case 0xC2 ... 0xDF: goto yy35;
659 case 0xE0: goto yy36;
660 case 0xE1 ... 0xEF: goto yy37;
661 case 0xF0: goto yy38;
662 case 0xF1 ... 0xF3: goto yy39;
663 case 0xF4: goto yy40;
664 default:
665 if (YYLIMIT <= YYCURSOR) {
666 if (YYFILL) goto yyFillLabel22;
667 }
668 goto yy15;
669 }
670yy33:
671 ++YYCURSOR;
672#line 73 "lexer_nt.re"
673 {
674 YYCTYPE *data = unescape_unicode (it->tok + 1, YYCURSOR - it->tok - 2);
675
676 log_debug ("URI data: %s", data);
677
678 *term = VOLK_iriref_new ((char*)data);
679 free (data);
680
681 if (UNLIKELY (!term)) return -1;
682 return T_IRIREF;
683 }
684#line 685 "parser_nt.c"
685yy34:
686 ++YYCURSOR;
687yyFillLabel23:
688 yych = *YYCURSOR;
689 switch (yych) {
690 case 'U': goto yy47;
691 case 'u': goto yy48;
692 default:
693 if (YYLIMIT <= YYCURSOR) {
694 if (YYFILL) goto yyFillLabel23;
695 }
696 goto yy15;
697 }
698yy35:
699 ++YYCURSOR;
700yyFillLabel24:
701 yych = *YYCURSOR;
702 switch (yych) {
703 case 0x80 ... 0xBF: goto yy31;
704 default:
705 if (YYLIMIT <= YYCURSOR) {
706 if (YYFILL) goto yyFillLabel24;
707 }
708 goto yy15;
709 }
710yy36:
711 ++YYCURSOR;
712yyFillLabel25:
713 yych = *YYCURSOR;
714 switch (yych) {
715 case 0xA0 ... 0xBF: goto yy35;
716 default:
717 if (YYLIMIT <= YYCURSOR) {
718 if (YYFILL) goto yyFillLabel25;
719 }
720 goto yy15;
721 }
722yy37:
723 ++YYCURSOR;
724yyFillLabel26:
725 yych = *YYCURSOR;
726 switch (yych) {
727 case 0x80 ... 0xBF: goto yy35;
728 default:
729 if (YYLIMIT <= YYCURSOR) {
730 if (YYFILL) goto yyFillLabel26;
731 }
732 goto yy15;
733 }
734yy38:
735 ++YYCURSOR;
736yyFillLabel27:
737 yych = *YYCURSOR;
738 switch (yych) {
739 case 0x90 ... 0xBF: goto yy37;
740 default:
741 if (YYLIMIT <= YYCURSOR) {
742 if (YYFILL) goto yyFillLabel27;
743 }
744 goto yy15;
745 }
746yy39:
747 ++YYCURSOR;
748yyFillLabel28:
749 yych = *YYCURSOR;
750 switch (yych) {
751 case 0x80 ... 0xBF: goto yy37;
752 default:
753 if (YYLIMIT <= YYCURSOR) {
754 if (YYFILL) goto yyFillLabel28;
755 }
756 goto yy15;
757 }
758yy40:
759 ++YYCURSOR;
760yyFillLabel29:
761 yych = *YYCURSOR;
762 switch (yych) {
763 case 0x80 ... 0x8F: goto yy37;
764 default:
765 if (YYLIMIT <= YYCURSOR) {
766 if (YYFILL) goto yyFillLabel29;
767 }
768 goto yy15;
769 }
770yy41:
771 ++YYCURSOR;
772yyFillLabel30:
773 yych = *YYCURSOR;
774 switch (yych) {
775 case '0' ... ':':
776 case 'A' ... 'Z':
777 case '_':
778 case 'a' ... 'z':
779 case 0xC3 ... 0xCB:
780 case 0xCE ... 0xE1:
781 case 0xE3 ... 0xED:
782 case 0xEF ... 0xF3: goto yy50;
783 case 0xCD: goto yy54;
784 case 0xE2: goto yy57;
785 default:
786 if (YYLIMIT <= YYCURSOR) {
787 if (YYFILL) goto yyFillLabel30;
788 }
789 goto yy15;
790 }
791yy42:
792 yyaccept = 3;
793 YYMARKER = ++YYCURSOR;
794yyFillLabel31:
795 yych = *YYCURSOR;
796 switch (yych) {
797 case '\t':
798 case ' ': goto yy42;
799 case '@':
800 it->yyt3 = YYCURSOR;
801 goto yy43;
802 case '^': goto yy44;
803 default:
804 if (YYLIMIT <= YYCURSOR) {
805 if (YYFILL) goto yyFillLabel31;
806 }
807 it->yyt2 = NULL;
808 it->yyt3 = NULL;
809 goto yy17;
810 }
811yy43:
812 ++YYCURSOR;
813yyFillLabel32:
814 yych = *YYCURSOR;
815 switch (yych) {
816 case 'A' ... 'Z':
817 case 'a' ... 'z': goto yy64;
818 default:
819 if (YYLIMIT <= YYCURSOR) {
820 if (YYFILL) goto yyFillLabel32;
821 }
822 goto yy15;
823 }
824yy44:
825 ++YYCURSOR;
826yyFillLabel33:
827 yych = *YYCURSOR;
828 switch (yych) {
829 case '^': goto yy65;
830 default:
831 if (YYLIMIT <= YYCURSOR) {
832 if (YYFILL) goto yyFillLabel33;
833 }
834 goto yy15;
835 }
836yy45:
837 ++YYCURSOR;
838yyFillLabel34:
839 yych = *YYCURSOR;
840 switch (yych) {
841 case '0' ... '9':
842 case 'A' ... 'F':
843 case 'a' ... 'f': goto yy66;
844 default:
845 if (YYLIMIT <= YYCURSOR) {
846 if (YYFILL) goto yyFillLabel34;
847 }
848 goto yy15;
849 }
850yy46:
851 ++YYCURSOR;
852yyFillLabel35:
853 yych = *YYCURSOR;
854 switch (yych) {
855 case '0' ... '9':
856 case 'A' ... 'F':
857 case 'a' ... 'f': goto yy67;
858 default:
859 if (YYLIMIT <= YYCURSOR) {
860 if (YYFILL) goto yyFillLabel35;
861 }
862 goto yy15;
863 }
864yy47:
865 ++YYCURSOR;
866yyFillLabel36:
867 yych = *YYCURSOR;
868 switch (yych) {
869 case '0' ... '9':
870 case 'A' ... 'F':
871 case 'a' ... 'f': goto yy68;
872 default:
873 if (YYLIMIT <= YYCURSOR) {
874 if (YYFILL) goto yyFillLabel36;
875 }
876 goto yy15;
877 }
878yy48:
879 ++YYCURSOR;
880yyFillLabel37:
881 yych = *YYCURSOR;
882 switch (yych) {
883 case '0' ... '9':
884 case 'A' ... 'F':
885 case 'a' ... 'f': goto yy69;
886 default:
887 if (YYLIMIT <= YYCURSOR) {
888 if (YYFILL) goto yyFillLabel37;
889 }
890 goto yy15;
891 }
892yy49:
893 yyaccept = 4;
894 YYMARKER = ++YYCURSOR;
895yyFillLabel38:
896 yych = *YYCURSOR;
897yy50:
898 switch (yych) {
899 case '-':
900 case '0' ... ':':
901 case 'A' ... 'Z':
902 case '_':
903 case 'a' ... 'z': goto yy49;
904 case '.': goto yy70;
905 case 0xC2: goto yy71;
906 case 0xC3: goto yy52;
907 case 0xC4 ... 0xCC:
908 case 0xCE ... 0xDF: goto yy53;
909 case 0xCD: goto yy72;
910 case 0xE0: goto yy55;
911 case 0xE1:
912 case 0xE4 ... 0xEC: goto yy56;
913 case 0xE2: goto yy73;
914 case 0xE3: goto yy58;
915 case 0xED: goto yy59;
916 case 0xEF: goto yy60;
917 case 0xF0: goto yy61;
918 case 0xF1 ... 0xF2: goto yy62;
919 case 0xF3: goto yy63;
920 default:
921 if (YYLIMIT <= YYCURSOR) {
922 if (YYFILL) goto yyFillLabel38;
923 }
924 goto yy51;
925 }
926yy51:
927#line 126 "lexer_nt.re"
928 {
929 YYCTYPE *data = unescape_unicode (it->tok + 2, YYCURSOR - it->tok - 2);
930
931 log_debug ("BNode data: %s", data);
932
933 *term = VOLK_term_new (VOLK_TERM_BNODE, (char*)data, NULL);
934 free (data);
935
936 if (UNLIKELY (!term)) return -1;
937 return T_BNODE;
938 }
939#line 940 "parser_nt.c"
940yy52:
941 ++YYCURSOR;
942yyFillLabel39:
943 yych = *YYCURSOR;
944 switch (yych) {
945 case 0x80 ... 0x96:
946 case 0x98 ... 0xB6:
947 case 0xB8 ... 0xBF: goto yy49;
948 default:
949 if (YYLIMIT <= YYCURSOR) {
950 if (YYFILL) goto yyFillLabel39;
951 }
952 goto yy15;
953 }
954yy53:
955 ++YYCURSOR;
956yyFillLabel40:
957 yych = *YYCURSOR;
958 switch (yych) {
959 case 0x80 ... 0xBF: goto yy49;
960 default:
961 if (YYLIMIT <= YYCURSOR) {
962 if (YYFILL) goto yyFillLabel40;
963 }
964 goto yy15;
965 }
966yy54:
967 ++YYCURSOR;
968yyFillLabel41:
969 yych = *YYCURSOR;
970 switch (yych) {
971 case 0xB0 ... 0xBD:
972 case 0xBF: goto yy49;
973 default:
974 if (YYLIMIT <= YYCURSOR) {
975 if (YYFILL) goto yyFillLabel41;
976 }
977 goto yy15;
978 }
979yy55:
980 ++YYCURSOR;
981yyFillLabel42:
982 yych = *YYCURSOR;
983 switch (yych) {
984 case 0xA0 ... 0xBF: goto yy53;
985 default:
986 if (YYLIMIT <= YYCURSOR) {
987 if (YYFILL) goto yyFillLabel42;
988 }
989 goto yy15;
990 }
991yy56:
992 ++YYCURSOR;
993yyFillLabel43:
994 yych = *YYCURSOR;
995 switch (yych) {
996 case 0x80 ... 0xBF: goto yy53;
997 default:
998 if (YYLIMIT <= YYCURSOR) {
999 if (YYFILL) goto yyFillLabel43;
1000 }
1001 goto yy15;
1002 }
1003yy57:
1004 ++YYCURSOR;
1005yyFillLabel44:
1006 yych = *YYCURSOR;
1007 switch (yych) {
1008 case 0x80: goto yy74;
1009 case 0x81: goto yy75;
1010 case 0x82 ... 0x85:
1011 case 0xB0 ... 0xBE: goto yy53;
1012 case 0x86: goto yy76;
1013 case 0xBF: goto yy77;
1014 default:
1015 if (YYLIMIT <= YYCURSOR) {
1016 if (YYFILL) goto yyFillLabel44;
1017 }
1018 goto yy15;
1019 }
1020yy58:
1021 ++YYCURSOR;
1022yyFillLabel45:
1023 yych = *YYCURSOR;
1024 switch (yych) {
1025 case 0x80: goto yy78;
1026 case 0x81 ... 0xBF: goto yy53;
1027 default:
1028 if (YYLIMIT <= YYCURSOR) {
1029 if (YYFILL) goto yyFillLabel45;
1030 }
1031 goto yy15;
1032 }
1033yy59:
1034 ++YYCURSOR;
1035yyFillLabel46:
1036 yych = *YYCURSOR;
1037 switch (yych) {
1038 case 0x80 ... 0x9F: goto yy53;
1039 default:
1040 if (YYLIMIT <= YYCURSOR) {
1041 if (YYFILL) goto yyFillLabel46;
1042 }
1043 goto yy15;
1044 }
1045yy60:
1046 ++YYCURSOR;
1047yyFillLabel47:
1048 yych = *YYCURSOR;
1049 switch (yych) {
1050 case 0xA4 ... 0xB6:
1051 case 0xB8 ... 0xBE: goto yy53;
1052 case 0xB7: goto yy79;
1053 case 0xBF: goto yy80;
1054 default:
1055 if (YYLIMIT <= YYCURSOR) {
1056 if (YYFILL) goto yyFillLabel47;
1057 }
1058 goto yy15;
1059 }
1060yy61:
1061 ++YYCURSOR;
1062yyFillLabel48:
1063 yych = *YYCURSOR;
1064 switch (yych) {
1065 case 0x90 ... 0xBF: goto yy56;
1066 default:
1067 if (YYLIMIT <= YYCURSOR) {
1068 if (YYFILL) goto yyFillLabel48;
1069 }
1070 goto yy15;
1071 }
1072yy62:
1073 ++YYCURSOR;
1074yyFillLabel49:
1075 yych = *YYCURSOR;
1076 switch (yych) {
1077 case 0x80 ... 0xBF: goto yy56;
1078 default:
1079 if (YYLIMIT <= YYCURSOR) {
1080 if (YYFILL) goto yyFillLabel49;
1081 }
1082 goto yy15;
1083 }
1084yy63:
1085 ++YYCURSOR;
1086yyFillLabel50:
1087 yych = *YYCURSOR;
1088 switch (yych) {
1089 case 0x80 ... 0xAF: goto yy56;
1090 default:
1091 if (YYLIMIT <= YYCURSOR) {
1092 if (YYFILL) goto yyFillLabel50;
1093 }
1094 goto yy15;
1095 }
1096yy64:
1097 yyaccept = 5;
1098 YYMARKER = ++YYCURSOR;
1099yyFillLabel51:
1100 yych = *YYCURSOR;
1101 switch (yych) {
1102 case '-': goto yy81;
1103 case 'A' ... 'Z':
1104 case 'a' ... 'z': goto yy64;
1105 default:
1106 if (YYLIMIT <= YYCURSOR) {
1107 if (YYFILL) goto yyFillLabel51;
1108 }
1109 it->yyt2 = NULL;
1110 goto yy17;
1111 }
1112yy65:
1113 ++YYCURSOR;
1114yyFillLabel52:
1115 yych = *YYCURSOR;
1116 switch (yych) {
1117 case '\t':
1118 case ' ': goto yy65;
1119 case '<':
1120 it->yyt2 = YYCURSOR;
1121 goto yy82;
1122 default:
1123 if (YYLIMIT <= YYCURSOR) {
1124 if (YYFILL) goto yyFillLabel52;
1125 }
1126 goto yy15;
1127 }
1128yy66:
1129 ++YYCURSOR;
1130yyFillLabel53:
1131 yych = *YYCURSOR;
1132 switch (yych) {
1133 case '0' ... '9':
1134 case 'A' ... 'F':
1135 case 'a' ... 'f': goto yy83;
1136 default:
1137 if (YYLIMIT <= YYCURSOR) {
1138 if (YYFILL) goto yyFillLabel53;
1139 }
1140 goto yy15;
1141 }
1142yy67:
1143 ++YYCURSOR;
1144yyFillLabel54:
1145 yych = *YYCURSOR;
1146 switch (yych) {
1147 case '0' ... '9':
1148 case 'A' ... 'F':
1149 case 'a' ... 'f': goto yy84;
1150 default:
1151 if (YYLIMIT <= YYCURSOR) {
1152 if (YYFILL) goto yyFillLabel54;
1153 }
1154 goto yy15;
1155 }
1156yy68:
1157 ++YYCURSOR;
1158yyFillLabel55:
1159 yych = *YYCURSOR;
1160 switch (yych) {
1161 case '0' ... '9':
1162 case 'A' ... 'F':
1163 case 'a' ... 'f': goto yy85;
1164 default:
1165 if (YYLIMIT <= YYCURSOR) {
1166 if (YYFILL) goto yyFillLabel55;
1167 }
1168 goto yy15;
1169 }
1170yy69:
1171 ++YYCURSOR;
1172yyFillLabel56:
1173 yych = *YYCURSOR;
1174 switch (yych) {
1175 case '0' ... '9':
1176 case 'A' ... 'F':
1177 case 'a' ... 'f': goto yy86;
1178 default:
1179 if (YYLIMIT <= YYCURSOR) {
1180 if (YYFILL) goto yyFillLabel56;
1181 }
1182 goto yy15;
1183 }
1184yy70:
1185 ++YYCURSOR;
1186yyFillLabel57:
1187 yych = *YYCURSOR;
1188 switch (yych) {
1189 case '-':
1190 case '0' ... ':':
1191 case 'A' ... 'Z':
1192 case '_':
1193 case 'a' ... 'z': goto yy49;
1194 case '.': goto yy70;
1195 case 0xC2: goto yy71;
1196 case 0xC3: goto yy52;
1197 case 0xC4 ... 0xCC:
1198 case 0xCE ... 0xDF: goto yy53;
1199 case 0xCD: goto yy72;
1200 case 0xE0: goto yy55;
1201 case 0xE1:
1202 case 0xE4 ... 0xEC: goto yy56;
1203 case 0xE2: goto yy73;
1204 case 0xE3: goto yy58;
1205 case 0xED: goto yy59;
1206 case 0xEF: goto yy60;
1207 case 0xF0: goto yy61;
1208 case 0xF1 ... 0xF2: goto yy62;
1209 case 0xF3: goto yy63;
1210 default:
1211 if (YYLIMIT <= YYCURSOR) {
1212 if (YYFILL) goto yyFillLabel57;
1213 }
1214 goto yy15;
1215 }
1216yy71:
1217 ++YYCURSOR;
1218yyFillLabel58:
1219 yych = *YYCURSOR;
1220 switch (yych) {
1221 case 0xB7: goto yy49;
1222 default:
1223 if (YYLIMIT <= YYCURSOR) {
1224 if (YYFILL) goto yyFillLabel58;
1225 }
1226 goto yy15;
1227 }
1228yy72:
1229 ++YYCURSOR;
1230yyFillLabel59:
1231 yych = *YYCURSOR;
1232 switch (yych) {
1233 case 0x80 ... 0xBD:
1234 case 0xBF: goto yy49;
1235 default:
1236 if (YYLIMIT <= YYCURSOR) {
1237 if (YYFILL) goto yyFillLabel59;
1238 }
1239 goto yy15;
1240 }
1241yy73:
1242 ++YYCURSOR;
1243yyFillLabel60:
1244 yych = *YYCURSOR;
1245 switch (yych) {
1246 case 0x80: goto yy87;
1247 case 0x81: goto yy88;
1248 case 0x82 ... 0x85:
1249 case 0xB0 ... 0xBE: goto yy53;
1250 case 0x86: goto yy76;
1251 case 0xBF: goto yy77;
1252 default:
1253 if (YYLIMIT <= YYCURSOR) {
1254 if (YYFILL) goto yyFillLabel60;
1255 }
1256 goto yy15;
1257 }
1258yy74:
1259 ++YYCURSOR;
1260yyFillLabel61:
1261 yych = *YYCURSOR;
1262 switch (yych) {
1263 case 0x8C ... 0x8D: goto yy49;
1264 default:
1265 if (YYLIMIT <= YYCURSOR) {
1266 if (YYFILL) goto yyFillLabel61;
1267 }
1268 goto yy15;
1269 }
1270yy75:
1271 ++YYCURSOR;
1272yyFillLabel62:
1273 yych = *YYCURSOR;
1274 switch (yych) {
1275 case 0xB0 ... 0xBF: goto yy49;
1276 default:
1277 if (YYLIMIT <= YYCURSOR) {
1278 if (YYFILL) goto yyFillLabel62;
1279 }
1280 goto yy15;
1281 }
1282yy76:
1283 ++YYCURSOR;
1284yyFillLabel63:
1285 yych = *YYCURSOR;
1286 switch (yych) {
1287 case 0x80 ... 0x8F: goto yy49;
1288 default:
1289 if (YYLIMIT <= YYCURSOR) {
1290 if (YYFILL) goto yyFillLabel63;
1291 }
1292 goto yy15;
1293 }
1294yy77:
1295 ++YYCURSOR;
1296yyFillLabel64:
1297 yych = *YYCURSOR;
1298 switch (yych) {
1299 case 0x80 ... 0xAF: goto yy49;
1300 default:
1301 if (YYLIMIT <= YYCURSOR) {
1302 if (YYFILL) goto yyFillLabel64;
1303 }
1304 goto yy15;
1305 }
1306yy78:
1307 ++YYCURSOR;
1308yyFillLabel65:
1309 yych = *YYCURSOR;
1310 switch (yych) {
1311 case 0x81 ... 0xBF: goto yy49;
1312 default:
1313 if (YYLIMIT <= YYCURSOR) {
1314 if (YYFILL) goto yyFillLabel65;
1315 }
1316 goto yy15;
1317 }
1318yy79:
1319 ++YYCURSOR;
1320yyFillLabel66:
1321 yych = *YYCURSOR;
1322 switch (yych) {
1323 case 0x80 ... 0x8F:
1324 case 0xB0 ... 0xBF: goto yy49;
1325 default:
1326 if (YYLIMIT <= YYCURSOR) {
1327 if (YYFILL) goto yyFillLabel66;
1328 }
1329 goto yy15;
1330 }
1331yy80:
1332 ++YYCURSOR;
1333yyFillLabel67:
1334 yych = *YYCURSOR;
1335 switch (yych) {
1336 case 0x80 ... 0xBD: goto yy49;
1337 default:
1338 if (YYLIMIT <= YYCURSOR) {
1339 if (YYFILL) goto yyFillLabel67;
1340 }
1341 goto yy15;
1342 }
1343yy81:
1344 ++YYCURSOR;
1345yyFillLabel68:
1346 yych = *YYCURSOR;
1347 switch (yych) {
1348 case '0' ... '9':
1349 case 'A' ... 'Z':
1350 case 'a' ... 'z': goto yy89;
1351 default:
1352 if (YYLIMIT <= YYCURSOR) {
1353 if (YYFILL) goto yyFillLabel68;
1354 }
1355 goto yy15;
1356 }
1357yy82:
1358 ++YYCURSOR;
1359yyFillLabel69:
1360 yych = *YYCURSOR;
1361 switch (yych) {
1362 case '!':
1363 case '#' ... ';':
1364 case '=':
1365 case '?' ... '[':
1366 case ']':
1367 case '_':
1368 case 'a' ... 'z':
1369 case '~' ... 0x7F: goto yy82;
1370 case '>': goto yy90;
1371 case '\\': goto yy91;
1372 case 0xC2 ... 0xDF: goto yy92;
1373 case 0xE0: goto yy93;
1374 case 0xE1 ... 0xEF: goto yy94;
1375 case 0xF0: goto yy95;
1376 case 0xF1 ... 0xF3: goto yy96;
1377 case 0xF4: goto yy97;
1378 default:
1379 if (YYLIMIT <= YYCURSOR) {
1380 if (YYFILL) goto yyFillLabel69;
1381 }
1382 goto yy15;
1383 }
1384yy83:
1385 ++YYCURSOR;
1386yyFillLabel70:
1387 yych = *YYCURSOR;
1388 switch (yych) {
1389 case '0' ... '9':
1390 case 'A' ... 'F':
1391 case 'a' ... 'f': goto yy98;
1392 default:
1393 if (YYLIMIT <= YYCURSOR) {
1394 if (YYFILL) goto yyFillLabel70;
1395 }
1396 goto yy15;
1397 }
1398yy84:
1399 ++YYCURSOR;
1400yyFillLabel71:
1401 yych = *YYCURSOR;
1402 switch (yych) {
1403 case '0' ... '9':
1404 case 'A' ... 'F':
1405 case 'a' ... 'f': goto yy99;
1406 default:
1407 if (YYLIMIT <= YYCURSOR) {
1408 if (YYFILL) goto yyFillLabel71;
1409 }
1410 goto yy15;
1411 }
1412yy85:
1413 ++YYCURSOR;
1414yyFillLabel72:
1415 yych = *YYCURSOR;
1416 switch (yych) {
1417 case '0' ... '9':
1418 case 'A' ... 'F':
1419 case 'a' ... 'f': goto yy100;
1420 default:
1421 if (YYLIMIT <= YYCURSOR) {
1422 if (YYFILL) goto yyFillLabel72;
1423 }
1424 goto yy15;
1425 }
1426yy86:
1427 ++YYCURSOR;
1428yyFillLabel73:
1429 yych = *YYCURSOR;
1430 switch (yych) {
1431 case '0' ... '9':
1432 case 'A' ... 'F':
1433 case 'a' ... 'f': goto yy101;
1434 default:
1435 if (YYLIMIT <= YYCURSOR) {
1436 if (YYFILL) goto yyFillLabel73;
1437 }
1438 goto yy15;
1439 }
1440yy87:
1441 ++YYCURSOR;
1442yyFillLabel74:
1443 yych = *YYCURSOR;
1444 switch (yych) {
1445 case 0x8C ... 0x8D:
1446 case 0xBF: goto yy49;
1447 default:
1448 if (YYLIMIT <= YYCURSOR) {
1449 if (YYFILL) goto yyFillLabel74;
1450 }
1451 goto yy15;
1452 }
1453yy88:
1454 ++YYCURSOR;
1455yyFillLabel75:
1456 yych = *YYCURSOR;
1457 switch (yych) {
1458 case 0x80:
1459 case 0xB0 ... 0xBF: goto yy49;
1460 default:
1461 if (YYLIMIT <= YYCURSOR) {
1462 if (YYFILL) goto yyFillLabel75;
1463 }
1464 goto yy15;
1465 }
1466yy89:
1467 yyaccept = 5;
1468 YYMARKER = ++YYCURSOR;
1469yyFillLabel76:
1470 yych = *YYCURSOR;
1471 switch (yych) {
1472 case '-': goto yy81;
1473 case '0' ... '9':
1474 case 'A' ... 'Z':
1475 case 'a' ... 'z': goto yy89;
1476 default:
1477 if (YYLIMIT <= YYCURSOR) {
1478 if (YYFILL) goto yyFillLabel76;
1479 }
1480 it->yyt2 = NULL;
1481 goto yy17;
1482 }
1483yy90:
1484 ++YYCURSOR;
1485 it->yyt3 = NULL;
1486 goto yy17;
1487yy91:
1488 ++YYCURSOR;
1489yyFillLabel77:
1490 yych = *YYCURSOR;
1491 switch (yych) {
1492 case 'U': goto yy102;
1493 case 'u': goto yy103;
1494 default:
1495 if (YYLIMIT <= YYCURSOR) {
1496 if (YYFILL) goto yyFillLabel77;
1497 }
1498 goto yy15;
1499 }
1500yy92:
1501 ++YYCURSOR;
1502yyFillLabel78:
1503 yych = *YYCURSOR;
1504 switch (yych) {
1505 case 0x80 ... 0xBF: goto yy82;
1506 default:
1507 if (YYLIMIT <= YYCURSOR) {
1508 if (YYFILL) goto yyFillLabel78;
1509 }
1510 goto yy15;
1511 }
1512yy93:
1513 ++YYCURSOR;
1514yyFillLabel79:
1515 yych = *YYCURSOR;
1516 switch (yych) {
1517 case 0xA0 ... 0xBF: goto yy92;
1518 default:
1519 if (YYLIMIT <= YYCURSOR) {
1520 if (YYFILL) goto yyFillLabel79;
1521 }
1522 goto yy15;
1523 }
1524yy94:
1525 ++YYCURSOR;
1526yyFillLabel80:
1527 yych = *YYCURSOR;
1528 switch (yych) {
1529 case 0x80 ... 0xBF: goto yy92;
1530 default:
1531 if (YYLIMIT <= YYCURSOR) {
1532 if (YYFILL) goto yyFillLabel80;
1533 }
1534 goto yy15;
1535 }
1536yy95:
1537 ++YYCURSOR;
1538yyFillLabel81:
1539 yych = *YYCURSOR;
1540 switch (yych) {
1541 case 0x90 ... 0xBF: goto yy94;
1542 default:
1543 if (YYLIMIT <= YYCURSOR) {
1544 if (YYFILL) goto yyFillLabel81;
1545 }
1546 goto yy15;
1547 }
1548yy96:
1549 ++YYCURSOR;
1550yyFillLabel82:
1551 yych = *YYCURSOR;
1552 switch (yych) {
1553 case 0x80 ... 0xBF: goto yy94;
1554 default:
1555 if (YYLIMIT <= YYCURSOR) {
1556 if (YYFILL) goto yyFillLabel82;
1557 }
1558 goto yy15;
1559 }
1560yy97:
1561 ++YYCURSOR;
1562yyFillLabel83:
1563 yych = *YYCURSOR;
1564 switch (yych) {
1565 case 0x80 ... 0x8F: goto yy94;
1566 default:
1567 if (YYLIMIT <= YYCURSOR) {
1568 if (YYFILL) goto yyFillLabel83;
1569 }
1570 goto yy15;
1571 }
1572yy98:
1573 ++YYCURSOR;
1574yyFillLabel84:
1575 yych = *YYCURSOR;
1576 switch (yych) {
1577 case '0' ... '9':
1578 case 'A' ... 'F':
1579 case 'a' ... 'f': goto yy46;
1580 default:
1581 if (YYLIMIT <= YYCURSOR) {
1582 if (YYFILL) goto yyFillLabel84;
1583 }
1584 goto yy15;
1585 }
1586yy99:
1587 ++YYCURSOR;
1588yyFillLabel85:
1589 yych = *YYCURSOR;
1590 switch (yych) {
1591 case '0' ... '9':
1592 case 'A' ... 'F':
1593 case 'a' ... 'f': goto yy13;
1594 default:
1595 if (YYLIMIT <= YYCURSOR) {
1596 if (YYFILL) goto yyFillLabel85;
1597 }
1598 goto yy15;
1599 }
1600yy100:
1601 ++YYCURSOR;
1602yyFillLabel86:
1603 yych = *YYCURSOR;
1604 switch (yych) {
1605 case '0' ... '9':
1606 case 'A' ... 'F':
1607 case 'a' ... 'f': goto yy48;
1608 default:
1609 if (YYLIMIT <= YYCURSOR) {
1610 if (YYFILL) goto yyFillLabel86;
1611 }
1612 goto yy15;
1613 }
1614yy101:
1615 ++YYCURSOR;
1616yyFillLabel87:
1617 yych = *YYCURSOR;
1618 switch (yych) {
1619 case '0' ... '9':
1620 case 'A' ... 'F':
1621 case 'a' ... 'f': goto yy31;
1622 default:
1623 if (YYLIMIT <= YYCURSOR) {
1624 if (YYFILL) goto yyFillLabel87;
1625 }
1626 goto yy15;
1627 }
1628yy102:
1629 ++YYCURSOR;
1630yyFillLabel88:
1631 yych = *YYCURSOR;
1632 switch (yych) {
1633 case '0' ... '9':
1634 case 'A' ... 'F':
1635 case 'a' ... 'f': goto yy104;
1636 default:
1637 if (YYLIMIT <= YYCURSOR) {
1638 if (YYFILL) goto yyFillLabel88;
1639 }
1640 goto yy15;
1641 }
1642yy103:
1643 ++YYCURSOR;
1644yyFillLabel89:
1645 yych = *YYCURSOR;
1646 switch (yych) {
1647 case '0' ... '9':
1648 case 'A' ... 'F':
1649 case 'a' ... 'f': goto yy105;
1650 default:
1651 if (YYLIMIT <= YYCURSOR) {
1652 if (YYFILL) goto yyFillLabel89;
1653 }
1654 goto yy15;
1655 }
1656yy104:
1657 ++YYCURSOR;
1658yyFillLabel90:
1659 yych = *YYCURSOR;
1660 switch (yych) {
1661 case '0' ... '9':
1662 case 'A' ... 'F':
1663 case 'a' ... 'f': goto yy106;
1664 default:
1665 if (YYLIMIT <= YYCURSOR) {
1666 if (YYFILL) goto yyFillLabel90;
1667 }
1668 goto yy15;
1669 }
1670yy105:
1671 ++YYCURSOR;
1672yyFillLabel91:
1673 yych = *YYCURSOR;
1674 switch (yych) {
1675 case '0' ... '9':
1676 case 'A' ... 'F':
1677 case 'a' ... 'f': goto yy107;
1678 default:
1679 if (YYLIMIT <= YYCURSOR) {
1680 if (YYFILL) goto yyFillLabel91;
1681 }
1682 goto yy15;
1683 }
1684yy106:
1685 ++YYCURSOR;
1686yyFillLabel92:
1687 yych = *YYCURSOR;
1688 switch (yych) {
1689 case '0' ... '9':
1690 case 'A' ... 'F':
1691 case 'a' ... 'f': goto yy108;
1692 default:
1693 if (YYLIMIT <= YYCURSOR) {
1694 if (YYFILL) goto yyFillLabel92;
1695 }
1696 goto yy15;
1697 }
1698yy107:
1699 ++YYCURSOR;
1700yyFillLabel93:
1701 yych = *YYCURSOR;
1702 switch (yych) {
1703 case '0' ... '9':
1704 case 'A' ... 'F':
1705 case 'a' ... 'f': goto yy109;
1706 default:
1707 if (YYLIMIT <= YYCURSOR) {
1708 if (YYFILL) goto yyFillLabel93;
1709 }
1710 goto yy15;
1711 }
1712yy108:
1713 ++YYCURSOR;
1714yyFillLabel94:
1715 yych = *YYCURSOR;
1716 switch (yych) {
1717 case '0' ... '9':
1718 case 'A' ... 'F':
1719 case 'a' ... 'f': goto yy103;
1720 default:
1721 if (YYLIMIT <= YYCURSOR) {
1722 if (YYFILL) goto yyFillLabel94;
1723 }
1724 goto yy15;
1725 }
1726yy109:
1727 ++YYCURSOR;
1728yyFillLabel95:
1729 yych = *YYCURSOR;
1730 switch (yych) {
1731 case '0' ... '9':
1732 case 'A' ... 'F':
1733 case 'a' ... 'f': goto yy82;
1734 default:
1735 if (YYLIMIT <= YYCURSOR) {
1736 if (YYFILL) goto yyFillLabel95;
1737 }
1738 goto yy15;
1739 }
1740yy110:
1741#line 68 "lexer_nt.re"
1742 {
1743 log_debug ("End of buffer.");
1744 return T_EOF;
1745 }
1746#line 1747 "parser_nt.c"
1747}
1748#line 170 "lexer_nt.re"
1749
1750}
1751
1752
1753VOLK_rc
1754nt_parse_term (const char *rep, VOLK_Term **term)
1755{
1756 ParseIterator it;
1757 parse_init (&it, NULL, rep);
1758
1759 int ttype = lex (&it, term);
1760
1761 free (it.buf);
1762
1763 switch (ttype) {
1764 case T_IRIREF:
1765 case T_LITERAL:
1766 case T_BNODE:
1767 return VOLK_OK;
1768 default:
1769 return VOLK_PARSE_ERR;
1770 }
1771}
1772
1773VOLK_rc
1775 FILE *fh, const char *sh, VOLK_Graph *gr, size_t *ct, char **err_p)
1776{
1777 *err_p = NULL;
1778
1779 if (!fh && !sh) {
1780 log_error ("Neither file handle nor string input provided.");
1781 return VOLK_VALUE_ERR;
1782 }
1783
1784 ParseIterator parse_it;
1785 parse_init (&parse_it, fh, sh);
1786
1787#ifdef VOLK_CODEC_DEBUG
1788 NTParseTrace (stderr, "NT Parser > ");
1789#endif
1790
1791 void *parser = NTParseAlloc (malloc);
1792
1793 VOLK_rc rc;
1794
1795 VOLK_GraphIterator *it = VOLK_graph_add_init (gr);
1796 if (UNLIKELY (!it)) {
1797 VOLK_graph_free (gr);
1798 return VOLK_MEM_ERR;
1799 }
1800
1801 VOLK_Term *term = NULL;
1802
1803 for (;;) {
1804 int ttype = lex (&parse_it, &term);
1805
1806 if (ttype == -1) {
1807 char token[16] = {};
1808 strncpy (token, (const char *)parse_it.tok, 15);
1809
1810 char *err_start = "Parse error near token `";
1811
1812 char err_info [64];
1813 sprintf(
1814 err_info, "[...]' at line %u, character %ld.\n",
1815 parse_it.line, parse_it.cur - parse_it.bol);
1816
1817 size_t err_size = strlen (err_start) + 16 + strlen(err_info);
1818 char *err_str = malloc (err_size);
1819 sprintf (err_str, "%s%s%s", err_start, token, err_info);
1820
1821 rc = VOLK_PARSE_ERR;
1822 *err_p = err_str;
1823 log_error (err_str);
1824
1825 goto finally;
1826 }
1827
1828 NTParse (parser, ttype, term, it);
1829
1830 if (ttype == T_EOF) break;
1831 };
1832
1833 if (ct) *ct = parse_it.ct;
1834
1835 log_info ("Parsed %u triples.", parse_it.ct);
1836 log_debug ("Graph size: %lu", VOLK_graph_size (gr));
1837
1838 rc = parse_it.ct > 0 ? VOLK_OK : VOLK_NORESULT;
1839
1840finally: ;
1841 NTParse (parser, 0, NULL, it);
1842 NTParseFree (parser, free);
1843
1844 free (parse_it.buf);
1845
1847 VOLK_term_free (term);
1848
1849 return rc;
1850}
1851
Codec interface definition and basic elements common to all codecs.
#define UNLIKELY(x)
Definition core.h:39
#define T_IRIREF
Definition grammar_nt.c:19
#define T_EOF
Lemon parser grammar for N-Triples.
Definition grammar_nt.c:17
void NTParseTrace(FILE *TraceFILE, char *zTracePrompt)
Definition grammar_nt.c:308
#define T_WS
Definition grammar_nt.c:23
#define T_LITERAL
Definition grammar_nt.c:21
#define T_BNODE
Definition grammar_nt.c:20
#define T_EOL
Definition grammar_nt.c:22
#define T_DOT
Definition grammar_nt.c:18
#define CHUNK_SIZE
uint8_t * unescape_unicode(const uint8_t *esc_str, size_t size)
Replace \uxxxx and \Uxxxxxxxx with Unicode bytes.
#define VOLK_graph_add_init(...)
Non-transactional version of VOLK_graph_add_init_txn().
Definition graph.h:282
void VOLK_graph_free(VOLK_Graph *gr)
Free a graph.
Definition graph.c:246
void VOLK_graph_iter_free(VOLK_GraphIterator *it)
Free a graph iterator.
Definition graph.c:605
size_t VOLK_graph_size(const VOLK_Graph *gr)
Number of triples in a graph.
Definition graph.c:311
#define log_debug(...)
Definition core.h:273
#define log_trace(...)
Definition core.h:275
#define VOLK_VALUE_ERR
An invalid input value was provided.
Definition core.h:129
#define VOLK_MEM_ERR
Memory allocation error.
Definition core.h:144
#define VOLK_NORESULT
No result yielded.
Definition core.h:100
#define VOLK_OK
Generic success return code.
Definition core.h:83
#define VOLK_PARSE_ERR
Codec parser error.
Definition core.h:126
int VOLK_rc
Definition core.h:79
VOLK_Term * VOLK_lt_literal_new(const char *data, char *lang)
Shortcut to create a language-tagged literal term.
Definition term.h:317
VOLK_Term * VOLK_iriref_new(const char *data)
Create an IRI reference.
Definition term.h:192
VOLK_TermType
Term type.
Definition term.h:31
VOLK_Term * VOLK_literal_new(const char *data, VOLK_Term *datatype)
Shortcut to create a literal term.
Definition term.h:266
void VOLK_term_free(VOLK_Term *term)
Definition term.c:387
VOLK_Term * VOLK_term_new(VOLK_TermType type, const char *data, void *metadata)
Create a new term.
Definition term.c:157
@ VOLK_TERM_LT_LITERAL
Language-tagged string literal.
Definition term.h:37
@ VOLK_TERM_LITERAL
Literal without language tag.
Definition term.h:36
@ VOLK_TERM_BNODE
Blank node.
Definition term.h:38
#define YYCTYPE
TTL is UTF-8 encoded.
#define YYCURSOR
Definition parser_nt.c:26
VOLK_rc nt_parse_doc(FILE *fh, const char *sh, VOLK_Graph *gr, size_t *ct, char **err_p)
Parse an RDF document in N-Triples format.
Definition parser_nt.c:1774
#define YYLIMIT
Definition parser_nt.c:28
#define YYFILL
Definition parser_nt.c:29
void NTParse()
#define YYMARKER
Definition parser_nt.c:27
#define YYCTYPE
TTL is UTF-8 encoded.
Definition parser_nt.c:25
void NTParseFree()
void * NTParseAlloc()
VOLK_rc nt_parse_term(const char *rep, VOLK_Term **term)
Parse a single term.
Definition parser_nt.c:1754
FILE * fh
Input file handle.
Definition parser_nt.c:33
size_t buf_size
Initial allocation for buffer.
Definition parser_nt.c:35
unsigned line
Current line no. (for debugging).
Definition parser_nt.c:44
YYCTYPE * cur
Next input character to be read (YYCURSOR).
Definition parser_nt.c:39
YYCTYPE * yyt1
Definition parser_nt.c:49
const char * sh
Input string. Exclusive with fh.
Definition parser_nt.c:34
bool eof
if we have reached EOF.
Definition parser_nt.c:46
YYCTYPE * buf
Start of buffer.
Definition parser_nt.c:36
YYCTYPE * bol
Definition parser_nt.c:42
YYCTYPE * lim
Definition parser_nt.c:38
unsigned ct
Number of statements parsed.
Definition parser_nt.c:45
YYCTYPE * yyt3
Definition parser_nt.c:49
YYCTYPE * mar
Most recent match (YYMARKER).
Definition parser_nt.c:40
YYCTYPE * yyt2
Definition parser_nt.c:49
YYCTYPE * tok
Start of current token.
Definition parser_nt.c:41
RDF term.
Definition term.h:62