Re: yacker grammar

(replied to old thread for ease of grammar trackability)

I updated the
  http://www.w3.org/2005/01/yacker/uploads/SPARQL_11?lang=perl
yacker grammar to reflect
  http://www.w3.org/2009/sparql/docs/sparql-grammar-11
with the following changes:

Added a "top" to put all of SPARQL under one start production:
+ [0] Top       ::=           QueryUnit | UpdateUnit

  [1]   	QueryUnit 	  ::=   	Query
  [2]   	Query 	  ::=   	Prologue
  ( SelectQuery | ConstructQuery | DescribeQuery | AskQuery )
  [3]   	Prologue 	  ::=   	BaseDecl? PrefixDecl*
  [4]   	BaseDecl 	  ::=   	'BASE' IRI_REF
  [5]   	PrefixDecl 	  ::=   	'PREFIX' PNAME_NS IRI_REF
  [6]   	SelectQuery 	  ::=   	SelectClause DatasetClause* WhereClause SolutionModifier BindingsClause

Added BindingsClause to SubSelect, ConstructQuery, DescribeQuery and AskQuery:
- [7]   	SubSelect 	  ::=   	SelectClause WhereClause SolutionModifier
+ [7]   	SubSelect 	  ::=   	SelectClause WhereClause SolutionModifier BindingsClause
  [8]   	SelectClause 	  ::=   	'SELECT' ( 'DISTINCT' | 'REDUCED' )? ( ( Var | ( '(' Expression 'AS' Var ')' ) )+ | '*' )
- [9]   	ConstructQuery 	  ::=   	'CONSTRUCT' ConstructTemplate DatasetClause* WhereClause SolutionModifier
+ [9]   	ConstructQuery 	  ::=   	'CONSTRUCT' ConstructTemplate DatasetClause* WhereClause SolutionModifier BindingsClause
- [10]   	DescribeQuery 	  ::=   	'DESCRIBE' ( VarOrIRIref+ | '*' ) DatasetClause* WhereClause? SolutionModifier
+ [10]   	DescribeQuery 	  ::=   	'DESCRIBE' ( VarOrIRIref+ | '*' ) DatasetClause* WhereClause? SolutionModifier BindingsClause
- [11]   	AskQuery 	  ::=   	'ASK' DatasetClause* WhereClause
+ [11]   	AskQuery 	  ::=   	'ASK' DatasetClause* WhereClause BindingsClause
  [12]   	DatasetClause 	  ::=   	'FROM' ( DefaultGraphClause | NamedGraphClause )
  [13]   	DefaultGraphClause 	  ::=   	SourceSelector
  [14]   	NamedGraphClause 	  ::=   	'NAMED' SourceSelector
  [15]   	SourceSelector 	  ::=   	IRIref
  [16]   	WhereClause 	  ::=   	'WHERE'? GroupGraphPattern
  [17]   	SolutionModifier 	  ::=   	GroupClause? HavingClause? OrderClause? LimitOffsetClauses?
  [18]   	GroupClause 	  ::=   	'GROUP' 'BY' GroupCondition+

Removed extra parens on 19, 24, 46, 67, 68, 106, 115
- [19]   	GroupCondition 	  ::=   	( BuiltInCall | FunctionCall | '(' Expression ( 'AS' Var )? ')' | Var )
+ [19]   	GroupCondition 	  ::=   	BuiltInCall | FunctionCall | '(' Expression ( 'AS' Var )? ')' | Var
  [20]   	HavingClause 	  ::=   	'HAVING' HavingCondition+
  [21]   	HavingCondition 	  ::=   	Constraint
  [22]   	OrderClause 	  ::=   	'ORDER' 'BY' OrderCondition+
  [23]   	OrderCondition 	  ::=   	( ( 'ASC' | 'DESC' ) BrackettedExpression )
  | ( Constraint | Var )
