grammar alignment with SPARQL

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