TS target for peggy parser generator
npm install ts-pegjsTS PEG.js is a TS code generation plugin for peggy.




- peggy (previous versions use: pegjs)
Installs ts-pegjs + peggy
$ npm install ts-pegjs
In Node.js, require both the peggy parser generator and the ts-pegjs plugin:
``typescript`
var peggy = require('peggy');
var tspegjs = require('ts-pegjs');
To generate a TS parser, pass to pegjs.generate ts-pegjs plugin and your grammar:
`typescript`
var parser = pegjs.generate("start = ('a' / 'b')+", {
output: 'source',
format: 'commonjs',
plugins: [tspegjs],
tspegjs: {
customHeader: "// import lib\nimport { Lib } from 'mylib';"
}
});
The method will return source code of generated parser as a string.
Supported options of pegjs.generate:
- cache — if true, makes the parser cache results, avoiding exponentialfalse
parsing time in pathological cases but making the parser slower (default:
). This is strongly recommended for big grammarsallowedStartRules
(like javascript.pegjs or css.pegjs in example folder)
- — rules the parser will be allowed to start parsing from
(default: the first rule in the grammar)
Note: Options in CLI mode are written in POSIX (long names as kebab-case) convention e.g. --custom-header but with camelcase on JavaScript e.g. customHeader.
- customHeader — A string or an array of strings which are a valid TS code to be injected on the header of the output file. E.g. provides a convenient place for adding library imports.customHeaderFile
- — A header file to include.errorName
- — The name of the exported internal error class to override. The default value from version 3.0.0 is PeggySyntaxError. Previous one was SyntaxError.returnTypes
- — An object containing rule names as keys and a valid TS return type as string.skipTypeComputation
- — Boolean. If true, ts-pegjs will not try to use TS to infer types based on your grammar rules.onlyGenerateGrammarTypes
- — Boolean. If true, only types for your grammar rules (and no parser) will be generated. Cannot be used with skipTypeComputation.doNotCamelCaseTypes
- — Boolean. By default type names for grammar rules are converted to CamelCase. If true, this conversion is not done and type names will match the casing of your grammar rules.
Sample usage:
``
peggy --plugin ./src/tspegjs -o examples/arithmetics.ts --cache examples/arithmetics.pegjs
(Note ./src/tspegjs is the path to tspegjs.ts in the project. If you installed ts-pegjs using npm, it should probably be ./node_modules/ts-pegjs/src/tspegjs.)
It will generarate the parser in the TS flavour.
If you need to pass specific plugin options you can use the option --extra-options-file provided by pegjs and pass it a filename (e.g. pegconfig.json) containing specific options like the following JSON sample:
``
peggy --plugin ./src/tspegjs --extra-options-file pegconfig.json -o examples/arithmetics.ts --cache examples/arithmetics.pegjs
`json`
{
"tspegjs": {
"customHeader": "// import lib\nimport { Lib } from 'mylib';"
},
"returnTypes": {
"Integer": "number",
"Expression": "number",
}
}returnTypes
> For rules not listed in object any type is declared by default.
> Make sure to pass any additional CLI options, like --extra-options-file before the parameter -o as these will otherwise be treated as arguments to that one.
1. Save parser generated by pegjs.generate to a file or use the one generated from the CLI tool.
2. In client TS code:
`typescript
import { PeggySyntaxError, parse } from './arithmetics';
try {
const sampleOutput = parse('my sample...');
} catch (ex: PeggySyntaxError) {
// Handle parsing error
// [...]
}
``
Thanks to:
- David Majda for creating pegjs
- Elantcev Mikhail for providing the pegjs PHP plugin, inspiration on this one.
---
(c) 2017-2023, Pedro J. Molina at metadev.pro