- [24]   	LimitOffsetClauses 	  ::=   	( LimitClause OffsetClause? | OffsetClause LimitClause? )
+ [24]   	LimitOffsetClauses 	  ::=   	LimitClause OffsetClause? | OffsetClause LimitClause?
  [25]   	LimitClause 	  ::=   	'LIMIT' INTEGER
  [26]   	OffsetClause 	  ::=   	'OFFSET' INTEGER
  [27]   	BindingsClause 	  ::=   	( 'BINDINGS' Var* '{' ( '(' BindingValue+ ')' | NIL )* '}' )?
  [28]   	BindingValue 	  ::=   	IRIref | RDFLiteral | NumericLiteral | BooleanLiteral | 'UNDEF'
  [29]   	UpdateUnit 	  ::=   	Update
  [30]   	Update 	  ::=   	Prologue Update1 ( ';' Update? )?
  [31]   	Update1 	  ::=   	Load | Clear | Drop | Add | Move | Copy | Create | InsertData | DeleteData | DeleteWhere | Modify
  [32]   	Load 	  ::=   	'LOAD' IRIref ( 'INTO' GraphRef )?
  [33]   	Clear 	  ::=   	'CLEAR' 'SILENT'? GraphRefAll
  [34]   	Drop 	  ::=   	'DROP' 'SILENT'? GraphRefAll
  [35]   	Create 	  ::=   	'CREATE' 'SILENT'? GraphRef
  [36]   	Add 	  ::=   	'ADD' 'SILENT'? GraphOrDefault 'TO' GraphOrDefault
  [37]   	Move 	  ::=   	'MOVE' 'SILENT'? GraphOrDefault 'TO' GraphOrDefault
  [38]   	Copy 	  ::=   	'COPY' 'SILENT'? GraphOrDefault 'TO' GraphOrDefault

Made separators for 'INSERT DATA', 'DELETE DATA', 'DELETE WHERE' more whitespace-friendly:
- [39]   	InsertData 	  ::=   	'INSERT DATA' QuadData
+ [39]   	InsertData 	  ::=   	'INSERT[ \t\r\n]+DATA' QuadData
- [40]   	DeleteData 	  ::=   	'DELETE DATA' QuadData
+ [40]   	DeleteData 	  ::=   	'DELETE[ \t\r\n]+DATA' QuadData
- [41]   	DeleteWhere 	  ::=   	'DELETE WHERE' QuadPattern
+ [41]   	DeleteWhere 	  ::=   	'DELETE[ \t\r\n]+WHERE' QuadPattern

  [42]   	Modify 	  ::=   	( 'WITH' IRIref )? ( DeleteClause InsertClause? | InsertClause ) UsingClause* 'WHERE' GroupGraphPattern
  [43]   	DeleteClause 	  ::=   	'DELETE' QuadPattern
  [44]   	InsertClause 	  ::=   	'INSERT' QuadPattern
  [45]   	UsingClause 	  ::=   	'USING' ( IRIref | 'NAMED' IRIref )
- [46]   	GraphOrDefault 	  ::=   	( 'DEFAULT' | 'GRAPH'? IRIref )
+ [46]   	GraphOrDefault 	  ::=   	'DEFAULT' | 'GRAPH'? IRIref
  [47]   	GraphRef 	  ::=   	'GRAPH' IRIref
  [48]   	GraphRefAll 	  ::=   	GraphRef | 'DEFAULT' | 'NAMED' | 'ALL'

