Grammar update

After updating the grammar from Souri's comments and suggestions, I also put 
in a change to move SPARQL closer to Turtle.

In Turtle, the sign of a number (integer, decimal, double) is part of the 
token making up the number.  A consequence of this is that white space between 
the sign and the digits is not permitted.

http://www.dajobe.org/2004/01/turtle/#sec-grammar

Legal Turtle   --  :x :p +2
Illegal Turtle --  :x :p + 2
                --  :x :p +  2

In SPARQL, it was the case that the grammar said in the parser:

    ('-'|'+') Number

but that place accepts separating white space.

To follow this in SPARQL, I have put in lexer tokens for signed numbers and 
removed the sign handling for literal objects in triple patterns.

Details:

As a consequence, the expression "1+2" is tokens "1" and "+2" whereas it was 
"1", "+" and "2".  The AdditiveExpression rule is expanded to cover this 
situation and to be clearer there different tokens for signed positive and 
negative signed numbers (not strictly necessary) .  A parser will need to 
generate  add(1,+2).

Unary minus/unary plus are unchanged as rules but the parse tree for 3 * -4 is 
now (in prefix notation):

(* 3 -4)
not
(* 3 (- 4))
using unary minus.

--3 is (- -3)


[52] AdditiveExpression     ::=
          MultiplicativeExpression
          ( '+' MultiplicativeExpression |
            '-' MultiplicativeExpression |
            NumericLiteralPositive |
            NumericLiteralNegative )*

A minor side effect of this is that it makes the SPARQL extension to property 
paths easier:

http://lists.w3.org/Archives/Public/public-rdf-dawg-comments/2007Jan/0001.html

because  ":C1 rdfs:subClassOf+ :C2" is now unambiguous whereas previously, the 
"+" could be the unary sign for a number at :C2.  Brackets around the property 
path regex are no longer needed and "(:property)" is no longer a path of one 
unlike ":property" which is a predicate.

It is a language change for triple patterns to be closer to Turtle.  There is 
no language change for expressions but it works a little different.

 Andy

PS FWIW - for quite some time, the SPARQL grammar did not allow a signed 
number in the object slot of a triple pattern.  And no one commented on it, 
formally or informally!

Received on Saturday, 24 February 2007 17:05:52 UTC