diff options
author | Dave Beckett <dave@dajobe.org> | 2011-05-10 21:55:16 -0700 |
---|---|---|
committer | Dave Beckett <dave@dajobe.org> | 2011-05-10 21:55:16 -0700 |
commit | b95c139bbfefb2eb884fa062ebe681a599c3454a (patch) | |
tree | 2e95de5c07627b931fa5707ab36ead5391ecbb37 | |
parent | 0b13986fb02ac51e7ee86ec7cebd35ae0dac15c3 (diff) | |
download | raptor-b95c139bbfefb2eb884fa062ebe681a599c3454a.tar.gz |
More Turtle streaming fixes
Expect 2 shift/reduce clashes now.
Removed terminal token COLONMINUS
Added token GRAPH_NAME_LEFT_CURLY returning a uri
(propertyListOpt): Added for handling an empty property list in a
couple of cases.
(graphName): Removed; synonymous / ambiguous with resource.
(colonMinusOpt): Removed.
(graph): Get it all from terminal GRAPH_NAME_LEFT_CURLY
(triplesList): handle a list with optional terminating DOT
(dotTriplesList): Added to handle list of triples with DOT between
them
(statementList): Alter to handle optional terminating DOT
(statement): Use triples
(triples): remove empty case.
(propertyListOpt): Added to allow an empty propertyList
(blank): use propertyListOpt
-rw-r--r-- | src/turtle_parser.y | 64 |
1 files changed, 28 insertions, 36 deletions
diff --git a/src/turtle_parser.y b/src/turtle_parser.y index b31fc6f4..18b39d0a 100644 --- a/src/turtle_parser.y +++ b/src/turtle_parser.y @@ -123,7 +123,7 @@ static void raptor_turtle_generate_statement(raptor_parser *parser, raptor_state int integer; /* 0+ for a xsd:integer datatyped RDF literal */ } -%expect 0 +%expect 2 /* others */ @@ -140,7 +140,6 @@ static void raptor_turtle_generate_statement(raptor_parser *parser, raptor_state %token RIGHT_ROUND ")" %token LEFT_CURLY "{" %token RIGHT_CURLY "}" -%token COLONMINUS ":-" %token TRUE_TOKEN "true" %token FALSE_TOKEN "false" %token PREFIX "@prefix" @@ -149,6 +148,7 @@ static void raptor_turtle_generate_statement(raptor_parser *parser, raptor_state /* literals */ %token <string> STRING_LITERAL "string literal" %token <uri> URI_LITERAL "URI literal" +%token <uri> GRAPH_NAME_LEFT_CURLY "Graph URI literal {" %token <string> BLANK_LITERAL "blank node" %token <uri> QNAME_LITERAL "QName" %token <string> IDENTIFIER "identifier" @@ -159,8 +159,8 @@ static void raptor_turtle_generate_statement(raptor_parser *parser, raptor_state /* syntax error */ %token ERROR_TOKEN -%type <identifier> subject predicate object verb literal resource blank collection graphName -%type <sequence> objectList itemList propertyList +%type <identifier> subject predicate object verb literal resource blank collection +%type <sequence> objectList itemList propertyList propertyListOpt /* tidy up tokens after errors */ @@ -177,29 +177,20 @@ static void raptor_turtle_generate_statement(raptor_parser *parser, raptor_state %destructor { if($$) raptor_free_term($$); -} subject predicate object verb literal resource blank collection graphName +} subject predicate object verb literal resource blank collection %destructor { if($$) raptor_free_sequence($$); -} objectList itemList propertyList +} objectList itemList propertyList propertyListOpt %% Document : statementList -; +;; -colonMinusOpt: COLONMINUS -{ - raptor_parser* parser = (raptor_parser *)rdf_parser; - raptor_turtle_parser* turtle_parser = (raptor_turtle_parser*)parser->context; - if(!turtle_parser->trig) - turtle_parser_error(rdf_parser, ":- is not allowed in Turtle"); -} -| /* empty */ -; -graph: graphName colonMinusOpt LEFT_CURLY +graph: GRAPH_NAME_LEFT_CURLY { /* action in mid-rule so this is run BEFORE the triples in graphBody */ raptor_parser* parser = (raptor_parser *)rdf_parser; @@ -211,7 +202,8 @@ graph: graphName colonMinusOpt LEFT_CURLY else { if(turtle_parser->graph_name) raptor_free_term(turtle_parser->graph_name); - turtle_parser->graph_name = $1; /* becomes owner of $1 */ + turtle_parser->graph_name = raptor_new_term_from_uri(((raptor_parser*)rdf_parser)->world, $1); + raptor_free_uri($1); raptor_parser_start_graph(parser, turtle_parser->graph_name->value.uri, 1); } } @@ -257,31 +249,28 @@ LEFT_CURLY } ; -graphName: resource -; graphBody: triplesList | /* empty */ ; -triplesList: triples -| -terminatedTriples triplesList -| -terminatedTriples +triplesList: dotTriplesList +| dotTriplesList DOT ; -terminatedTriples: triples DOT +dotTriplesList: triples +| dotTriplesList DOT triples ; statementList: statementList statement -| /* empty line */ +| statementList statement DOT +| /* empty */ ; statement: directive | graph -| terminatedTriples +| triples ; triples: subject propertyList @@ -613,13 +602,6 @@ propertyList: propertyList SEMICOLON verb objectList $$ = $2; } -| /* empty */ -{ -#if RAPTOR_DEBUG > 1 - printf("propertyList 4\n empty returning NULL\n\n"); -#endif - $$ = NULL; -} | propertyList SEMICOLON { $$ = $1; @@ -945,6 +927,16 @@ resource: URI_LITERAL ; +propertyListOpt: propertyList +{ + $$ = $1; +} +| /* empty */ +{ + $$ = NULL; +} + + blank: BLANK_LITERAL { const unsigned char *id; @@ -962,7 +954,7 @@ blank: BLANK_LITERAL if(!$$) YYERROR; } -| LEFT_SQUARE propertyList RIGHT_SQUARE +| LEFT_SQUARE propertyListOpt RIGHT_SQUARE { int i; const unsigned char *id; |