// June 28 DAWG grammar // Notes for the tail form: // javacc will not know that RBRACE is always the terminating token. // This confuses GroupOrUnionPattern Element GroupGraphPattern() : {} { { ElementGroup elg = new ElementGroup() ; } GraphPattern(elg) {return elg ; } } void GraphPattern(ElementGroup elg) : { Element el = null ; } { (Triples(elg) ()? )? ( el = GraphPatternNotTriples() { elg.addElement(el) ; } ()? GraphPattern(elg) )? } // ----------------------------------------------- // Version in which DOT is NOT optional after a triples, // if anything else occurs. Element GroupGraphPattern() : {} { { ElementGroup elg = new ElementGroup() ; } GroupGraphPatternTail(elg) { return elg ; } } // Does not end in a DOT void GroupGraphPatternTail(ElementGroup elg) : { Element el = null ;} { ( Triples1(elg) // ( el = GraphPatternNotTriples() { elg.addElement(el) ; } // GroupGraphPatternTail(elg) // | GroupGraphPatternTail(elg) // )? // Fixed DOT after triples if there is more ( GroupGraphPatternTail(elg) )? | el = GraphPatternNotTriples() { elg.addElement(el) ; } GroupGraphPatternTail(elg) )? } // Bare patterns // ----------------------------------------------- void WhereClause() : { Element el ; } { LOOKAHEAD(2) el = QueryPattern() { getQuery().setQueryElement(el) ; } | el = GroupGraphPattern() { getQuery().setQueryElement(el) ; } } . . . . Element QueryPattern() : { Element el ; } { // el = GroupGraphPattern() { return el ; } { ElementGroup elg = new ElementGroup() ; } ( el = GraphPatternNotTriples() { elg.addElement(el) ; } ()? QueryPatternTail(elg) | Triples(elg) ()? ( el = GraphPatternNotTriples() { elg.addElement(el) ; } ()? QueryPatternTail(elg) )? ) { return compressGroupOfOneGroup(elg) ; } }