Class: BNFP

page. BNFP

Represents a grammar with precedences as ordered pairs.


new BNFP()

Creates a new grammar representation.

Properties:
Name Type Description
levels Array.<page.BNFP.Precedence>

list of lists of terminals with equal precedence and associativity in order of increasing precedence. This list needs to be complete before the first call to page.BNFP#rule with an explicit precedence.

Source:

Extends

Classes

Precedence
Rule

Members


<static> builder

An object with action functions corresponding to page.BNFP.grammar for page.SLR1#reflect which require a new page.BNFP as environment to represent a grammar in BNF notation with precedences and error using this environment.

Source:

<static> grammar

The left-recursive BNF SLR(1) grammar for BNFP.

Source:

Methods


<static> from(_grammar)

Factory method: Represent a grammar described in BNFP.

This is bootstrapped using page.BNF.from and page.BNFP.grammar to create an SLR(1) compiler for BNFP which uses page.BNFP.builder.

Parameters:
Name Type Description
_grammar string

description in BNFP; comments extend from # to the end of a line.

Source:
Returns:

a new grammar representation; check .errors.

Type
page.BNFP

dump()

Displays a grammar and all non-terminals with name and contents of all sets.

Inherited From:
Source:
Returns:
Type
string

dump()

Displays a grammar and all non-terminals with name and contents of all sets.

Source:
Returns:
Type
string

getByOrd(_ord)

Returns symbol by ord.

Parameters:
Name Type Description
_ord number

page.BNF.NT or page.BNF.T's ord.

Inherited From:
Source:
Returns:
Type
Node

init( [_start] [, _rules])

Must be called once to complete BNF grammar initialization.

Completes rule 0 with a new start symbol $accept to accept the grammar's original start symbol and then $eof.

Sets page.BNF.Rule.index as index into the rules array. Sets empty for each rule and its non-terminal which has an empty right-hand side.

Checks that all non-terminals are defined, can be reached, and cannot expand infinitely without generating terminals.

Computes first and follow for all rules and non-terminals.

Parameters:
Name Type Argument Description
_start page.BNF.NT <optional>

start symbol of grammar, default is the non-terminal of rule 1.

_rules Array.<page.BNF.Rule> <optional>

(additional) grammar rules.

Inherited From:
Source:
See:

<private> initTree( [_rules])

Must be called once; common code to complete grammar initialization.

Adds rules passed as a parameter to page.BNF.rules.

Sorts literals in reverse order, i.e., longer ones before shorter prefixes. Defines page.BNF.T.ord and page.BNF.NT.ord as globally unique index (literals before tokens before non-terminals). Sets page.BNF.T.first for each terminal to contain itself.

Parameters:
Name Type Argument Description
_rules Array.<page.BNF.Rule> <optional>

(additional) grammar rules.

Inherited From:
Source:

lit( [_literal])

Factory method to create a unique literal, maintains page.BNF.lit and page.BNF.litsByValue.

Parameters:
Name Type Argument Description
_literal string <optional>

literal's representation; if omitted represents the $eof literal terminal.

Inherited From:
Source:
Returns:

a unique literal.

Type
page.BNF.Lit

nt( [_name])

Factory method to create a unique non-terminal representation, maintains page.BNF.nts and page.BNF.ntsByName, checks against page.BNF.tokensByName.

Parameters:
Name Type Argument Description
_name string <optional>

non-terminal's name; cannot start with $. If $ creates a unique name which cannot be searched for. If omitted represents the $accept non-terminal.

Inherited From:
Source:
Returns:

a unique non-terminal representation.

Type
page.BNF.NT

precedence(_assoc, _terminals)

Factory method to represent a list of terminals with equal precedence level and equal associativity.

Creates a new page.BNFP.Precedence object, adds it to page.BNFP.levels, adds .prec.level and .prec.assoc to all terminals in the list, and checks for duplicates.

Parameters:
Name Type Description
_assoc string

associativity: 'left', 'right', or 'nonassoc'.

_terminals Array.<page.BNF.T>

list of terminals.

Source:
Throws:

an error message if there is duplication.

Type
string
Returns:

representing the set.

Type
page.BNFP.Precedence

rule(_nt [, _symbols])

Factory method to create a rule representation for BNF. Adds to rule's non-terminal's page.BNF.NT.rules.

Parameters:
Name Type Argument Description
_nt page.BNF.NT

left-hand side, non-terminal.

_symbols Array.<Node> <optional>

right-hand side, may be empty array; if omitted, creates empty rule 0 for $accept.

Inherited From:
Source:
See:
  • page.BNF.init
Returns:

a new rule representation.

Type
page.BNF.Rule

rule(_nt [, _symbols] [, _prec])

Factory method to create a rule representation for BNFP. Adds to rule's non-terminal's page.BNF.NT.rules.

Parameters:
Name Type Argument Description
_nt page.BNF.NT

left-hand side, non-terminal.

_symbols Array.<Node> <optional>

right-hand side, may be empty array; if omitted, creates empty rule 0 for $accept.

_prec page.BNF.T <optional>

terminal defining precedence explicitly; by default last terminal in right-hand side, if any. page.BNFP.levels needs to be complete before this parameter is specified.

Source:
Throws:

an error message if an explicit precedence cannot be resolved.

Type
string
Returns:

a new rule representation.

Type
page.BNFP.Rule

token( [_name] [, _pattern])

Factory method to create a unique token, maintains page.BNF.tokens and page.BNF.tokensByName, checks against page.BNF.ntsByName.

Parameters:
Name Type Argument Description
_name string <optional>

token's name; cannot start with $. If omitted represents the $error token.

_pattern string <optional>

pattern to match values representing the token in input; must be specified if and only if the token is created.

Inherited From:
Source:
Returns:

a unique terminal category representation.

Type
page.BNF.Token

tokenizer( [_skip])

Creates a function which tokenizes a string.

For literals with common prefixes the longer literal will be matched first. Token patterns are matched after literals and in the order the tokens were defined.

Parameters:
Name Type Argument Description
_skip string | RegExp <optional>

a pattern to define ignorable character sequences; this pattern must not accept empty input and it must use (:? ) rather than ( ) for grouping; the default is to skip white space.

Inherited From:
Source:
Returns:

a function which takes a string and returns a list of page.Tuple elements. The list contains one tuple with the error token for each character which is neither ignorable nor a literal or part of a token. The function is based on a regular expression which can be displayed as a member .pattern.

Type
Tokenizer

toString()

Displays description of grammar and number of errors if any.

Inherited From:
Source:
Returns:
Type
string

toString()

Displays description of grammar and number of errors if any.

Source:
Returns:
Type
string