Skip to content

General-purpose recursive descent parser and evaluator

License

Notifications You must be signed in to change notification settings

takamin/lex-bnf

Repository files navigation

Lex-BNF

Build Status Coverage Status version license

This is a general-purpose recursive descent parser and evaluator.

Using this module, You can:

  1. Defines a syntax rule such as programming languages, expressions, or structured statements.
  2. Parses the code written based on the rules.
  3. Evaluates the result of the parsing.

NOTE: The class BNF exported in v0.3.3 is deprecated and it can be used as Language.BNF.

Create A Language Definition

The parser is defined as an instance of Language class by using objects of BNF-like notation and its evaluator functions. Those can run in dynamically and immediately.

The Language constructor takes one array of syntax rule. To create the syntax rule, use Language.syntax() function.

Paramters of Language.syntax():

  1. A name of the syntax rule.
  2. An array of a rule which is an array of terms.
    • A character '*' at the end of a rule name as an element of the terms is Repetition Specifier that means the rule is repeatable.
    • See the rule declaration part of additive-expression in sample/calc.js to use the feature.
  3. An evaluator function (optional). It can be omitted when the second parameter contains only one rule which containing only one other name of syntax rule.

Demo: Evaluating arithmetic expression

With following files, those shows how define a syntax of language.

run on bash

$ node sample/eval-expr.js '(1 + 2) * ((3 + 4) / 2)'
10.5
$

Documents

  • GitHub Pages
  • API Reference
    • v1.1.1
      • Fix the issue #16
    • v1.1.0
      • Repetition specifier * is available for the rule name. It is important for getting correct answer of multi term arithmetic expressions such as 1 - 2 - 3 = ?.
    • v1.0.1
    • v1.0.0

LICENSE

This software is released under the MIT License, see LICENSE