• generated parser API

    • parse

      • parses input2ms

        const e=t.generate("start = 'a'");o(e.parse("a")).to.equal("a")
      • parses input in library mode1ms

        const e=t.generate("start = 'a'").parse("a",{peg$library:!0});o(e.peg$result).to.equal("a"),o(e.peg$success).to.equal(!0),o(e.peg$throw).to.equal(void 0)
      • throws an exception on syntax error3ms

        const e=t.generate("start = 'a'");o((()=>{e.parse("b")})).to.throw()
      • gives partial result on syntax error in library mode3ms

        const e=t.generate("start = 'a'+").parse("aab",{peg$library:!0});o(e.peg$result).to.deep.equal(["a","a"]),o(e.peg$success).to.equal(!1),o(e.peg$throw).to.throw('Expected "a" or end of input but "b" found.')
      • correctly describe character class in syntax error2ms

        const e=t.generate("start = [123-5]");o((()=>{e.parse("0")})).to.throw("[123-5]")
      • accepts custom options1ms

        t.generate("start = 'a'").parse("a",{foo:42})
      • start rule

      • tracing

        • default tracer

          • traces using console.log (if console is defined)1ms

            const t=["1:1-1:1 rule.enter start","1:1-1:1 rule.enter   a","1:1-1:1 rule.fail    a","1:1-1:1 rule.enter   b","1:1-1:2 rule.match   b","1:1-1:2 rule.match start"];"object"==typeof console&&a(console,"log");try{e.parse("b"),"object"==typeof console&&(o(console.log.callCount).to.equal(t.length),t.forEach(((e,t)=>{const r=console.log.getCall(t);o(r.calledWithExactly(e)).to.equal(!0)})))}finally{"object"==typeof console&&console.log.restore()}
        • custom tracers

          • trace

            • receives tracing events1ms

              const t=[{type:"rule.enter",rule:"start",location:{source:void 0,start:{offset:0,line:1,column:1},end:{offset:0,line:1,column:1}}},{type:"rule.enter",rule:"a",location:{source:void 0,start:{offset:0,line:1,column:1},end:{offset:0,line:1,column:1}}},{type:"rule.fail",rule:"a",location:{source:void 0,start:{offset:0,line:1,column:1},end:{offset:0,line:1,column:1}}},{type:"rule.enter",rule:"b",location:{source:void 0,start:{offset:0,line:1,column:1},end:{offset:0,line:1,column:1}}},{type:"rule.match",rule:"b",result:"b",location:{source:void 0,start:{offset:0,line:1,column:1},end:{offset:1,line:1,column:2}}},{type:"rule.match",rule:"start",result:"b",location:{source:void 0,start:{offset:0,line:1,column:1},end:{offset:1,line:1,column:2}}}],a={trace:r()};e.parse("b",{tracer:a}),o(a.trace.callCount).to.equal(t.length),t.forEach(((e,t)=>{const r=a.trace.getCall(t);o(r.calledWithExactly(e)).to.equal(!0)}))
  • Peggy API

    • has the correct VERSION0ms

      expect(peg.VERSION).to.equal(pkg.version),globalThis.peggyVersion=peg.VERSION
    • generate

      • generates a parser1ms

        const e=peg.generate("start = 'a'");expect(e).to.be.an("object"),expect(e.parse("a")).to.equal("a")
      • throws an exception on syntax error2ms

        expect((()=>{peg.generate("start = @")})).to.throw(),expect((()=>{peg.generate("start = 'a'\n")})).to.throw(),expect((()=>{peg.generate("start = 'a'\nŸ")})).to.throw()
      • throws an exception on semantic error0ms

        expect((()=>{peg.generate("start = undefined")})).to.throw()
      • throws an exception on bad startRule0ms

        expect((()=>{peg.parser.parse("start = 'a'",{startRule:"BAD_START_RULE"})})).to.throw()
      • accepts custom options0ms

        peg.generate("start = 'a'",{grammarSource:42})
      • allowed start rules

        • when |allowedStartRules| is not set

          • generated parser can start only from the first rule1ms

            const t=peg.generate(e);expect(t.parse("x",{startRule:"a"})).to.equal("x"),expect((()=>{t.parse("x",{startRule:"b"})})).to.throw(),expect((()=>{t.parse("x",{startRule:"c"})})).to.throw()
        • when |allowedStartRules| is set

          • generated parser can start only from specified rules1ms

            const t=peg.generate(e,{allowedStartRules:["b","c"]});expect((()=>{t.parse("x",{startRule:"a"})})).to.throw(),expect(t.parse("x",{startRule:"b"})).to.equal("x"),expect(t.parse("x",{startRule:"c"})).to.equal("x")
      • intermediate results caching

        • when |cache| is not set

          • generated parser doesn't cache intermediate parse results2ms

            const t=peg.generate(e);expect(t.parse("ac")).to.equal(2)
        • when |cache| is set to |false|

          • generated parser doesn't cache intermediate parse results2ms

            const t=peg.generate(e,{cache:!1});expect(t.parse("ac")).to.equal(2)
        • when |cache| is set to |true|

          • generated parser caches intermediate parse results2ms

            const t=peg.generate(e,{cache:!0});expect(t.parse("ac")).to.equal(1)
      • tracing

        • when |trace| is not set

          • generated parser doesn't trace0ms

            const t=peg.generate(e),r={trace:spy()};t.parse("a",{tracer:r}),expect(r.trace.called).to.equal(!1)
        • when |trace| is set to |false|

          • generated parser doesn't trace0ms

            const t=peg.generate(e,{trace:!1}),r={trace:spy()};t.parse("a",{tracer:r}),expect(r.trace.called).to.equal(!1)
        • when |trace| is set to |true|

          • generated parser traces1ms

            const t=peg.generate(e,{trace:!0}),r={trace:spy()};t.parse("a",{tracer:r}),expect(r.trace.called).to.equal(!0)
      • output

        • when |output| is not set

          • returns generated parser object1ms

            const e=peg.generate(grammar);expect(e).to.be.an("object"),expect(e.parse("a")).to.equal("a")
        • when |output| is set to |"parser"|

          • returns generated parser object1ms

            const e=peg.generate(grammar,{output:"parser"});expect(e).to.be.an("object"),expect(e.parse("a")).to.equal("a")
        • when |output| is set to |"source"|

          • returns generated parser source code0ms

            const source=peg.generate(grammar,{output:"source"});expect(source).to.be.a("string"),expect(eval(source).parse("a")).to.equal("a")
        • when |output| is set to |"ast"|

          • returns generated parser AST1ms

            const e=peg.generate(grammar,{output:"ast"});expect(e).to.be.an("object"),expect(e).to.be.like(peg.parser.parse(grammar))
      • reserved words

        • throws an exception on reserved JS words used as a label

          • break0ms

            expect((()=>{peg.generate(["start = "+e+":end","end = 'a'"].join("\n"),{output:"source"})})).to.throw(peg.parser.SyntaxError)
          • case0ms

            expect((()=>{peg.generate(["start = "+e+":end","end = 'a'"].join("\n"),{output:"source"})})).to.throw(peg.parser.SyntaxError)
          • catch0ms

            expect((()=>{peg.generate(["start = "+e+":end","end = 'a'"].join("\n"),{output:"source"})})).to.throw(peg.parser.SyntaxError)
          • class0ms

            expect((()=>{peg.generate(["start = "+e+":end","end = 'a'"].join("\n"),{output:"source"})})).to.throw(peg.parser.SyntaxError)
          • const0ms

            expect((()=>{peg.generate(["start = "+e+":end","end = 'a'"].join("\n"),{output:"source"})})).to.throw(peg.parser.SyntaxError)
          • continue1ms

            expect((()=>{peg.generate(["start = "+e+":end","end = 'a'"].join("\n"),{output:"source"})})).to.throw(peg.parser.SyntaxError)
          • debugger0ms

            expect((()=>{peg.generate(["start = "+e+":end","end = 'a'"].join("\n"),{output:"source"})})).to.throw(peg.parser.SyntaxError)
          • default0ms

            expect((()=>{peg.generate(["start = "+e+":end","end = 'a'"].join("\n"),{output:"source"})})).to.throw(peg.parser.SyntaxError)
          • delete1ms

            expect((()=>{peg.generate(["start = "+e+":end","end = 'a'"].join("\n"),{output:"source"})})).to.throw(peg.parser.SyntaxError)
          • do0ms

            expect((()=>{peg.generate(["start = "+e+":end","end = 'a'"].join("\n"),{output:"source"})})).to.throw(peg.parser.SyntaxError)
          • else0ms

            expect((()=>{peg.generate(["start = "+e+":end","end = 'a'"].join("\n"),{output:"source"})})).to.throw(peg.parser.SyntaxError)
          • export1ms

            expect((()=>{peg.generate(["start = "+e+":end","end = 'a'"].join("\n"),{output:"source"})})).to.throw(peg.parser.SyntaxError)
          • extends0ms

            expect((()=>{peg.generate(["start = "+e+":end","end = 'a'"].join("\n"),{output:"source"})})).to.throw(peg.parser.SyntaxError)
          • finally0ms

            expect((()=>{peg.generate(["start = "+e+":end","end = 'a'"].join("\n"),{output:"source"})})).to.throw(peg.parser.SyntaxError)
          • for0ms

            expect((()=>{peg.generate(["start = "+e+":end","end = 'a'"].join("\n"),{output:"source"})})).to.throw(peg.parser.SyntaxError)
          • function0ms

            expect((()=>{peg.generate(["start = "+e+":end","end = 'a'"].join("\n"),{output:"source"})})).to.throw(peg.parser.SyntaxError)
          • if0ms

            expect((()=>{peg.generate(["start = "+e+":end","end = 'a'"].join("\n"),{output:"source"})})).to.throw(peg.parser.SyntaxError)
          • import0ms

            expect((()=>{peg.generate(["start = "+e+":end","end = 'a'"].join("\n"),{output:"source"})})).to.throw(peg.parser.SyntaxError)
          • in0ms

            expect((()=>{peg.generate(["start = "+e+":end","end = 'a'"].join("\n"),{output:"source"})})).to.throw(peg.parser.SyntaxError)
          • instanceof0ms

            expect((()=>{peg.generate(["start = "+e+":end","end = 'a'"].join("\n"),{output:"source"})})).to.throw(peg.parser.SyntaxError)
          • new0ms

            expect((()=>{peg.generate(["start = "+e+":end","end = 'a'"].join("\n"),{output:"source"})})).to.throw(peg.parser.SyntaxError)
          • return0ms

            expect((()=>{peg.generate(["start = "+e+":end","end = 'a'"].join("\n"),{output:"source"})})).to.throw(peg.parser.SyntaxError)
          • super0ms

            expect((()=>{peg.generate(["start = "+e+":end","end = 'a'"].join("\n"),{output:"source"})})).to.throw(peg.parser.SyntaxError)
          • switch0ms

            expect((()=>{peg.generate(["start = "+e+":end","end = 'a'"].join("\n"),{output:"source"})})).to.throw(peg.parser.SyntaxError)
          • this0ms

            expect((()=>{peg.generate(["start = "+e+":end","end = 'a'"].join("\n"),{output:"source"})})).to.throw(peg.parser.SyntaxError)
          • throw0ms

            expect((()=>{peg.generate(["start = "+e+":end","end = 'a'"].join("\n"),{output:"source"})})).to.throw(peg.parser.SyntaxError)
          • try0ms

            expect((()=>{peg.generate(["start = "+e+":end","end = 'a'"].join("\n"),{output:"source"})})).to.throw(peg.parser.SyntaxError)
          • typeof0ms

            expect((()=>{peg.generate(["start = "+e+":end","end = 'a'"].join("\n"),{output:"source"})})).to.throw(peg.parser.SyntaxError)
          • var0ms

            expect((()=>{peg.generate(["start = "+e+":end","end = 'a'"].join("\n"),{output:"source"})})).to.throw(peg.parser.SyntaxError)
          • void1ms

            expect((()=>{peg.generate(["start = "+e+":end","end = 'a'"].join("\n"),{output:"source"})})).to.throw(peg.parser.SyntaxError)
          • while0ms

            expect((()=>{peg.generate(["start = "+e+":end","end = 'a'"].join("\n"),{output:"source"})})).to.throw(peg.parser.SyntaxError)
          • with0ms

            expect((()=>{peg.generate(["start = "+e+":end","end = 'a'"].join("\n"),{output:"source"})})).to.throw(peg.parser.SyntaxError)
          • null0ms

            expect((()=>{peg.generate(["start = "+e+":end","end = 'a'"].join("\n"),{output:"source"})})).to.throw(peg.parser.SyntaxError)
          • true0ms

            expect((()=>{peg.generate(["start = "+e+":end","end = 'a'"].join("\n"),{output:"source"})})).to.throw(peg.parser.SyntaxError)
          • false0ms

            expect((()=>{peg.generate(["start = "+e+":end","end = 'a'"].join("\n"),{output:"source"})})).to.throw(peg.parser.SyntaxError)
          • enum0ms

            expect((()=>{peg.generate(["start = "+e+":end","end = 'a'"].join("\n"),{output:"source"})})).to.throw(peg.parser.SyntaxError)
          • implements0ms

            expect((()=>{peg.generate(["start = "+e+":end","end = 'a'"].join("\n"),{output:"source"})})).to.throw(peg.parser.SyntaxError)
          • interface0ms

            expect((()=>{peg.generate(["start = "+e+":end","end = 'a'"].join("\n"),{output:"source"})})).to.throw(peg.parser.SyntaxError)
          • let0ms

            expect((()=>{peg.generate(["start = "+e+":end","end = 'a'"].join("\n"),{output:"source"})})).to.throw(peg.parser.SyntaxError)
          • package0ms

            expect((()=>{peg.generate(["start = "+e+":end","end = 'a'"].join("\n"),{output:"source"})})).to.throw(peg.parser.SyntaxError)
          • private1ms

            expect((()=>{peg.generate(["start = "+e+":end","end = 'a'"].join("\n"),{output:"source"})})).to.throw(peg.parser.SyntaxError)
          • protected0ms

            expect((()=>{peg.generate(["start = "+e+":end","end = 'a'"].join("\n"),{output:"source"})})).to.throw(peg.parser.SyntaxError)
          • public0ms

            expect((()=>{peg.generate(["start = "+e+":end","end = 'a'"].join("\n"),{output:"source"})})).to.throw(peg.parser.SyntaxError)
          • static0ms

            expect((()=>{peg.generate(["start = "+e+":end","end = 'a'"].join("\n"),{output:"source"})})).to.throw(peg.parser.SyntaxError)
          • yield0ms

            expect((()=>{peg.generate(["start = "+e+":end","end = 'a'"].join("\n"),{output:"source"})})).to.throw(peg.parser.SyntaxError)
          • await1ms

            expect((()=>{peg.generate(["start = "+e+":end","end = 'a'"].join("\n"),{output:"source"})})).to.throw(peg.parser.SyntaxError)
          • arguments0ms

            expect((()=>{peg.generate(["start = "+e+":end","end = 'a'"].join("\n"),{output:"source"})})).to.throw(peg.parser.SyntaxError)
          • eval0ms

            expect((()=>{peg.generate(["start = "+e+":end","end = 'a'"].join("\n"),{output:"source"})})).to.throw(peg.parser.SyntaxError)
        • does not throw an exception on special non-reserved JS words used as a label

          • abstract2ms

            const source=peg.generate(["start = "+label+":end { return "+label+"; }","end = 'a'"].join("\n"),{output:"source"});expect(eval(source).parse("a")).to.equal("a")
          • boolean1ms

            const source=peg.generate(["start = "+label+":end { return "+label+"; }","end = 'a'"].join("\n"),{output:"source"});expect(eval(source).parse("a")).to.equal("a")
          • byte1ms

            const source=peg.generate(["start = "+label+":end { return "+label+"; }","end = 'a'"].join("\n"),{output:"source"});expect(eval(source).parse("a")).to.equal("a")
          • char1ms

            const source=peg.generate(["start = "+label+":end { return "+label+"; }","end = 'a'"].join("\n"),{output:"source"});expect(eval(source).parse("a")).to.equal("a")
          • double1ms

            const source=peg.generate(["start = "+label+":end { return "+label+"; }","end = 'a'"].join("\n"),{output:"source"});expect(eval(source).parse("a")).to.equal("a")
          • final1ms

            const source=peg.generate(["start = "+label+":end { return "+label+"; }","end = 'a'"].join("\n"),{output:"source"});expect(eval(source).parse("a")).to.equal("a")
          • float1ms

            const source=peg.generate(["start = "+label+":end { return "+label+"; }","end = 'a'"].join("\n"),{output:"source"});expect(eval(source).parse("a")).to.equal("a")
          • goto1ms

            const source=peg.generate(["start = "+label+":end { return "+label+"; }","end = 'a'"].join("\n"),{output:"source"});expect(eval(source).parse("a")).to.equal("a")
          • int1ms

            const source=peg.generate(["start = "+label+":end { return "+label+"; }","end = 'a'"].join("\n"),{output:"source"});expect(eval(source).parse("a")).to.equal("a")
          • long1ms

            const source=peg.generate(["start = "+label+":end { return "+label+"; }","end = 'a'"].join("\n"),{output:"source"});expect(eval(source).parse("a")).to.equal("a")
          • native1ms

            const source=peg.generate(["start = "+label+":end { return "+label+"; }","end = 'a'"].join("\n"),{output:"source"});expect(eval(source).parse("a")).to.equal("a")
          • short1ms

            const source=peg.generate(["start = "+label+":end { return "+label+"; }","end = 'a'"].join("\n"),{output:"source"});expect(eval(source).parse("a")).to.equal("a")
          • synchronized1ms

            const source=peg.generate(["start = "+label+":end { return "+label+"; }","end = 'a'"].join("\n"),{output:"source"});expect(eval(source).parse("a")).to.equal("a")
          • throws1ms

            const source=peg.generate(["start = "+label+":end { return "+label+"; }","end = 'a'"].join("\n"),{output:"source"});expect(eval(source).parse("a")).to.equal("a")
          • transient1ms

            const source=peg.generate(["start = "+label+":end { return "+label+"; }","end = 'a'"].join("\n"),{output:"source"});expect(eval(source).parse("a")).to.equal("a")
          • volatile1ms

            const source=peg.generate(["start = "+label+":end { return "+label+"; }","end = 'a'"].join("\n"),{output:"source"});expect(eval(source).parse("a")).to.equal("a")
          • as1ms

            const source=peg.generate(["start = "+label+":end { return "+label+"; }","end = 'a'"].join("\n"),{output:"source"});expect(eval(source).parse("a")).to.equal("a")
          • async1ms

            const source=peg.generate(["start = "+label+":end { return "+label+"; }","end = 'a'"].join("\n"),{output:"source"});expect(eval(source).parse("a")).to.equal("a")
          • from1ms

            const source=peg.generate(["start = "+label+":end { return "+label+"; }","end = 'a'"].join("\n"),{output:"source"});expect(eval(source).parse("a")).to.equal("a")
          • get1ms

            const source=peg.generate(["start = "+label+":end { return "+label+"; }","end = 'a'"].join("\n"),{output:"source"});expect(eval(source).parse("a")).to.equal("a")
          • of1ms

            const source=peg.generate(["start = "+label+":end { return "+label+"; }","end = 'a'"].join("\n"),{output:"source"});expect(eval(source).parse("a")).to.equal("a")
          • set1ms

            const source=peg.generate(["start = "+label+":end { return "+label+"; }","end = 'a'"].join("\n"),{output:"source"});expect(eval(source).parse("a")).to.equal("a")
        • does not throw an exception on reserved JS words used as a rule name

          • break0ms

            const source=peg.generate(["start = "+rule,rule+" = 'a'"].join("\n"),{output:"source"});expect(eval(source).parse("a")).to.equal("a")
          • case1ms

            const source=peg.generate(["start = "+rule,rule+" = 'a'"].join("\n"),{output:"source"});expect(eval(source).parse("a")).to.equal("a")
          • catch1ms

            const source=peg.generate(["start = "+rule,rule+" = 'a'"].join("\n"),{output:"source"});expect(eval(source).parse("a")).to.equal("a")
          • class1ms

            const source=peg.generate(["start = "+rule,rule+" = 'a'"].join("\n"),{output:"source"});expect(eval(source).parse("a")).to.equal("a")
          • const1ms

            const source=peg.generate(["start = "+rule,rule+" = 'a'"].join("\n"),{output:"source"});expect(eval(source).parse("a")).to.equal("a")
          • continue0ms

            const source=peg.generate(["start = "+rule,rule+" = 'a'"].join("\n"),{output:"source"});expect(eval(source).parse("a")).to.equal("a")
          • debugger1ms

            const source=peg.generate(["start = "+rule,rule+" = 'a'"].join("\n"),{output:"source"});expect(eval(source).parse("a")).to.equal("a")
          • default1ms

            const source=peg.generate(["start = "+rule,rule+" = 'a'"].join("\n"),{output:"source"});expect(eval(source).parse("a")).to.equal("a")
          • delete1ms

            const source=peg.generate(["start = "+rule,rule+" = 'a'"].join("\n"),{output:"source"});expect(eval(source).parse("a")).to.equal("a")
          • do1ms

            const source=peg.generate(["start = "+rule,rule+" = 'a'"].join("\n"),{output:"source"});expect(eval(source).parse("a")).to.equal("a")
          • else0ms

            const source=peg.generate(["start = "+rule,rule+" = 'a'"].join("\n"),{output:"source"});expect(eval(source).parse("a")).to.equal("a")
          • export1ms

            const source=peg.generate(["start = "+rule,rule+" = 'a'"].join("\n"),{output:"source"});expect(eval(source).parse("a")).to.equal("a")
          • extends1ms

            const source=peg.generate(["start = "+rule,rule+" = 'a'"].join("\n"),{output:"source"});expect(eval(source).parse("a")).to.equal("a")
          • finally0ms

            const source=peg.generate(["start = "+rule,rule+" = 'a'"].join("\n"),{output:"source"});expect(eval(source).parse("a")).to.equal("a")
          • for1ms

            const source=peg.generate(["start = "+rule,rule+" = 'a'"].join("\n"),{output:"source"});expect(eval(source).parse("a")).to.equal("a")
          • function1ms

            const source=peg.generate(["start = "+rule,rule+" = 'a'"].join("\n"),{output:"source"});expect(eval(source).parse("a")).to.equal("a")
          • if1ms

            const source=peg.generate(["start = "+rule,rule+" = 'a'"].join("\n"),{output:"source"});expect(eval(source).parse("a")).to.equal("a")
          • import1ms

            const source=peg.generate(["start = "+rule,rule+" = 'a'"].join("\n"),{output:"source"});expect(eval(source).parse("a")).to.equal("a")
          • in1ms

            const source=peg.generate(["start = "+rule,rule+" = 'a'"].join("\n"),{output:"source"});expect(eval(source).parse("a")).to.equal("a")
          • instanceof0ms

            const source=peg.generate(["start = "+rule,rule+" = 'a'"].join("\n"),{output:"source"});expect(eval(source).parse("a")).to.equal("a")
          • new1ms

            const source=peg.generate(["start = "+rule,rule+" = 'a'"].join("\n"),{output:"source"});expect(eval(source).parse("a")).to.equal("a")
          • return1ms

            const source=peg.generate(["start = "+rule,rule+" = 'a'"].join("\n"),{output:"source"});expect(eval(source).parse("a")).to.equal("a")
          • super1ms

            const source=peg.generate(["start = "+rule,rule+" = 'a'"].join("\n"),{output:"source"});expect(eval(source).parse("a")).to.equal("a")
          • switch1ms

            const source=peg.generate(["start = "+rule,rule+" = 'a'"].join("\n"),{output:"source"});expect(eval(source).parse("a")).to.equal("a")
          • this1ms

            const source=peg.generate(["start = "+rule,rule+" = 'a'"].join("\n"),{output:"source"});expect(eval(source).parse("a")).to.equal("a")
          • throw1ms

            const source=peg.generate(["start = "+rule,rule+" = 'a'"].join("\n"),{output:"source"});expect(eval(source).parse("a")).to.equal("a")
          • try0ms

            const source=peg.generate(["start = "+rule,rule+" = 'a'"].join("\n"),{output:"source"});expect(eval(source).parse("a")).to.equal("a")
          • typeof1ms

            const source=peg.generate(["start = "+rule,rule+" = 'a'"].join("\n"),{output:"source"});expect(eval(source).parse("a")).to.equal("a")
          • var1ms

            const source=peg.generate(["start = "+rule,rule+" = 'a'"].join("\n"),{output:"source"});expect(eval(source).parse("a")).to.equal("a")
          • void1ms

            const source=peg.generate(["start = "+rule,rule+" = 'a'"].join("\n"),{output:"source"});expect(eval(source).parse("a")).to.equal("a")
          • while0ms

            const source=peg.generate(["start = "+rule,rule+" = 'a'"].join("\n"),{output:"source"});expect(eval(source).parse("a")).to.equal("a")
          • with1ms

            const source=peg.generate(["start = "+rule,rule+" = 'a'"].join("\n"),{output:"source"});expect(eval(source).parse("a")).to.equal("a")
          • null1ms

            const source=peg.generate(["start = "+rule,rule+" = 'a'"].join("\n"),{output:"source"});expect(eval(source).parse("a")).to.equal("a")
          • true1ms

            const source=peg.generate(["start = "+rule,rule+" = 'a'"].join("\n"),{output:"source"});expect(eval(source).parse("a")).to.equal("a")
          • false0ms

            const source=peg.generate(["start = "+rule,rule+" = 'a'"].join("\n"),{output:"source"});expect(eval(source).parse("a")).to.equal("a")
          • enum1ms

            const source=peg.generate(["start = "+rule,rule+" = 'a'"].join("\n"),{output:"source"});expect(eval(source).parse("a")).to.equal("a")
          • implements1ms

            const source=peg.generate(["start = "+rule,rule+" = 'a'"].join("\n"),{output:"source"});expect(eval(source).parse("a")).to.equal("a")
          • interface1ms

            const source=peg.generate(["start = "+rule,rule+" = 'a'"].join("\n"),{output:"source"});expect(eval(source).parse("a")).to.equal("a")
          • let1ms

            const source=peg.generate(["start = "+rule,rule+" = 'a'"].join("\n"),{output:"source"});expect(eval(source).parse("a")).to.equal("a")
          • package1ms

            const source=peg.generate(["start = "+rule,rule+" = 'a'"].join("\n"),{output:"source"});expect(eval(source).parse("a")).to.equal("a")
          • private1ms

            const source=peg.generate(["start = "+rule,rule+" = 'a'"].join("\n"),{output:"source"});expect(eval(source).parse("a")).to.equal("a")
          • protected1ms

            const source=peg.generate(["start = "+rule,rule+" = 'a'"].join("\n"),{output:"source"});expect(eval(source).parse("a")).to.equal("a")
          • public1ms

            const source=peg.generate(["start = "+rule,rule+" = 'a'"].join("\n"),{output:"source"});expect(eval(source).parse("a")).to.equal("a")
          • static1ms

            const source=peg.generate(["start = "+rule,rule+" = 'a'"].join("\n"),{output:"source"});expect(eval(source).parse("a")).to.equal("a")
          • yield1ms

            const source=peg.generate(["start = "+rule,rule+" = 'a'"].join("\n"),{output:"source"});expect(eval(source).parse("a")).to.equal("a")
          • await1ms

            const source=peg.generate(["start = "+rule,rule+" = 'a'"].join("\n"),{output:"source"});expect(eval(source).parse("a")).to.equal("a")
          • arguments1ms

            const source=peg.generate(["start = "+rule,rule+" = 'a'"].join("\n"),{output:"source"});expect(eval(source).parse("a")).to.equal("a")
          • eval0ms

            const source=peg.generate(["start = "+rule,rule+" = 'a'"].join("\n"),{output:"source"});expect(eval(source).parse("a")).to.equal("a")
      • generates source map