- From: Eric Prud'hommeaux <eric@w3.org>
- Date: Thu, 10 May 2012 23:16:57 -0400
- To: public-rdf-wg@w3.org
I tweaked a few bits of the yacker grammar which I suspect we'd want
to adopt in the Turtle spec. I trimmed out a bunch of extra ()s, had
to \ some characters which I don't believe are permitted anyways by
<http://www.w3.org/TR/REC-xml/#sec-notation> (#xN notation only).
The structural changes were:
Simplified IRIREF from
[132s] IRIREF ::= ('<' ([^<>"{}|^`\]-[#x00-#x20])* | UCHAR '>')
to
[132s] IRIREF ::= '<' ([^#x00-#x20<>\"{}|^`\\] | UCHAR)* '>'
(#sec-notation doesn't tell me the precedence of A | B - c)
Removed ([+-])? before numerics in favor of re-using SPARQL's
[142s] INTEGER_POSITIVE ::= '+' INTEGER
[143s] DECIMAL_POSITIVE ::= '+' DECIMAL
[144s] DOUBLE_POSITIVE ::= '+' DOUBLE
[145s] INTEGER_NEGATIVE ::= '-' INTEGER
[146s] DECIMAL_NEGATIVE ::= '-' DECIMAL
[147s] DOUBLE_NEGATIVE ::= '-' DOUBLE
In STRING_LITERAL_LONG1, Changed ''''' to "'''" 'cause who could
know what "'''''" meant?
In PN_CHARS, changed #00B7 to [#00B7] to work around a yacker
bug. (This is just to document -- of course this doesn't go into
the Turtle spec.
In PN_LOCAL_ESC, changed ''' to "'".
Full yacker grammar
<http://www.w3.org/2005/01/yacker/uploads/turtleAwesome/bnf> follows:
[1] turtleDoc ::= statement*
[2] statement ::= directive '.' | triples '.'
[3] directive ::= prefixID | base
[4] prefixID ::= PREFIX PNAME_NS IRIREF
[5] base ::= BASE IRIREF
[6] triples ::= subject predicateObjectList
[7] predicateObjectList ::= verb objectList (';' verb objectList)* (';')?
[8] objectList ::= object (',' object)*
[9] verb ::= predicate | 'a'
[10] subject ::= iri | blank
[11] predicate ::= iri
[12] object ::= iri | blank | literal
[13] literal ::= RDFLiteral | NumericLiteral | BooleanLiteral
[14] blank ::= BlankNode | blankNodePropertyList | collection
[15] blankNodePropertyList ::= '[' predicateObjectList ']'
[16] collection ::= '(' object* ')'
[60s] RDFLiteral ::= String (LANGTAG | '^^' iri)?
[61s] NumericLiteral ::= NumericLiteralUnsigned | NumericLiteralPositive | NumericLiteralNegative
[62s] NumericLiteralUnsigned ::= INTEGER | DECIMAL | DOUBLE
[63s] NumericLiteralPositive ::= INTEGER_POSITIVE | DECIMAL_POSITIVE | DOUBLE_POSITIVE
[64s] NumericLiteralNegative ::= INTEGER_NEGATIVE | DECIMAL_NEGATIVE | DOUBLE_NEGATIVE
[65s] BooleanLiteral ::= 'true' | 'false'
[66s] String ::= STRING_LITERAL1 | STRING_LITERAL2 | STRING_LITERAL_LONG1 | STRING_LITERAL_LONG2
[67s] iri ::= IRIREF | PrefixedName
[68s] PrefixedName ::= PNAME_LN | PNAME_NS
[69s] BlankNode ::= BLANK_NODE_LABEL | ANON
@terminals
[17] BASE ::= '@base'
[18] PREFIX ::= '@prefix'
[132s] IRIREF ::= '<' ([^#x00-#x20<>\"{}|^`\\] | UCHAR)* '>'
[133s] PNAME_NS ::= PN_PREFIX? ':'
[134s] PNAME_LN ::= PNAME_NS PN_LOCAL
[135s] BLANK_NODE_LABEL ::= '_:' (PN_CHARS_U | [0-9]) ((PN_CHARS | '.')* PN_CHARS)?
[19] LANGTAG ::= BASE | PREFIX | '@' [a-zA-Z]+ ('-' [a-zA-Z0-9]+)*
[139s] INTEGER ::= [0-9]+
[140s] DECIMAL ::= [0-9]* '.' [0-9]+
[141s] DOUBLE ::= [0-9]+ '.' [0-9]* EXPONENT | '.' [0-9]+ EXPONENT | [0-9]+ EXPONENT
[142s] INTEGER_POSITIVE ::= '+' INTEGER
[143s] DECIMAL_POSITIVE ::= '+' DECIMAL
[144s] DOUBLE_POSITIVE ::= '+' DOUBLE
[145s] INTEGER_NEGATIVE ::= '-' INTEGER
[146s] DECIMAL_NEGATIVE ::= '-' DECIMAL
[147s] DOUBLE_NEGATIVE ::= '-' DOUBLE
[148s] EXPONENT ::= [eE] [+-]? [0-9]+
[149s] STRING_LITERAL1 ::= "'" ([^#x27#x5C#xA#xD] | ECHAR | UCHAR)* "'"
[150s] STRING_LITERAL2 ::= '"' ([^#x22#x5C#xA#xD] | ECHAR | UCHAR)* '"'
[151s] STRING_LITERAL_LONG1 ::= "'''" (("'" | "''")? ([^'\\] | ECHAR | UCHAR))* "'''"
[152s] STRING_LITERAL_LONG2 ::= '"""' (('"' | '""')? ([^\"\\] | ECHAR | UCHAR))* '"""'
[19] UCHAR ::= ('\\u' HEX HEX HEX HEX | '\\U' HEX HEX HEX HEX HEX HEX HEX HEX)
[153s] ECHAR ::= '\\' [tbnrf\\\"']
[154s] NIL ::= '(' WS* ')'
[155s] WS ::= #x20 | #x9 | #xD | #xA
[156s] ANON ::= '[' WS* ']'
[157s] PN_CHARS_BASE ::= [A-Z] | [a-z] | [#00C0-#00D6] | [#00D8-#00F6] | [#00F8-#02FF] | [#0370-#037D] | [#037F-#1FFF] | [#200C-#200D] | [#2070-#218F] | [#2C00-#2FEF] | [#3001-#D7FF] | [#F900-#FDCF] | [#FDF0-#FFFD] | [#10000-#EFFFF]
[158s] PN_CHARS_U ::= PN_CHARS_BASE | '_' | ':'
[160s] PN_CHARS ::= PN_CHARS_U | '-' | [0-9] | [#00B7] | [#0300-#036F] | [#203F-#2040]
[161s] PN_PREFIX ::= PN_CHARS_BASE ((PN_CHARS | '.')* PN_CHARS)?
[162s] PN_LOCAL ::= (PN_CHARS_U | [0-9] | PLX) ((PN_CHARS | '.' | PLX)* (PN_CHARS | PLX))?
[163s] PLX ::= PERCENT | PN_LOCAL_ESC
[164s] PERCENT ::= '%' HEX HEX
[165s] HEX ::= [0-9] | [A-F] | [a-f]
[166s] PN_LOCAL_ESC ::= '\\' ('_' | '~' | '.' | '-' | '!' | '$' | '&' | "'" | '(' | ')' | '*' | '+' | ',' | ';' | '=' | '/' | '?' | '#' | '@' | '%')
@pass ::= [ \t\r\n]+
| "#" [^\r\n]*
--
-ericP
Received on Friday, 11 May 2012 03:17:31 UTC