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