DOCUMENT START NON-TERMINALS CompilationUnit := Query // **** Debug point Query := Prolog ( SelectClause | ConstructClause | DescribeClause | AskClause ) ( GraphClause )* ( NamedGraphClause )* ( WhereClause )? ( LimitClause )? Prolog := ( BaseDecl )? ( PrefixDecl )* SelectClause := ( ( )? ) DescribeClause := ( ( VarOrURI )+ | ) ConstructClause := ( ConstructTemplate | ) AskClause := GraphClause := ( SourceSelector )+ NamedGraphClause := ( SourceSelector )+ SourceSelector := URIref WhereClause := GraphPattern LimitClause := // ---- General Graph Pattern // Top of graph patterns GraphPattern := PatternGroup // A group made up of a list of triple patterns and other things. // No outer brackets here. PatternGroup := GraphOrPattern GraphOrPattern := GraphAndPattern ( GraphAndPattern )* // TIDY: Check all ()* productions and convert to ()+ GraphAndPattern := ( PatternElement )+ // A single thing -- one of // + a single triple pattern // + A group { ... } // + OPTIONAL // + GRAPH // + UNSAID - removed // + Constraint PatternElement := ( TriplePattern | GroupGraphPattern | NamedGraphPattern | OptionalGraphPattern | ConstraintPattern ) PatternElementAsGroup := ( TriplePattern | GroupGraphPattern ) // ---- The various components of a graph pattern. GroupGraphPattern := PatternGroup NamedGraphPattern := ( PatternElementAsGroup | VarOrURI PatternElementAsGroup ) // Element UnsaidGraphPattern() : { Element el ; } // { // el = PatternElementAsGroup() // { el = new ElementUnsaid(el) ; // return el ; // } // } OptionalGraphPattern := PatternElementAsGroup ConstraintPattern := Expression // ---- Triple Patterns // Merge with next as rename as TriplePattern TriplePattern := VarOrURI VarOrURI VarOrLiteral // -------- -- Construct patterns ConstructTemplate := ( TripleTemplate )+ // Template ConstructGroup() : { Element el ; } // { // { TemplateGroup g = new TemplateGroup() ; } // ( t = ConstructElement() { g.add(t) ;} )+ // { return elg ; } // } // // Template ConstructElement() : { Template t ; } // { // t = TripleTemplate() // { return t ; } // } // Like a triple pattern but with possible bNodes. TripleTemplate := ( VarOrURI | BNode ) VarOrURI ( VarOrLiteral | BNode ) // ---- VarOrURI := ( Var | URIref ) VarOrLiteral := Var | Literal Var := BaseDecl := QuotedURIref PrefixDecl := ( QuotedURIref | QuotedURIref ) // ------------------------------------------------- // Constraint syntax follows. // **** Debug point Expression := ConditionalOrExpression ConditionalOrExpression := ConditionalXorExpression ( ConditionalXorExpression )* ConditionalXorExpression := ConditionalAndExpression ConditionalAndExpression := ValueLogical ( ValueLogical )* // End of boolean expressions // (except unary NOT which is very tightly binding) // PatternElements that are not operations on boolean terms. ValueLogical := StringEqualityExpression StringEqualityExpression := EqualityExpression ( PatternLiteral | PatternLiteral )* EqualityExpression := RelationalExpression ( RelationalExpression | RelationalExpression )? RelationalExpression := NumericExpression ( NumericExpression | NumericExpression | NumericExpression | NumericExpression )? // **** Debug point NumericExpression := AdditiveExpression AdditiveExpression := MultiplicativeExpression ( MultiplicativeExpression | MultiplicativeExpression )* MultiplicativeExpression := UnaryExpression ( UnaryExpression | UnaryExpression | UnaryExpression )* UnaryExpression := ( | ) BuiltinExpression | BuiltinExpression | BuiltinExpression | BuiltinExpression BuiltinExpression := Expression | VarOrLiteral | Expression | Var | Var | Var | Var | URIref Expression | PrimaryExpression PrimaryExpression := ( Var | Literal | FunctionCall | Expression ) FunctionCall := URIref ArgList ArgList := ( VarOrLiteral ( VarOrLiteral )* )? // ---------------------------------- // Literal terms (as in query literals - any value in the query) Literal := URIref | NumericLiteral | TextLiteral NumericLiteral := Integer | FloatingPoint TextLiteral := ( | ) ( )? ( URIref )? PatternLiteral := // Node URL() : { Node n ; } // { // //QuotedURI() // n = URI() { return n ; } // } URIref := QuotedURIref | QName QName := ( | ) BNode := QuotedURIref := Integer := FloatingPoint := DOCUMENT END