QuadPattern and QuadData are redundant for now. I guess the
intention is that e.g. "DELETE WHERE { ?s <p> <o> }" be allowed
but "INSERT DATA { ?s <p> <o> }" not be allowed. I left this alone.
  [49]   	QuadPattern 	  ::=   	'{' Quads '}'
  [50]   	QuadData 	  ::=   	'{' Quads '}'
  [51]   	Quads 	  ::=   	TriplesTemplate? ( QuadsNotTriples '.'? TriplesTemplate? )*
  [52]   	QuadsNotTriples 	  ::=   	'GRAPH' VarOrIRIref '{' TriplesTemplate? '}'
  [53]   	TriplesTemplate 	  ::=   	TriplesSameSubject ( '.' TriplesTemplate? )?
  [54]   	GroupGraphPattern 	  ::=   	'{' ( SubSelect | GroupGraphPatternSub ) '}'
  [55]   	GroupGraphPatternSub 	  ::=   	TriplesBlock? ( GraphPatternNotTriples '.'? TriplesBlock? )*
  [56]   	TriplesBlock 	  ::=   	TriplesSameSubjectPath ( '.' TriplesBlock? )?
  [57]   	GraphPatternNotTriples 	  ::=   	GroupOrUnionGraphPattern | OptionalGraphPattern | MinusGraphPattern | GraphGraphPattern | ServiceGraphPattern | Filter | Bind
  [58]   	OptionalGraphPattern 	  ::=   	'OPTIONAL' GroupGraphPattern
  [59]   	GraphGraphPattern 	  ::=   	'GRAPH' VarOrIRIref GroupGraphPattern
  [60]   	ServiceGraphPattern 	  ::=   	'SERVICE' VarOrIRIref GroupGraphPattern
  [61]   	Bind 	  ::=   	'BIND' '(' Expression 'AS' Var ')'
  [62]   	MinusGraphPattern 	  ::=   	'MINUS' GroupGraphPattern
  [63]   	GroupOrUnionGraphPattern 	  ::=   	GroupGraphPattern ( 'UNION' GroupGraphPattern )*
  [64]   	Filter 	  ::=   	'FILTER' Constraint
  [65]   	Constraint 	  ::=   	BrackettedExpression | BuiltInCall | FunctionCall
  [66]   	FunctionCall 	  ::=   	IRIref ArgList
- [67]   	ArgList 	  ::=   	( NIL | '(' 'DISTINCT'? Expression ( ',' Expression )* ')' )
+ [67]   	ArgList 	  ::=   	NIL | '(' 'DISTINCT'? Expression ( ',' Expression )* ')'
- [68]   	ExpressionList 	  ::=   	( NIL | '(' Expression ( ',' Expression )* ')' )
+ [68]   	ExpressionList 	  ::=   	NIL | '(' Expression ( ',' Expression )* ')'
  [69]   	ConstructTemplate 	  ::=   	'{' ConstructTriples? '}'
  [70]   	ConstructTriples 	  ::=   	TriplesSameSubject ( '.' ConstructTriples? )?
  [71]   	TriplesSameSubject 	  ::=   	VarOrTerm PropertyListNotEmpty | TriplesNode PropertyList
  [72]   	PropertyListNotEmpty 	  ::=   	Verb ObjectList ( ';' ( Verb ObjectList )? )*
  [73]   	PropertyList 	  ::=   	PropertyListNotEmpty?
  [74]   	ObjectList 	  ::=   	Object ( ',' Object )*
  [75]   	Object 	  ::=   	GraphNode
  [76]   	Verb 	  ::=   	VarOrIRIref | 'a'
  [77]   	TriplesSameSubjectPath 	  ::=   	VarOrTerm PropertyListNotEmptyPath | TriplesNode PropertyListPath
  [78]   	PropertyListNotEmptyPath 	  ::=   	( VerbPath | VerbSimple ) ObjectList ( ';' ( ( VerbPath | VerbSimple ) ObjectList )? )*
  [79]   	PropertyListPath 	  ::=   	PropertyListNotEmpty?
  [80]   	VerbPath 	  ::=   	Path
  [81]   	VerbSimple 	  ::=   	Var
  [82]   	Path 	  ::=   	PathAlternative
  [83]   	PathAlternative 	  ::=   	PathSequence ( '|' PathSequence )*
  [84]   	PathSequence 	  ::=   	PathEltOrInverse ( '/' PathEltOrInverse )*
  [85]   	PathElt 	  ::=   	PathPrimary PathMod?
  [86]   	PathEltOrInverse 	  ::=   	PathElt | '^' PathElt
  [87]   	PathMod 	  ::=   	( '*' | '?' | '+' | '{' ( Integer ( ',' ( '}' | Integer '}' ) | '}' ) | ',' Integer '}' ) )
  [88]   	PathPrimary 	  ::=   	( IRIref | 'a' | '!' PathNegatedPropertySet | '(' Path ')' )
  [89]   	PathNegatedPropertySet 	  ::=   	( PathOneInPropertySet | '(' ( PathOneInPropertySet ( '|' PathOneInPropertySet )* )? ')' )
  [90]   	PathOneInPropertySet 	  ::=   	( IRIref | 'a' | '^' ( IRIref | 'a' ) )
  [91]   	Integer 	  ::=   	INTEGER
  [92]   	TriplesNode 	  ::=   	Collection | BlankNodePropertyList
  [93]   	BlankNodePropertyList 	  ::=   	'[' PropertyListNotEmpty ']'
  [94]   	Collection 	  ::=   	'(' GraphNode+ ')'
  [95]   	GraphNode 	  ::=   	VarOrTerm | TriplesNode
  [96]   	VarOrTerm 	  ::=   	Var | GraphTerm
  [97]   	VarOrIRIref 	  ::=   	Var | IRIref
  [98]   	Var 	  ::=   	VAR1 | VAR2
  [99]   	GraphTerm 	  ::=   	IRIref | RDFLiteral | NumericLiteral | BooleanLiteral | BlankNode | NIL
  [100]   	Expression 	  ::=   	ConditionalOrExpression
  [101]   	ConditionalOrExpression 	  ::=   	ConditionalAndExpression ( '||' ConditionalAndExpression )*
  [102]   	ConditionalAndExpression 	  ::=   	ValueLogical ( '&&' ValueLogical )*
  [103]   	ValueLogical 	  ::=   	RelationalExpression

