- From: Andy Seaborne <andy.seaborne@epimorphics.com>
- Date: Tue, 19 Oct 2010 08:46:37 +0100
- To: Eric Prud'hommeaux <eric@w3.org>
- CC: public-rdf-dawg@w3.org
Hi Eric, On 19/10/10 04:21, Eric Prud'hommeaux wrote: > 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 That is ambiguous in an LL(1) grammar (both start Prologue) - there was a comment about this a while ago. > > 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 # ??? Fixed. > ~ [39] Modify ::= ( DeleteClause InsertClause? | InsertClause ) UsingClause* 'WHERE' GroupGraphPattern > ~ | ( 'WITH' IRIref ) ( DeleteClause InsertClause? | InsertClause ) UsingClause* 'WHERE' GroupGraphPattern Is there a way to write this without the duplication? Modify ::= ( 'WITH' IRIref )? Modify2 Modify2 ::= ( DeleteClause InsertClause? | InsertClause ) UsingClause* 'WHERE' GroupGraphPattern > > Why do we need QuadData and QuadPattern? > ~ [46] QuadData ::= '{' Quads '}' # ??? Because QuadData can't have variables in it, but QuadPattern can. Rather than writing out the triples+GRAPH rules twice, once for with variable and once for without (which wouldn't work in LALR(1) anyway), the grammar uses different names for these two cases so there is something to hang some (unwritten) text notes from. > > Removing DeleteWhere and s/QuadPattern/QuadData/g gives no S/R errors. > Thanks for the comments - if you could let me know about [39] for LALR, that would be great. Andy
Received on Tuesday, 19 October 2010 07:47:15 UTC