97 lines
4.2 KiB
Plaintext
97 lines
4.2 KiB
Plaintext
|
%% Grammar for Turtle as specified in https://www.w3.org/TR/2014/REC-n-triples-20140225/
|
||
|
|
||
|
Nonterminals turtleDoc statement directive prefixID base sparqlPrefix sparqlBase
|
||
|
triples predicateObjectList objectList blankNodePropertyList
|
||
|
verb subject predicate object collection collection_elements
|
||
|
literal numericLiteral rdfLiteral booleanLiteral iri prefixedName blankNode.
|
||
|
|
||
|
Terminals prefix_ns prefix_ln iriref blank_node_label anon
|
||
|
string_literal_quote langtag integer decimal double boolean
|
||
|
'.' ';' ',' '[' ']' '(' ')' '^^' '@prefix' '@base' 'PREFIX' 'BASE' 'a' .
|
||
|
|
||
|
Rootsymbol turtleDoc.
|
||
|
|
||
|
|
||
|
turtleDoc -> statement : ['$1'] .
|
||
|
turtleDoc -> statement turtleDoc : ['$1' | '$2'] .
|
||
|
|
||
|
statement -> directive : {directive, '$1'} .
|
||
|
statement -> triples '.' : {triples, '$1'} .
|
||
|
|
||
|
directive -> prefixID : '$1' .
|
||
|
directive -> sparqlPrefix : '$1' .
|
||
|
directive -> base : '$1' .
|
||
|
directive -> sparqlBase : '$1' .
|
||
|
|
||
|
prefixID -> '@prefix' prefix_ns iriref '.' : {prefix, '$2', to_uri_string('$3')} .
|
||
|
sparqlPrefix -> 'PREFIX' prefix_ns iriref : {prefix, '$2', to_uri_string('$3')} .
|
||
|
sparqlBase -> 'BASE' iriref : {base, to_uri_string('$2')} .
|
||
|
base -> '@base' iriref '.' : {base, to_uri_string('$2')} .
|
||
|
|
||
|
triples -> subject predicateObjectList : { '$1', '$2' }.
|
||
|
triples -> blankNodePropertyList predicateObjectList : { '$1', '$2' }.
|
||
|
triples -> blankNodePropertyList : '$1'.
|
||
|
|
||
|
predicateObjectList -> verb objectList : [{'$1', '$2'}] .
|
||
|
predicateObjectList -> verb objectList ';' : [{'$1', '$2'}] .
|
||
|
predicateObjectList -> verb objectList ';' predicateObjectList : [{'$1', '$2'} | '$4'] .
|
||
|
|
||
|
objectList -> object : ['$1'] .
|
||
|
objectList -> object ',' objectList : ['$1' | '$3'] .
|
||
|
|
||
|
blankNodePropertyList -> '[' predicateObjectList ']' : {blankNodePropertyList, '$2'} .
|
||
|
|
||
|
verb -> 'a' : rdf_type() .
|
||
|
verb -> predicate : '$1' .
|
||
|
subject -> iri : '$1' .
|
||
|
subject -> blankNode : '$1' .
|
||
|
subject -> collection : '$1' .
|
||
|
predicate -> iri : '$1' .
|
||
|
object -> iri : '$1' .
|
||
|
object -> blankNode : '$1' .
|
||
|
object -> collection : '$1' .
|
||
|
object -> blankNodePropertyList : '$1' .
|
||
|
object -> literal : '$1' .
|
||
|
|
||
|
collection -> '(' ')' : {collection, []} .
|
||
|
collection -> '(' collection_elements ')' : {collection, '$2'} .
|
||
|
collection_elements -> object : ['$1'] .
|
||
|
collection_elements -> object collection_elements : ['$1' | '$2'] .
|
||
|
|
||
|
prefixedName -> prefix_ln : '$1' .
|
||
|
prefixedName -> prefix_ns : '$1' .
|
||
|
|
||
|
literal -> rdfLiteral : '$1' .
|
||
|
literal -> numericLiteral : '$1' .
|
||
|
literal -> booleanLiteral : '$1' .
|
||
|
rdfLiteral -> string_literal_quote '^^' iriref : to_literal('$1', {datatype, to_uri('$3')}) .
|
||
|
rdfLiteral -> string_literal_quote langtag : to_literal('$1', {language, to_langtag('$2')}) .
|
||
|
rdfLiteral -> string_literal_quote '@prefix' : to_literal('$1', {language, to_langtag('$2')}) .
|
||
|
rdfLiteral -> string_literal_quote '@base' : to_literal('$1', {language, to_langtag('$2')}) .
|
||
|
rdfLiteral -> string_literal_quote : to_literal('$1') .
|
||
|
numericLiteral -> integer : to_literal('$1') .
|
||
|
numericLiteral -> decimal : to_literal('$1') .
|
||
|
numericLiteral -> double : to_literal('$1') .
|
||
|
booleanLiteral -> boolean : to_literal('$1') .
|
||
|
|
||
|
iri -> iriref : to_uri('$1') .
|
||
|
iri -> prefixedName : '$1' .
|
||
|
|
||
|
blankNode -> blank_node_label : to_bnode('$1') .
|
||
|
blankNode -> anon : {anon} .
|
||
|
|
||
|
|
||
|
Erlang code.
|
||
|
|
||
|
to_uri_string(IRIREF) -> 'Elixir.RDF.Serialization.ParseHelper':to_uri_string(IRIREF) .
|
||
|
to_uri(IRIREF) ->
|
||
|
case 'Elixir.RDF.Serialization.ParseHelper':to_uri(IRIREF) of
|
||
|
{ok, URI} -> URI;
|
||
|
{error, ErrorLine, Message} -> return_error(ErrorLine, Message)
|
||
|
end.
|
||
|
to_bnode(BLANK_NODE) -> 'Elixir.RDF.Serialization.ParseHelper':to_bnode(BLANK_NODE).
|
||
|
to_literal(STRING_LITERAL_QUOTE) -> 'Elixir.RDF.Serialization.ParseHelper':to_literal(STRING_LITERAL_QUOTE).
|
||
|
to_literal(STRING_LITERAL_QUOTE, Type) -> 'Elixir.RDF.Serialization.ParseHelper':to_literal(STRING_LITERAL_QUOTE, Type).
|
||
|
to_langtag(LANGTAG) -> 'Elixir.RDF.Serialization.ParseHelper':to_langtag(LANGTAG).
|
||
|
rdf_type() -> 'Elixir.RDF.Serialization.ParseHelper':rdf_type().
|