Factored out a RelativeExpression to simplify RelationalExpression rule
and ease life for parser generators; broke up multi-word terminal 'NOT IN':
- [104]   	RelationalExpression 	  ::=   	NumericExpression ( '=' NumericExpression | '!=' NumericExpression | '<' NumericExpression | '>' NumericExpression | '<=' NumericExpression | '>=' NumericExpression | 'IN' ExpressionList | 'NOT IN' ExpressionList )?
+ [104]   	RelationalExpression 	  ::=   	NumericExpression RelativeExpression?
+ [104b]        RelativeExpression 	  ::=   	'=' NumericExpression
+ | '!=' NumericExpression
+ | '<' NumericExpression
+ | '>' NumericExpression
+ | '<=' NumericExpression
+ | '>=' NumericExpression
+ | 'IN' ExpressionList
+ | 'NOT' 'IN' ExpressionList
  [105]   	NumericExpression 	  ::=   	AdditiveExpression
- [106]   	AdditiveExpression 	  ::=   	MultiplicativeExpression ( '+' MultiplicativeExpression | '-' MultiplicativeExpression | ( NumericLiteralPositive | NumericLiteralNegative ) ( ( '*' UnaryExpression ) | ( '/' UnaryExpression ) )? )*
+ [106]   	AdditiveExpression 	  ::=   	MultiplicativeExpression ( '+' MultiplicativeExpression | '-' MultiplicativeExpression | ( NumericLiteralPositive | NumericLiteralNegative ) ( '*' UnaryExpression | '/' UnaryExpression )? )*
  [107]   	MultiplicativeExpression 	  ::=   	UnaryExpression ( '*' UnaryExpression | '/' UnaryExpression )*
  [108]   	UnaryExpression 	  ::=   	  '!' PrimaryExpression
  | '+' PrimaryExpression
  | '-' PrimaryExpression
  | PrimaryExpression
  [109]   	PrimaryExpression 	  ::=   	BrackettedExpression | BuiltInCall | IRIrefOrFunction | RDFLiteral | NumericLiteral | BooleanLiteral | Var | Aggregate
  [110]   	BrackettedExpression 	  ::=   	'(' Expression ')'
  [111]   	BuiltInCall 	  ::=   	  'STR' '(' Expression ')'
  | 'LANG' '(' Expression ')'
  | 'LANGMATCHES' '(' Expression ',' Expression ')'
  | 'DATATYPE' '(' Expression ')'
  | 'BOUND' '(' Var ')'
  | 'IRI' '(' Expression ')'
  | 'URI' '(' Expression ')'
  | 'BNODE' ( '(' Expression ')' | NIL )
  | 'RAND' NIL
  | 'ABS' '(' Expression ')'
  | 'CEIL' '(' Expression ')'
  | 'FLOOR' '(' Expression ')'
  | 'ROUND' '(' Expression ')'
  | 'CONCAT' ExpressionList
  | SubstringExpression
  | 'STRLEN' '(' Expression ')'
  | 'UCASE' '(' Expression ')'
  | 'LCASE' '(' Expression ')'
  | 'ENCODE_FOR_URI' '(' Expression ')'
  | 'CONTAINS' '(' Expression ',' Expression ')'
  | 'STRSTARTS' '(' Expression ',' Expression ')'
  | 'STRENDS' '(' Expression ',' Expression ')'
  | 'YEAR' '(' Expression ')'
  | 'MONTH' '(' Expression ')'
  | 'DAY' '(' Expression ')'
  | 'HOURS' '(' Expression ')'
  | 'MINUTES' '(' Expression ')'
  | 'SECONDS' '(' Expression ')'
  | 'TIMEZONE' '(' Expression ')'
  | 'NOW' NIL
  | 'MD5' '(' Expression ')'
  | 'SHA1' '(' Expression ')'
  | 'SHA224' '(' Expression ')'
  | 'SHA256' '(' Expression ')'
  | 'SHA384' '(' Expression ')'
  | 'SHA512' '(' Expression ')'
  | 'COALESCE' ExpressionList
  | 'IF' '(' Expression ',' Expression ',' Expression ')'
  | 'STRLANG' '(' Expression ',' Expression ')'
  | 'STRDT' '(' Expression ',' Expression ')'
  | 'sameTerm' '(' Expression ',' Expression ')'
  | 'isIRI' '(' Expression ')'
  | 'isURI' '(' Expression ')'
  | 'isBLANK' '(' Expression ')'
  | 'isLITERAL' '(' Expression ')'
  | 'isNUMERIC' '(' Expression ')'
  | RegexExpression
  | ExistsFunc
  | NotExistsFunc
  [112]   	RegexExpression 	  ::=   	'REGEX' '(' Expression ',' Expression ( ',' Expression )? ')'
  [113]   	SubstringExpression 	  ::=   	'SUBSTR' '(' Expression ',' Expression ( ',' Expression )? ')'
  [114]   	ExistsFunc 	  ::=   	'EXISTS' GroupGraphPattern

