{"library":"pegjs-util","title":"Peggy/PEG.js Utility Library","description":"pegjs-util is a utility library for the Peggy parser generator (formerly PEG.js), currently at stable version 2.0.2. It enhances Peggy's core `parse` function by injecting convenient utilities directly into grammar actions. The library provides three main features: Parser Tree Token Unrolling, which simplifies common patterns of extracting tokens from repeated grammar rule matches; Abstract Syntax Tree (AST) Node Generation, which assists in building structured ASTs directly within grammar rules; and improved, \"cooked\" Error Reporting, offering more user-friendly diagnostics than Peggy's default output. Releases appear to follow the development of Peggy itself, with the latest versions published as needed. It differentiates itself by streamlining common parser generator tasks, reducing boilerplate in `.peggy` grammar files, and providing a more robust parsing and error reporting experience.","language":"javascript","status":"active","last_verified":"Sun Apr 19","install":{"commands":["npm install pegjs-util"],"cli":null},"imports":["const PEGUtil = require('pegjs-util');","var unroll = options.util.makeUnroll(location, options);","var ast = options.util.makeAST(location, options);"],"auth":{"required":false,"env_vars":[]},"quickstart":{"code":"const fs = require(\"fs\");\nconst ASTY = require(\"asty\"); // Companion library, install separately if needed\nconst PEG = require(\"peggy\");\nconst PEGUtil = require(\"pegjs-util\");\n\nconst pegjsGrammar = `\n{\n    var unroll = options.util.makeUnroll(location, options);\n    var ast    = options.util.makeAST(location, options);\n}\n\nstart\n    = _ seq:id_seq _ {\n          return ast(\"Sample\").add(seq);\n      }\n\nid_seq\n    = id:id ids:(_ \",\" _ id)* {\n          return ast(\"IdentifierSequence\").add(unroll(id, ids, 3));\n      }\n\nid\n    = id:$([a-zA-Z_][a-zA-Z0-9_]*) {\n          return ast(\"Identifier\").set(\"name\", id);\n      }\n\n_ \"blank\"\n    = (co / ws)*\n\nco \"comment\"\n    = \"//\" (![\\r\\n] .)*\n    / \"/*\" (!\"*/\" .)* \"*/\"\n\nws \"whitespaces\"\n    = [ \\t\\r\\n]+\n`;\n\nconst asty = new ASTY();\nconst parser = PEG.generate(pegjsGrammar);\n\n// Simulate input for parsing\nconst sampleInputOk = \"/*  some ok input  */\\nfoo, bar, quux\";\nconst sampleInputBad = \"/*  some bad input  */\\nfoo, bar, quux baz\";\n\nfunction parseInput(inputString, fileName) {\n  console.log(`\\n--- Parsing ${fileName || 'input'} ---`);\n  const result = PEGUtil.parse(parser, inputString, {\n    startRule: \"start\",\n    makeAST: function (line, column, offset, args) {\n      // This callback is what the 'ast' helper in the grammar calls\n      return asty.create.apply(asty, args).pos(line, column, offset);\n    }\n  });\n\n  if (result.error !== null) {\n    console.error(\"ERROR: Parsing Failure:\\n\" +\n      PEGUtil.errorMessage(result.error, true).replace(/^/mg, \"ERROR: \"));\n  } else {\n    console.log(result.ast.dump().replace(/\\n$/, \"\"));\n  }\n}\n\n// To run this code, ensure you have installed:\n// npm install peggy asty pegjs-util\n\nparseInput(sampleInputOk, \"sample-input-ok.txt\");\nparseInput(sampleInputBad, \"sample-input-bad.txt\");","lang":"javascript","description":"Demonstrates how to use `pegjs-util` to parse a simple language, generate an Abstract Syntax Tree (AST) with `asty`, and benefit from enhanced error reporting. It shows the integration of `unroll` and `ast` helpers within a Peggy grammar, enabled by `PEGUtil.parse`.","tag":null,"tag_description":null,"last_tested":null,"results":[]},"compatibility":null}