example-d3/webworker.js
/** [19] PathExpr ::= LocationPath
   *                  | FilterExpr
   *                  | FilterExpr '/' RelativeLocationPath
   *                  | FilterExpr '//' RelativeLocationPath
   * Unlike most other nodes, this one always generates a node because
   * at this point all reverse nodesets must turn into a forward nodeset
   */
[19] PathExpr ::= LocationPath
| FilterExpr
| FilterExpr '/' RelativeLocationPath
| FilterExpr '//' RelativeLocationPath
Unlike most other nodes, this one always generates a node because
at this point all reverse nodesets must turn into a forward nodeset
[ 19 ] PathExpr :: = LocationPath | FilterExpr | FilterExpr ' / ' RelativeLocationPath | FilterExpr ' // ' RelativeLocationPath Unlike most other nodes this one always generates a node because at this point all reverse nodesets must turn into a forward nodeset
function pathExpr(stream, a) {
    var filter = filterExpr(stream, a);
    if (null == filter) {
      var loc = locationPath(stream, a);
      if (null == loc) {
        throw new Error
        throw new XPathException(XPathException.INVALID_EXPRESSION_ERR,
                                 'Position ' + stream.position() +
                                 ': The expression shouldn\'t be empty...');
      }
      return a.node('PathExpr', loc);
    }
    var rel = relativeLocationPath(filter, stream, a, false);
    if (filter === rel) return rel;
    else return a.node('PathExpr', rel);
  }
function pathExpr ( stream , a ) { var filter = filterExpr ( stream , a ) ; if ( null == filter ) { var loc = locationPath ( stream , a ) ; if ( null == loc ) { throw new Error throw new XPathException ( XPathException . INVALID_EXPRESSION_ERR , 'Position ' + stream . position ( ) + ': The expression shouldn\'t be empty...' ) ; } return a . node ( 'PathExpr' , loc ) ; } var rel = relativeLocationPath ( filter , stream , a , false ) ; if ( filter === rel ) return rel ; else return a . node ( 'PathExpr' , rel ) ; }
[19] PathExpr ::= LocationPath
                  | FilterExpr
                  | FilterExpr '/' RelativeLocationPath
                  | FilterExpr '//' RelativeLocationPath
 Unlike most other nodes, this one always generates a node because
 at this point all reverse nodesets must turn into a forward nodeset
[ 19 ] PathExpr :: = LocationPath | FilterExpr | FilterExpr ' / ' RelativeLocationPath | FilterExpr ' // ' RelativeLocationPath Unlike most other nodes this one always generates a node because at this point all reverse nodesets must turn into a forward nodeset
// We have to do FilterExpr before LocationPath because otherwise // LocationPath will eat up the name from a function call.