Socket
Socket
Sign inDemoInstall

pegjs-override-action

Package Overview
Dependencies
3
Maintainers
1
Versions
25
Alerts
File Explorer

Advanced tools

Install Socket

Detect and block malicious and high-risk dependencies

Install

pegjs-override-action

Override action (PEGjs plugin)


Version published
Maintainers
1
Weekly downloads
4
increased by100%

Weekly downloads

Readme

Source

PEGjs override action

Override action (PEGjs plugin)

Reason

This plugin came to life, as part of a process of referencing basic PEGs and build structure outside of the PEGs. In essence, it gives the possibility for reusable PEGs.

E.g. A collection of core PEGjs grammars (RFC, ISO, etc.)

Usage

npm install pegjs-override-action
PEG = require 'pegjs'
overrideAction = require 'pegjs-override-action'

parser = PEG.buildParser "start = 'a' / 'b' / 'c' / 'd' { return 'd' } / 'e'",
  plugins: [overrideAction]
  overrideActionPlugin:
    initializer: "_ = require('lodash');"
    rules:
      start: [
        () -> "b"
        "return 'a';"
        undefined
        '__skip__' # equivalent to undefined atm
        () -> _.VERSION
      ]

parser.parse 'a' # 'b'
parser.parse 'b' # 'a'
parser.parse 'c' # 'c'
parser.parse 'd' # 'd'
parser.parse 'e' # e.g. 1.3.1

Scopes and require paths

When defining an action as a function, it will be stringified and injected into a different scope, which breaks variable closure. Any data or functions that need to be shared between rule actions should be defined in your initializer block. When using require in your actions or initializer, it is a good idea to resolve an absolute path (e.g. using require.resolve as the code is also executed in a different path than where it is defined.

Convenience

PEG = require 'pegjs'
{makeBuildParser} = require 'pegjs-override-action'

buildParser = makeParser {
  PEG
  grammar: "start = 'a' / 'b' / 'c' / 'd' { return 'd' } / 'e'"
  initializer: "_ = require('lodash');"
  rules:
    start: [
      () -> "b"
      "return 'a';"
      undefined
      '__skip__' # equivalent to undefined atm
      () -> _.VERSION
    ]
  mixins: {} # list of default rules

parser = buildParser {
  startRule: 'start'
  options: {} #
}

parser.parse 'a' # 'b'
parser.parse 'b' # 'a'
parser.parse 'c' # 'c'
parser.parse 'd' # 'd'
parser.parse 'e' # e.g. 1.3.1

License

UNLICENSE

Keywords

FAQs

Last updated on 31 May 2014

Did you know?

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc