7#line 1 "../../include/volksdata/codec/parser_common.h"
13#ifndef VOLK_PARSER_COMMON_H
14#define VOLK_PARSER_COMMON_H
26#define YYCTYPE uint8_t
27#define YYCURSOR it->cur
28#define YYMARKER it->mar
29#define YYLIMIT it->lim
30#define YYFILL fill(it) == 0
33typedef struct parse_it_t {
51#line 41 "../../include/volksdata/codec/parser_common.h"
75static void parse_init (
ParseIterator *it, FILE *fh,
const char *sh)
83 if (!it->
buf) log_error (
"Error allocating lexer buffer.");
102#line 103 "parser_nt.c"
104#line 90 "../../include/volksdata/codec/parser_common.h"
113 if (it->
eof)
return 1;
115 size_t shift = it->
tok - it->
buf;
116 size_t used = it->
lim - it->
tok;
124 cur_off = it->
cur - it->
buf,
125 tok_off = it->
tok - it->
buf,
126 lim_off = it->
lim - it->
buf,
127 mar_off = it->
mar - it->
buf;
132 log_error (
"Memory allocation error.");
137 it->
cur = it->
buf + cur_off;
138 it->
tok = it->
buf + tok_off;
139 it->
lim = it->
buf + lim_off;
140 it->
mar = it->
buf + mar_off;
142 log_debug (
"Shifting bytes: %zu", shift);
143 memmove (it->
buf, it->
tok, used);
144 log_trace (
"Limit offset before reading data: %zu", it->
lim - it->
tok);
152#line 153 "parser_nt.c"
154#line 136 "../../include/volksdata/codec/parser_common.h"
173#ifdef VOLK_CODEC_DEBUG
181 const YYCTYPE *lit_data_e, *dtype_s, *lang_s;
188#line 189 "parser_nt.c"
191 unsigned int yyaccept = 0;
206 if (
YYFILL)
goto yyFillLabel0;
214#line 134 "nt_def.re.inc"
217 "Invalid token @ %p: %s (\\x%x)",
222#line 223 "parser_nt.c"
232 if (
YYFILL)
goto yyFillLabel1;
237#line 117 "nt_def.re.inc"
243#line 244 "parser_nt.c"
254 if (
YYFILL)
goto yyFillLabel2;
259#line 33 "nt_def.re.inc"
266#line 267 "parser_nt.c"
275 if (
YYFILL)
goto yyFillLabel3;
282 case 0xC2 ... 0xF4:
goto yy14;
295 if (
YYFILL)
goto yyFillLabel4;
299 case 0xC2 ... 0xDF:
goto yy25;
300 case 0xE0:
goto yy26;
301 case 0xE1 ... 0xEF:
goto yy27;
302 case 0xF0:
goto yy28;
303 case 0xF1 ... 0xF3:
goto yy29;
304 case 0xF4:
goto yy30;
308#line 123 "nt_def.re.inc"
312 memcpy (data, it->
tok, size);
313 data [size - 1] =
'\0';
319#line 320 "parser_nt.c"
322#line 110 "nt_def.re.inc"
329#line 330 "parser_nt.c"
342 case 0xC2 ... 0xF4:
goto yy32;
345 if (
YYFILL)
goto yyFillLabel5;
358 if (
YYFILL)
goto yyFillLabel6;
375 if (
YYFILL)
goto yyFillLabel7;
380 case '\\':
goto yy18;
381 case 0xC2 ... 0xDF:
goto yy19;
382 case 0xE0:
goto yy20;
383 case 0xE1 ... 0xEF:
goto yy21;
384 case 0xF0:
goto yy22;
385 case 0xF1 ... 0xF3:
goto yy23;
386 case 0xF4:
goto yy24;
427 if (
YYFILL)
goto yyFillLabel8;
435 lit_data_e = it->
yyt1;
438#line 57 "nt_def.re.inc"
441 size_t size = lit_data_e - it->
tok - 2;
445 char *metadata = NULL;
456 }
else md_marker = NULL;
459 metadata = malloc (size);
460 memcpy (metadata, md_marker + 1, size);
461 metadata [size - 1] =
'\0';
479#line 480 "parser_nt.c"
497 if (
YYFILL)
goto yyFillLabel9;
506 case 0x80 ... 0xBF:
goto yy13;
509 if (
YYFILL)
goto yyFillLabel10;
518 case 0xA0 ... 0xBF:
goto yy19;
521 if (
YYFILL)
goto yyFillLabel11;
530 case 0x80 ... 0xBF:
goto yy19;
533 if (
YYFILL)
goto yyFillLabel12;
542 case 0x90 ... 0xBF:
goto yy21;
545 if (
YYFILL)
goto yyFillLabel13;
554 case 0x80 ... 0xBF:
goto yy21;
557 if (
YYFILL)
goto yyFillLabel14;
566 case 0x80 ... 0x8F:
goto yy21;
569 if (
YYFILL)
goto yyFillLabel15;
578 case 0x80 ... 0xBF:
goto yy8;
581 if (
YYFILL)
goto yyFillLabel16;
590 case 0xA0 ... 0xBF:
goto yy25;
593 if (
YYFILL)
goto yyFillLabel17;
602 case 0x80 ... 0xBF:
goto yy25;
605 if (
YYFILL)
goto yyFillLabel18;
614 case 0x90 ... 0xBF:
goto yy27;
617 if (
YYFILL)
goto yyFillLabel19;
626 case 0x80 ... 0xBF:
goto yy27;
629 if (
YYFILL)
goto yyFillLabel20;
638 case 0x80 ... 0x8F:
goto yy27;
641 if (
YYFILL)
goto yyFillLabel21;
658 case '~' ... 0x7F:
goto yy31;
660 case '\\':
goto yy34;
661 case 0xC2 ... 0xDF:
goto yy35;
662 case 0xE0:
goto yy36;
663 case 0xE1 ... 0xEF:
goto yy37;
664 case 0xF0:
goto yy38;
665 case 0xF1 ... 0xF3:
goto yy39;
666 case 0xF4:
goto yy40;
669 if (
YYFILL)
goto yyFillLabel22;
675#line 45 "nt_def.re.inc"
687#line 688 "parser_nt.c"
697 if (
YYFILL)
goto yyFillLabel23;
706 case 0x80 ... 0xBF:
goto yy31;
709 if (
YYFILL)
goto yyFillLabel24;
718 case 0xA0 ... 0xBF:
goto yy35;
721 if (
YYFILL)
goto yyFillLabel25;
730 case 0x80 ... 0xBF:
goto yy35;
733 if (
YYFILL)
goto yyFillLabel26;
742 case 0x90 ... 0xBF:
goto yy37;
745 if (
YYFILL)
goto yyFillLabel27;
754 case 0x80 ... 0xBF:
goto yy37;
757 if (
YYFILL)
goto yyFillLabel28;
766 case 0x80 ... 0x8F:
goto yy37;
769 if (
YYFILL)
goto yyFillLabel29;
785 case 0xEF ... 0xF3:
goto yy50;
786 case 0xCD:
goto yy54;
787 case 0xE2:
goto yy57;
790 if (
YYFILL)
goto yyFillLabel30;
808 if (
YYFILL)
goto yyFillLabel31;
820 case 'a' ...
'z':
goto yy64;
823 if (
YYFILL)
goto yyFillLabel32;
835 if (
YYFILL)
goto yyFillLabel33;
846 case 'a' ...
'f':
goto yy66;
849 if (
YYFILL)
goto yyFillLabel34;
860 case 'a' ...
'f':
goto yy67;
863 if (
YYFILL)
goto yyFillLabel35;
874 case 'a' ...
'f':
goto yy68;
877 if (
YYFILL)
goto yyFillLabel36;
888 case 'a' ...
'f':
goto yy69;
891 if (
YYFILL)
goto yyFillLabel37;
906 case 'a' ...
'z':
goto yy49;
908 case 0xC2:
goto yy71;
909 case 0xC3:
goto yy52;
911 case 0xCE ... 0xDF:
goto yy53;
912 case 0xCD:
goto yy72;
913 case 0xE0:
goto yy55;
915 case 0xE4 ... 0xEC:
goto yy56;
916 case 0xE2:
goto yy73;
917 case 0xE3:
goto yy58;
918 case 0xED:
goto yy59;
919 case 0xEF:
goto yy60;
920 case 0xF0:
goto yy61;
921 case 0xF1 ... 0xF2:
goto yy62;
922 case 0xF3:
goto yy63;
925 if (
YYFILL)
goto yyFillLabel38;
930#line 98 "nt_def.re.inc"
942#line 943 "parser_nt.c"
950 case 0xB8 ... 0xBF:
goto yy49;
953 if (
YYFILL)
goto yyFillLabel39;
962 case 0x80 ... 0xBF:
goto yy49;
965 if (
YYFILL)
goto yyFillLabel40;
975 case 0xBF:
goto yy49;
978 if (
YYFILL)
goto yyFillLabel41;
987 case 0xA0 ... 0xBF:
goto yy53;
990 if (
YYFILL)
goto yyFillLabel42;
999 case 0x80 ... 0xBF:
goto yy53;
1002 if (
YYFILL)
goto yyFillLabel43;
1011 case 0x80:
goto yy74;
1012 case 0x81:
goto yy75;
1014 case 0xB0 ... 0xBE:
goto yy53;
1015 case 0x86:
goto yy76;
1016 case 0xBF:
goto yy77;
1019 if (
YYFILL)
goto yyFillLabel44;
1028 case 0x80:
goto yy78;
1029 case 0x81 ... 0xBF:
goto yy53;
1032 if (
YYFILL)
goto yyFillLabel45;
1041 case 0x80 ... 0x9F:
goto yy53;
1044 if (
YYFILL)
goto yyFillLabel46;
1054 case 0xB8 ... 0xBE:
goto yy53;
1055 case 0xB7:
goto yy79;
1056 case 0xBF:
goto yy80;
1059 if (
YYFILL)
goto yyFillLabel47;
1068 case 0x90 ... 0xBF:
goto yy56;
1071 if (
YYFILL)
goto yyFillLabel48;
1080 case 0x80 ... 0xBF:
goto yy56;
1083 if (
YYFILL)
goto yyFillLabel49;
1092 case 0x80 ... 0xAF:
goto yy56;
1095 if (
YYFILL)
goto yyFillLabel50;
1105 case '-':
goto yy81;
1107 case 'a' ...
'z':
goto yy64;
1110 if (
YYFILL)
goto yyFillLabel51;
1121 case ' ':
goto yy65;
1127 if (
YYFILL)
goto yyFillLabel52;
1138 case 'a' ...
'f':
goto yy83;
1141 if (
YYFILL)
goto yyFillLabel53;
1152 case 'a' ...
'f':
goto yy84;
1155 if (
YYFILL)
goto yyFillLabel54;
1166 case 'a' ...
'f':
goto yy85;
1169 if (
YYFILL)
goto yyFillLabel55;
1180 case 'a' ...
'f':
goto yy86;
1183 if (
YYFILL)
goto yyFillLabel56;
1196 case 'a' ...
'z':
goto yy49;
1197 case '.':
goto yy70;
1198 case 0xC2:
goto yy71;
1199 case 0xC3:
goto yy52;
1201 case 0xCE ... 0xDF:
goto yy53;
1202 case 0xCD:
goto yy72;
1203 case 0xE0:
goto yy55;
1205 case 0xE4 ... 0xEC:
goto yy56;
1206 case 0xE2:
goto yy73;
1207 case 0xE3:
goto yy58;
1208 case 0xED:
goto yy59;
1209 case 0xEF:
goto yy60;
1210 case 0xF0:
goto yy61;
1211 case 0xF1 ... 0xF2:
goto yy62;
1212 case 0xF3:
goto yy63;
1215 if (
YYFILL)
goto yyFillLabel57;
1224 case 0xB7:
goto yy49;
1227 if (
YYFILL)
goto yyFillLabel58;
1237 case 0xBF:
goto yy49;
1240 if (
YYFILL)
goto yyFillLabel59;
1249 case 0x80:
goto yy87;
1250 case 0x81:
goto yy88;
1252 case 0xB0 ... 0xBE:
goto yy53;
1253 case 0x86:
goto yy76;
1254 case 0xBF:
goto yy77;
1257 if (
YYFILL)
goto yyFillLabel60;
1266 case 0x8C ... 0x8D:
goto yy49;
1269 if (
YYFILL)
goto yyFillLabel61;
1278 case 0xB0 ... 0xBF:
goto yy49;
1281 if (
YYFILL)
goto yyFillLabel62;
1290 case 0x80 ... 0x8F:
goto yy49;
1293 if (
YYFILL)
goto yyFillLabel63;
1302 case 0x80 ... 0xAF:
goto yy49;
1305 if (
YYFILL)
goto yyFillLabel64;
1314 case 0x81 ... 0xBF:
goto yy49;
1317 if (
YYFILL)
goto yyFillLabel65;
1327 case 0xB0 ... 0xBF:
goto yy49;
1330 if (
YYFILL)
goto yyFillLabel66;
1339 case 0x80 ... 0xBD:
goto yy49;
1342 if (
YYFILL)
goto yyFillLabel67;
1353 case 'a' ...
'z':
goto yy89;
1356 if (
YYFILL)
goto yyFillLabel68;
1372 case '~' ... 0x7F:
goto yy82;
1373 case '>':
goto yy90;
1374 case '\\':
goto yy91;
1375 case 0xC2 ... 0xDF:
goto yy92;
1376 case 0xE0:
goto yy93;
1377 case 0xE1 ... 0xEF:
goto yy94;
1378 case 0xF0:
goto yy95;
1379 case 0xF1 ... 0xF3:
goto yy96;
1380 case 0xF4:
goto yy97;
1383 if (
YYFILL)
goto yyFillLabel69;
1394 case 'a' ...
'f':
goto yy98;
1397 if (
YYFILL)
goto yyFillLabel70;
1408 case 'a' ...
'f':
goto yy99;
1411 if (
YYFILL)
goto yyFillLabel71;
1422 case 'a' ...
'f':
goto yy100;
1425 if (
YYFILL)
goto yyFillLabel72;
1436 case 'a' ...
'f':
goto yy101;
1439 if (
YYFILL)
goto yyFillLabel73;
1449 case 0xBF:
goto yy49;
1452 if (
YYFILL)
goto yyFillLabel74;
1462 case 0xB0 ... 0xBF:
goto yy49;
1465 if (
YYFILL)
goto yyFillLabel75;
1475 case '-':
goto yy81;
1478 case 'a' ...
'z':
goto yy89;
1481 if (
YYFILL)
goto yyFillLabel76;
1495 case 'U':
goto yy102;
1496 case 'u':
goto yy103;
1499 if (
YYFILL)
goto yyFillLabel77;
1508 case 0x80 ... 0xBF:
goto yy82;
1511 if (
YYFILL)
goto yyFillLabel78;
1520 case 0xA0 ... 0xBF:
goto yy92;
1523 if (
YYFILL)
goto yyFillLabel79;
1532 case 0x80 ... 0xBF:
goto yy92;
1535 if (
YYFILL)
goto yyFillLabel80;
1544 case 0x90 ... 0xBF:
goto yy94;
1547 if (
YYFILL)
goto yyFillLabel81;
1556 case 0x80 ... 0xBF:
goto yy94;
1559 if (
YYFILL)
goto yyFillLabel82;
1568 case 0x80 ... 0x8F:
goto yy94;
1571 if (
YYFILL)
goto yyFillLabel83;
1582 case 'a' ...
'f':
goto yy46;
1585 if (
YYFILL)
goto yyFillLabel84;
1596 case 'a' ...
'f':
goto yy13;
1599 if (
YYFILL)
goto yyFillLabel85;
1610 case 'a' ...
'f':
goto yy48;
1613 if (
YYFILL)
goto yyFillLabel86;
1624 case 'a' ...
'f':
goto yy31;
1627 if (
YYFILL)
goto yyFillLabel87;
1638 case 'a' ...
'f':
goto yy104;
1641 if (
YYFILL)
goto yyFillLabel88;
1652 case 'a' ...
'f':
goto yy105;
1655 if (
YYFILL)
goto yyFillLabel89;
1666 case 'a' ...
'f':
goto yy106;
1669 if (
YYFILL)
goto yyFillLabel90;
1680 case 'a' ...
'f':
goto yy107;
1683 if (
YYFILL)
goto yyFillLabel91;
1694 case 'a' ...
'f':
goto yy108;
1697 if (
YYFILL)
goto yyFillLabel92;
1708 case 'a' ...
'f':
goto yy109;
1711 if (
YYFILL)
goto yyFillLabel93;
1722 case 'a' ...
'f':
goto yy103;
1725 if (
YYFILL)
goto yyFillLabel94;
1736 case 'a' ...
'f':
goto yy82;
1739 if (
YYFILL)
goto yyFillLabel95;
1744#line 40 "nt_def.re.inc"
1749#line 1750 "parser_nt.c"
1751#line 28 "lexer_nt.re"
1761 parse_init (parse_it, NULL, rep);
1763 int ttype = lex (parse_it, term);
1765 free (parse_it->
buf);
1780 FILE *fh,
const char *sh, VOLK_Graph *gr)
1783 log_error (
"Neither file handle nor string input provided.");
1789 parse_init (parse_it, fh, sh);
1791#ifdef VOLK_CODEC_DEBUG
1808 int ttype = lex (parse_it, &term);
1812 "Lexical error near token `%s[…]` at line %u, character %ld.",
1813 parse_it->
tok, parse_it->
line, parse_it->
cur - parse_it->
bol
1820 NTParse (parser, ttype, term, it);
1822 if (ttype ==
T_EOF)
break;
1825 log_info (
"Parsed %zu triples.", parse_it->
ct);
1831 NTParse (parser, 0, NULL, it);
1834 free (parse_it->
buf);
Codec interface definition and basic elements common to all codecs.
#define T_EOF
Lemon parser grammar for N-Quads.
void NTParseTrace(FILE *TraceFILE, char *zTracePrompt)
#define NLRCCK(exp, _rc)
Return rc return code if exp is NULL.
#define VOLK_VALUE_ERR
An invalid input value was provided.
#define VOLK_MEM_ERR
Memory allocation error.
#define VOLK_NORESULT
No result yielded.
#define VOLK_OK
Generic success return code.
#define VOLK_PARSE_ERR
Codec parser error.
VOLK_Term * VOLK_lt_literal_new(const char *data, char *lang)
Shortcut to create a language-tagged literal term.
VOLK_Term * VOLK_iriref_new(const char *data)
Create an IRI reference.
VOLK_Term * VOLK_literal_new(const char *data, VOLK_Term *datatype)
Shortcut to create a literal term.
void VOLK_term_free(VOLK_Term *term)
VOLK_Term * VOLK_term_new(VOLK_TermType type, const char *data, void *metadata)
Create a new term.
@ VOLK_TERM_LT_LITERAL
Language-tagged string literal.
@ VOLK_TERM_LITERAL
Literal without language tag.
@ VOLK_TERM_BNODE
Blank node.
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().
void VOLK_graph_free(VOLK_Graph *gr)
Free a graph.
#define VOLK_graph_size(...)
Non-transactional version of VOLK_graph_size_txn().
void VOLK_graph_iter_free(VOLK_GraphIterator *it)
Free a graph iterator.
VOLK_rc nt_parse_doc(FILE *fh, const char *sh, VOLK_Graph *gr)
Parse an RDF document in N-Triples format.
VOLK_rc nt_parse_term(const char *rep, VOLK_Term **term)
Parse a single term.
#define YYCTYPE
TTL is UTF-8 encoded.
FILE * fh
Input file handle.
size_t buf_size
Initial allocation for buffer.
uint8_t * buf
Start of buffer.
unsigned line
Current line no. (for debugging).
uint8_t * cur
Next input character to be read (YYCURSOR).
uint8_t * tok
Start of current token.
const char * sh
Input string. Exclusive with fh.
bool eof
if we have reached EOF.
unsigned ct
Number of statements parsed.
uint8_t * mar
Most recent match (YYMARKER).