4.2.1 • Published 11 months ago

ts-pegjs v4.2.1

Weekly downloads
6,499
License
MIT
Repository
github
Last release
11 months ago

TS PEG.js

TS PEG.js is a TS code generation plugin for peggy.

Build Status Known Vulnerabilities npm version

NPM

Requirements

Installation

Node.js

Installs ts-pegjs + peggy

$ npm install ts-pegjs

Usage

Generating a Parser from JS code

In Node.js, require both the peggy parser generator and the ts-pegjs plugin:

var peggy = require('peggy');
var tspegjs = require('ts-pegjs');

To generate a TS parser, pass to pegjs.generate ts-pegjs plugin and your grammar:

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 exponential parsing time in pathological cases but making the parser slower (default: false). This is strongly recommended for big grammars (like javascript.pegjs or css.pegjs in example folder)
  • allowedStartRules — rules the parser will be allowed to start parsing from (default: the first rule in the grammar)

Plugin options

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.

Generating a Parser from CLI

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
{
    "tspegjs": {
        "customHeader": "// import lib\nimport { Lib } from 'mylib';"
    },
    "returnTypes": {
        "Integer": "number",
        "Expression": "number",
    }
}

For rules not listed in returnTypes 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.

Using the Parser

  1. Save parser generated by pegjs.generate to a file or use the one generated from the CLI tool.

  2. In client TS code:

import { PeggySyntaxError, parse } from './arithmetics';

try {
    const sampleOutput = parse('my sample...');
} catch (ex: PeggySyntaxError) {
    // Handle parsing error
    // [...]
}

Changelog

Changelog.

Acknowledgments

Thanks to:

License

The MIT License (MIT)


(c) 2017-2023, Pedro J. Molina at metadev.pro

4.2.1

11 months ago

4.2.0

11 months ago

3.1.0

1 year ago

4.1.0

1 year ago

4.0.0

1 year ago

4.1.1

12 months ago

2.2.1

1 year ago

2.2.0

1 year ago

3.0.0

1 year ago

2.0.2

2 years ago

2.1.0

2 years ago

2.0.1

2 years ago

2.0.0

2 years ago

1.2.2

2 years ago

1.2.1

3 years ago

1.2.0

3 years ago

1.1.1

3 years ago

1.1.0

3 years ago

1.0.0

3 years ago

0.3.1

3 years ago

0.3.0

3 years ago

0.2.7

4 years ago

0.2.6

5 years ago

0.2.5

5 years ago

0.2.4

5 years ago

0.2.3

5 years ago

0.2.2

6 years ago

0.2.1

6 years ago

0.2.0

6 years ago

0.1.14

6 years ago

0.1.13

6 years ago

0.1.12

7 years ago

0.1.11

7 years ago

0.1.10

7 years ago

0.1.9

7 years ago

0.1.8

7 years ago

0.1.7

7 years ago

0.1.6

7 years ago

0.1.5

7 years ago

0.1.4

7 years ago

0.1.3

7 years ago

0.1.2

7 years ago

0.1.1

7 years ago

0.1.0

7 years ago