XPathParser { public void parseQuery() throws SirixXPathException { do { mToken = mScanner.nextToken(); } while (mToken.getType() == TokenType.SPACE); parseExpression(); if (mToken.getType() != TokenType.END) { throw new IllegalStateException("The query has not been processed completely."); } } XPathParser(final XmlNodeReadOnlyTrx rtx, final String mQuery); void parseQuery(); Axis getQueryPipeline();  }
@Test public void testEBNF() throws SirixException { XPathParser parser = new XPathParser(holder.getXmlNodeReadTrx(), "/p:a"); parser.parseQuery(); parser = new XPathParser(holder.getXmlNodeReadTrx(), "/p:a/node(), /b/descendant-or-self::adsfj"); parser.parseQuery(); parser = new XPathParser(holder.getXmlNodeReadTrx(), "for $i in /p:a return $i"); parser.parseQuery(); parser = new XPathParser(holder.getXmlNodeReadTrx(), "for $i in /p:a return /p:a"); parser.parseQuery(); parser = new XPathParser(holder.getXmlNodeReadTrx(), "child::element(person)"); parser.parseQuery(); parser = new XPathParser(holder.getXmlNodeReadTrx(), "child::element(person, xs:string)"); parser.parseQuery(); parser = new XPathParser(holder.getXmlNodeReadTrx(), " child::element(*, xs:string)"); parser.parseQuery(); parser = new XPathParser(holder.getXmlNodeReadTrx(), "child::element()"); parser.parseQuery(); parser = new XPathParser(holder.getXmlNodeReadTrx(), "/b instance of item()"); parser.parseQuery(); }