Broke up terminal:
- [115]   	NotExistsFunc 	  ::=   	'NOT EXISTS' GroupGraphPattern
+ [115]   	NotExistsFunc 	  ::=   	'NOT' 'EXISTS' GroupGraphPattern

Removed outer ()s and factored aggregates with common parameters [[ '(' 'DISTINCT'? Expression ')' ]]:
- [116]   	Aggregate 	  ::=   	( 'COUNT' '(' 'DISTINCT'? ( '*' | Expression ) ')' | 'SUM' '(' 'DISTINCT'? Expression ')' | 'MIN' '(' 'DISTINCT'? Expression ')' | 'MAX' '(' 'DISTINCT'? Expression ')' | 'AVG' '(' 'DISTINCT'? Expression ')' | 'SAMPLE' '(' 'DISTINCT'? Expression ')' | 'GROUP_CONCAT' '(' 'DISTINCT'? Expression ( ';' 'SEPARATOR' '=' String )? ')' )
+ [116]   	Aggregate 	  ::=   	'COUNT' '(' 'DISTINCT'? ( '*' | Expression ) ')' | ( 'SUM' | 'MIN' | 'MAX' | 'AVG' | 'SAMPLE' ) '(' 'DISTINCT'? Expression ')' | 'GROUP_CONCAT' '(' 'DISTINCT'? Expression ( ';' 'SEPARATOR' '=' String )? ')'
  [117]   	IRIrefOrFunction 	  ::=   	IRIref ArgList?
  [118]   	RDFLiteral 	  ::=   	String ( LANGTAG | ( '^^' IRIref ) )?
  [119]   	NumericLiteral 	  ::=   	NumericLiteralUnsigned | NumericLiteralPositive | NumericLiteralNegative
  [120]   	NumericLiteralUnsigned 	  ::=   	INTEGER | DECIMAL | DOUBLE
  [121]   	NumericLiteralPositive 	  ::=   	INTEGER_POSITIVE | DECIMAL_POSITIVE | DOUBLE_POSITIVE
  [122]   	NumericLiteralNegative 	  ::=   	INTEGER_NEGATIVE | DECIMAL_NEGATIVE | DOUBLE_NEGATIVE
  [123]   	BooleanLiteral 	  ::=   	'true' | 'false'
  [124]   	String 	  ::=   	STRING_LITERAL1 | STRING_LITERAL2 | STRING_LITERAL_LONG1 | STRING_LITERAL_LONG2
  [125]   	IRIref 	  ::=   	IRI_REF | PrefixedName
  [126]   	PrefixedName 	  ::=   	PNAME_LN | PNAME_NS
  [127]   	BlankNode 	  ::=   	BLANK_NODE_LABEL | ANON
  [128]   	IRI_REF 	  ::=   	'<' ([^<>"{}|^`\]-[#x00-#x20])* '>'
  [129]   	PNAME_NS 	  ::=   	PN_PREFIX? ':'
  [130]   	PNAME_LN 	  ::=   	PNAME_NS PN_LOCAL
  [131]   	BLANK_NODE_LABEL 	  ::=   	'_:' PN_LOCAL
  [132]   	VAR1 	  ::=   	'?' VARNAME
  [133]   	VAR2 	  ::=   	'$' VARNAME
  [134]   	LANGTAG 	  ::=   	'@' [a-zA-Z]+ ('-' [a-zA-Z0-9]+)*
  [135]   	INTEGER 	  ::=   	[0-9]+
  [136]   	DECIMAL 	  ::=   	[0-9]+ '.' [0-9]* | '.' [0-9]+
  [137]   	DOUBLE 	  ::=   	[0-9]+ '.' [0-9]* EXPONENT | '.' ([0-9])+ EXPONENT | ([0-9])+ EXPONENT
  [138]   	INTEGER_POSITIVE 	  ::=   	'+' INTEGER
  [139]   	DECIMAL_POSITIVE 	  ::=   	'+' DECIMAL
  [140]   	DOUBLE_POSITIVE 	  ::=   	'+' DOUBLE
  [141]   	INTEGER_NEGATIVE 	  ::=   	'-' INTEGER
  [142]   	DECIMAL_NEGATIVE 	  ::=   	'-' DECIMAL
  [143]   	DOUBLE_NEGATIVE 	  ::=   	'-' DOUBLE
  [144]   	EXPONENT 	  ::=   	[eE] [+-]? [0-9]+
  [145]   	STRING_LITERAL1 	  ::=   	"'" ( ([^#x27#x5C#xA#xD]) | ECHAR )* "'"
  [146]   	STRING_LITERAL2 	  ::=   	'"' ( ([^#x22#x5C#xA#xD]) | ECHAR )* '"'
  [147]   	STRING_LITERAL_LONG1 	  ::=   	"'''" ( ( "'" | "''" )? ( [^'\] | ECHAR ) )* "'''"
  [148]   	STRING_LITERAL_LONG2 	  ::=   	'"""' ( ( '"' | '""' )? ( [^"\] | ECHAR ) )* '"""'
  [149]   	ECHAR 	  ::=   	'\' [tbnrf\"']
  [150]   	NIL 	  ::=   	'(' WS* ')'
  [151]   	WS 	  ::=   	#x20 | #x9 | #xD | #xA
  [152]   	ANON 	  ::=   	'[' WS* ']'
  [153]   	PN_CHARS_BASE 	  ::=   	[A-Z] | [a-z] | [#x00C0-#x00D6] | [#x00D8-#x00F6] | [#x00F8-#x02FF] | [#x0370-#x037D] | [#x037F-#x1FFF] | [#x200C-#x200D] | [#x2070-#x218F] | [#x2C00-#x2FEF] | [#x3001-#xD7FF] | [#xF900-#xFDCF] | [#xFDF0-#xFFFD] | [#x10000-#xEFFFF]
  [154]   	PN_CHARS_U 	  ::=   	PN_CHARS_BASE | '_'
  [155]   	VARNAME 	  ::=   	( PN_CHARS_U | [0-9] ) ( PN_CHARS_U | [0-9] | #x00B7 | [#x0300-#x036F] | [#x203F-#x2040] )*
  [156]   	PN_CHARS 	  ::=   	PN_CHARS_U | '-' | [0-9] | #x00B7 | [#x0300-#x036F] | [#x203F-#x2040]
  [157]   	PN_PREFIX 	  ::=   	PN_CHARS_BASE ((PN_CHARS|'.')* PN_CHARS)?
  [158]   	PN_LOCAL 	  ::=   	( PN_CHARS_U | [0-9] ) ((PN_CHARS|'.')* PN_CHARS)?


* Eric Prud'hommeaux <eric@w3.org> [2010-10-19 02:03-0400]
> * Eric Prud'hommeaux <eric@w3.org> [2010-10-18 23:21-0400]
> > I updated the
> >   http://www.w3.org/2005/01/yacker/uploads/SPARQL_11?lang=perl
> > yacker grammar to reflect
> >   http://www.w3.org/2009/sparql/docs/sparql-grammar-11
> > with three small changes:
> > 
> > Added a "top" to put all of SPARQL under one start production:
> > + [0]	Top 	  ::=   	QueryUnit | UpdateUnit
> 
> Removed ()s around RHSs on:
> ~ [19]	GroupCondition 	  ::=   	BuiltInCall | FunctionCall | '(' Expression ( 'AS' Var )? ')' | Var
> ~ [24]	LimitOffsetClauses 	  ::=   	LimitClause OffsetClause? | OffsetClause LimitClause?
> ~ [62]	ArgList 	  ::=   	NIL | '(' 'DISTINCT'? Expression ( ',' Expression )* ')'
> ~ [63]	ExpressionList 	  ::=   	NIL | '(' Expression ( ',' Expression )* ')'
> 
> 
> > Moved the WS*s out of 36-38 and split 39 to avoid the reduce-reuse-recyle error:
> > ~ [36]	InsertData 	  ::=   	'INSERT' 'DATA' QuadData
> > ~ [37]	DeleteData 	  ::=   	'DELETE' 'DATA' QuadData
> > ~ [38]	DeleteWhere 	  ::=   	'DELETE' 'WHERE' QuadPattern # ???
> > ~ [39]	Modify 	  ::=   		( DeleteClause InsertClause? | InsertClause ) UsingClause* 'WHERE' GroupGraphPattern
> > ~ | ( 'WITH' IRIref ) ( DeleteClause InsertClause? | InsertClause ) UsingClause* 'WHERE' GroupGraphPattern
> > 
> > Why do we need QuadData and QuadPattern?
> > ~ [46]	QuadData 	  ::=   	'{' Quads '}' # ???
> > 
> > Removing DeleteWhere and s/QuadPattern/QuadData/g gives no S/R errors.
> 
> Separated 'NOT' 'IN' and 'NOT' 'EXISTS' and shortened RelationalExpression
> ~ [99]	RelationalExpression 	  ::=   	NumericExpression RelativeExpression?
> ~ [00]    RelativeExpression 	  ::=		'=' NumericExpression
> | '!=' NumericExpression
> | '<' NumericExpression
> | '>' NumericExpression
> | '<=' NumericExpression
> | '>=' NumericExpression
> | 'IN' ExpressionList
> | 'NOT' 'IN' ExpressionList
> ~[109]  	NotExistsFunc 	  ::=   	'NOT' 'EXISTS' GroupGraphPattern
> 
> Grouped like aggregate expressions:
> ~ [110]  	Aggregate 	  ::=   	'COUNT' '(' 'DISTINCT'? ( '*' | Expression ) ')' | ( 'SUM' | 'MIN' | 'MAX' | 'AVG' | 'SAMPLE' ) '(' 'DISTINCT'? Expression ')' | 'GROUP_CONCAT' '(' 'DISTINCT'? Expression ( ';' 'SEPARATOR' '=' String )? ')'
> 
> 
> > -- 
> > -ericP
> 
> -- 
> -ericP

-- 
-ericP

Received on Sunday, 2 January 2011 04:40:31 UTC