module.exports = (function(){function _waka(parser, startRule) {

if(startRule && ! parser.rules[startRule])
  throw new Error('start rule missing: ' + JSON.stringify(startRule))

return {
  getState: function() {
    return parser.state
  },

  getTrace: function(message) {
    return (message ? message + '\n' : '') + parser.state.traceLine()
  },

  exec: function(input) {
    if(! startRule)
      throw new Error('no start rule given')

    parser.state.setInput(input)

    try {
      var value = parser.rules[startRule]()
    }
    catch(err) {
      var error = err
    }

    if(error == null) {
      if(! parser.state.adv || ! parser.state.isEOF())
        var error = new Error('Unexpected syntax in top')
    }

    return {
      success: error == null,
      value: ! error ? value : undefined,
      error: error
    }
  },

  startWith: function(rule) {
    return _waka(parser, rule)
  },
}

}; return _waka((function(){'use strict'; var _rules={}; _rules.NameStartChar = function() { var _R=_P.match(“:”); if(!_P.adv){ _P.adv=true; var $0=_P.cur(); if($0==null){_P.adv=false; var _R=null; }else{ var _R=_P.step(“A”<=$0&&$0<=“Z”); } } if(!_P.adv){ _P.adv=true; var _R=_P.match(“_”); } if(!_P.adv){ _P.adv=true; var $1=_P.cur(); if($1==null){_P.adv=false; var _R=null; }else{ var _R=_P.step(“a”<=$1&&$1<=“z”); } } if(!_P.adv){ _P.adv=true; var $2=_P.cur(); if($2==null){_P.adv=false; var _R=null; }else{ var _R=_P.step(“u00C0”<=$2&&$2<=“u00D6”); } } if(!_P.adv){ _P.adv=true; var $3=_P.cur(); if($3==null){_P.adv=false; var _R=null; }else{ var _R=_P.step(“u00D8”<=$3&&$3<=“u00F6”); } } if(!_P.adv){ _P.adv=true; var $4=_P.cur(); if($4==null){_P.adv=false; var _R=null; }else{ var _R=_P.step(“u00F8”<=$4&&$4<=“u02FF”); } } if(!_P.adv){ _P.adv=true; var $5=_P.cur(); if($5==null){_P.adv=false; var _R=null; }else{ var _R=_P.step(“u0370”<=$5&&$5<=“u037D”); } } if(!_P.adv){ _P.adv=true; var $6=_P.cur(); if($6==null){_P.adv=false; var _R=null; }else{ var _R=_P.step(“u037F”<=$6&&$6<=“u1FFF”); } } if(!_P.adv){ _P.adv=true; var $7=_P.cur(); if($7==null){_P.adv=false; var _R=null; }else{ var _R=_P.step(“u200C”<=$7&&$7<=“u200D”); } } if(!_P.adv){ _P.adv=true; var $8=_P.cur(); if($8==null){_P.adv=false; var _R=null; }else{ var _R=_P.step(“u2070”<=$8&&$8<=“u218F”); } } if(!_P.adv){ _P.adv=true; var $9=_P.cur(); if($9==null){_P.adv=false; var _R=null; }else{ var _R=_P.step(“u2C00”<=$9&&$9<=“u2FEF”); } } if(!_P.adv){ _P.adv=true; var $a=_P.cur(); if($a==null){_P.adv=false; var _R=null; }else{ var _R=_P.step(“u3001”<=$a&&$a<=“uD7FF”); } } if(!_P.adv){ _P.adv=true; var $b=_P.cur(); if($b==null){_P.adv=false; var _R=null; }else{ var _R=_P.step(“uF900”<=$b&&$b<=“uFDCF”); } } if(!_P.adv){ _P.adv=true; var $c=_P.cur(); if($c==null){_P.adv=false; var _R=null; }else{ var _R=_P.step(“uFDF0”<=$c&&$c<=“uFFFD”); } } if(!_P.adv){ _P.adv=true; $d:{var $e=_P.pos; var $f=_P.cur(); if($f==null){_P.adv=false; null; }else{ _P.step(“uD800”<=$f&&$f<=“uDB7F”); } if(!_P.adv) break $d; var $g=_P.cur(); if($g==null){_P.adv=false; null; }else{ _P.step(“uDC00”<=$g&&$g<=“uDFFF”); } var _R=_P.doc.substring($e,_P.pos); } if(!_P.adv) _P.pos=$e; } return _R; } _rules.NameChar = function() { var _R=_rules.NameStartChar(); if(!_P.adv){ _P.adv=true; var _R=_P.match(“-”); } if(!_P.adv){ _P.adv=true; var _R=_P.match(“.”); } if(!_P.adv){ _P.adv=true; var $0=_P.cur(); if($0==null){_P.adv=false; var _R=null; }else{ var _R=_P.step(“0”<=$0&&$0<=“9”); } } if(!_P.adv){ _P.adv=true; var _R=_P.match(“u00B7”); } if(!_P.adv){ _P.adv=true; var $1=_P.cur(); if($1==null){_P.adv=false; var _R=null; }else{ var _R=_P.step(“u0300”<=$1&&$1<=“u036F”); } } if(!_P.adv){ _P.adv=true; var $2=_P.cur(); if($2==null){_P.adv=false; var _R=null; }else{ var _R=_P.step(“u203F”<=$2&&$2<=“u2040”); } } return _R; } _rules.Name = function() { $0:{var $1=_P.pos; _rules.NameStartChar(); if(!_P.adv) break $0; var $2=false; for(;;) { _rules.NameChar(); if(!_P.adv) break; $2=true; }; _P.adv=true; var _R=_P.doc.substring($1,_P.pos); } if(!_P.adv) _P.pos=$1; return _R; } _rules.QName = function() { var _R=_rules.PrefixedName(); if(!_P.adv){ _P.adv=true; var _R=_rules.UnprefixedName(); } return _R; } _rules.PrefixedName = function() { $0:{var $1=_P.pos; _rules.Prefix(); if(!_P.adv) break $0; _P.match(“:”); if(!_P.adv) break $0; _rules.LocalPart(); var _R=_P.doc.substring($1,_P.pos); } if(!_P.adv) _P.pos=$1; return _R; } _rules.UnprefixedName = function() { var _R=_rules.LocalPart(); return _R; } _rules.Prefix = function() { var _R=_rules.NCName(); return _R; } _rules.LocalPart = function() { var _R=_rules.NCName(); return _R; } _rules.NCNameStartChar = function() { var $0=_P.cur(); if($0==null){_P.adv=false; var _R=null; }else{ var _R=_P.step(“A”<=$0&&$0<=“Z”); } if(!_P.adv){ _P.adv=true; var _R=_P.match(“_”); } if(!_P.adv){ _P.adv=true; var $1=_P.cur(); if($1==null){_P.adv=false; var _R=null; }else{ var _R=_P.step(“a”<=$1&&$1<=“z”); } } if(!_P.adv){ _P.adv=true; var $2=_P.cur(); if($2==null){_P.adv=false; var _R=null; }else{ var _R=_P.step(“u00C0”<=$2&&$2<=“u00D6”); } } if(!_P.adv){ _P.adv=true; var $3=_P.cur(); if($3==null){_P.adv=false; var _R=null; }else{ var _R=_P.step(“u00D8”<=$3&&$3<=“u00F6”); } } if(!_P.adv){ _P.adv=true; var $4=_P.cur(); if($4==null){_P.adv=false; var _R=null; }else{ var _R=_P.step(“u00F8”<=$4&&$4<=“u02FF”); } } if(!_P.adv){ _P.adv=true; var $5=_P.cur(); if($5==null){_P.adv=false; var _R=null; }else{ var _R=_P.step(“u0370”<=$5&&$5<=“u037D”); } } if(!_P.adv){ _P.adv=true; var $6=_P.cur(); if($6==null){_P.adv=false; var _R=null; }else{ var _R=_P.step(“u037F”<=$6&&$6<=“u1FFF”); } } if(!_P.adv){ _P.adv=true; var $7=_P.cur(); if($7==null){_P.adv=false; var _R=null; }else{ var _R=_P.step(“u200C”<=$7&&$7<=“u200D”); } } if(!_P.adv){ _P.adv=true; var $8=_P.cur(); if($8==null){_P.adv=false; var _R=null; }else{ var _R=_P.step(“u2070”<=$8&&$8<=“u218F”); } } if(!_P.adv){ _P.adv=true; var $9=_P.cur(); if($9==null){_P.adv=false; var _R=null; }else{ var _R=_P.step(“u2C00”<=$9&&$9<=“u2FEF”); } } if(!_P.adv){ _P.adv=true; var $a=_P.cur(); if($a==null){_P.adv=false; var _R=null; }else{ var _R=_P.step(“u3001”<=$a&&$a<=“uD7FF”); } } if(!_P.adv){ _P.adv=true; var $b=_P.cur(); if($b==null){_P.adv=false; var _R=null; }else{ var _R=_P.step(“uF900”<=$b&&$b<=“uFDCF”); } } if(!_P.adv){ _P.adv=true; var $c=_P.cur(); if($c==null){_P.adv=false; var _R=null; }else{ var _R=_P.step(“uFDF0”<=$c&&$c<=“uFFFD”); } } if(!_P.adv){ _P.adv=true; $d:{var $e=_P.pos; var $f=_P.cur(); if($f==null){_P.adv=false; null; }else{ _P.step(“uD800”<=$f&&$f<=“uDB7F”); } if(!_P.adv) break $d; var $g=_P.cur(); if($g==null){_P.adv=false; null; }else{ _P.step(“uDC00”<=$g&&$g<=“uDFFF”); } var _R=_P.doc.substring($e,_P.pos); } if(!_P.adv) _P.pos=$e; } return _R; } _rules.NCNameChar = function() { var _R=_rules.NCNameStartChar(); if(!_P.adv){ _P.adv=true; var _R=_P.match(“-”); } if(!_P.adv){ _P.adv=true; var _R=_P.match(“.”); } if(!_P.adv){ _P.adv=true; var $0=_P.cur(); if($0==null){_P.adv=false; var _R=null; }else{ var _R=_P.step(“0”<=$0&&$0<=“9”); } } if(!_P.adv){ _P.adv=true; var _R=_P.match(“u00B7”); } if(!_P.adv){ _P.adv=true; var $1=_P.cur(); if($1==null){_P.adv=false; var _R=null; }else{ var _R=_P.step(“u0300”<=$1&&$1<=“u036F”); } } if(!_P.adv){ _P.adv=true; var $2=_P.cur(); if($2==null){_P.adv=false; var _R=null; }else{ var _R=_P.step(“u203F”<=$2&&$2<=“u2040”); } } return _R; } _rules.NCName = function() { $0:{var $1=_P.pos; _rules.NCNameStartChar(); if(!_P.adv) break $0; var $2=false; for(;;) { _rules.NCNameChar(); if(!_P.adv) break; $2=true; }; _P.adv=true; var _R=_P.doc.substring($1,_P.pos); } if(!_P.adv) _P.pos=$1; return _R; } function ParserState() {

this.doc = ''
this.pos = 0
this.adv = true

this.setInput = function(doc) {
  this.doc = doc
  this.pos = 0
  this.adv = true
}

this.isEOF = function() {
  return this.pos == this.doc.length
}

this.cur = function() {
  return _P.doc[_P.pos]
}

this.match = function(str) {
  if(_P.adv = _P.doc.substr(_P.pos, str.length) == str) {
    _P.pos += str.length
    return str
  }
}

this.step = function(flag) {
  if(_P.adv = flag) {
    _P.pos++
    return _P.doc[_P.pos - 1]
  }
}

this.unexpected = function(rule) {
  throw new Error('Unexpected syntax in ' + rule)
}

this.traceLine = function(pos) {
  if(! pos) pos = _P.pos

  var from = _P.doc.lastIndexOf('\n', pos), to = _P.doc.indexOf('\n', pos)

  if(from == -1)
    from = 0
  else
    from++

  if(to == -1)
    to = pos.length

  var lineNo = _P.doc.substring(0, from).split('\n').length
  var line = _P.doc.substring(from, to)
  var pointer = Array(200).join(' ').substr(0, pos - from) + '^^^'

  return (
    'Line ' + lineNo + ':\n' +
    line + '\n' +
    pointer
  )
}

} var _P = new ParserState return {

state: _P,
rules: _rules,

} })(),null)})()