It is recommended to reuse the same Parser instance by passing an empty array to the input argument and only later setting the input by using the input property. See: http://chevrotain.io/docs/FAQ.html#major-performance-benefits
A data structure containing all the Tokens used by the Parser.
Optional
config: IParserConfigThe Parser's configuration.
Flag indicating the Parser is at the recording phase. Can be used to implement methods similar to ACTION Or any other logic to requires knowledge of the recording phase. See:
Protected
ACTIONThe Semantic Actions wrapper. Should be used to wrap semantic actions that either:
For more information see:
Protected
AT_Convenience method, same as MANY but the repetition is of one or more. failing to match at least one repetition will result in a parsing error and cause a parsing error.
The grammar action to optionally invoke multiple times or an "OPTIONS" object describing the grammar action and optional properties.
MANY
Protected
AT_Convenience method, same as MANY_SEP but the repetition is of one or more. failing to match at least one repetition will result in a parsing error and cause the parser to attempt error recovery.
Note that an additional optional property ERR_MSG can be used to provide custom error messages.
An object defining the grammar of each iteration and the separator between iterations
MANY_SEP
Protected
BACKTRACKThe rule to try and parse in backtracking mode.
Rest
...args: any[]Optional
args: any[]argument to be passed to the grammar rule execution
a lookahead function that will try to parse the given grammarRule and will return true if succeed.
a lookahead function that will try to parse the given grammarRule and will return true if succeed.
Protected
CONSUMEA Parsing DSL method use to consume a single Token. In EBNF terms this is equivalent to a Terminal.
A Token will be consumed, IFF the next token in the token vector matches tokType
.
otherwise the parser may attempt to perform error recovery (if enabled).
The index in the method name indicates the unique occurrence of a terminal consumption inside a the top level rule. What this means is that if a terminal appears more than once in a single rule, each appearance must have a different index.
For example:
this.RULE("qualifiedName", () => {
this.CONSUME1(Identifier);
this.MANY(() => {
this.CONSUME1(Dot);
// here we use CONSUME2 because the terminal
// 'Identifier' has already appeared previously in the
// the rule 'parseQualifiedName'
this.CONSUME2(Identifier);
});
})
The Type of the token to be consumed.
Optional
options: ConsumeMethodOptsoptional properties to modify the behavior of CONSUME.
Protected
LALook-Ahead for the Token Vector LA(1) is the next Token ahead. LA(n) is the nth Token ahead. LA(0) is the previously consumed Token.
Looking beyond the end of the Token Vector or before its begining will return in an IToken of type EOF EOF. This behavior can be used to avoid infinite loops.
This is often used to implement custom lookahead logic for GATES. https://chevrotain.io/docs/features/gates.html
Protected
MANYParsing DSL method, that indicates a repetition of zero or more. This is equivalent to EBNF repetition {...}.
Note that there are two syntax forms:
Passing the grammar action directly:
this.MANY(() => {
this.CONSUME(Comma)
this.CONSUME(Digit)
})
using an "options" object:
this.MANY({
GATE: predicateFunc,
DEF: () => {
this.CONSUME(Comma)
this.CONSUME(Digit)
}
});
The optional 'GATE' property in "options" object form can be used to add constraints to invoking the grammar action.
As in CONSUME the index in the method name indicates the occurrence of the repetition production in it's top rule.
The grammar action to optionally invoke multiple times or an "OPTIONS" object describing the grammar action and optional properties.
Protected
MANY_Parsing DSL method, that indicates a repetition of zero or more with a separator Token between the repetitions.
Example:
this.MANY_SEP({
SEP:Comma,
DEF: () => {
this.CONSUME(Number};
// ...
})
Note that because this DSL method always requires more than one argument the options object is always required and it is not possible to use a shorter form like in the MANY DSL method.
Note that for the purposes of deciding on whether or not another iteration exists Only a single Token is examined (The separator). Therefore if the grammar being implemented is so "crazy" to require multiple tokens to identify an item separator please use the more basic DSL methods to implement it.
As in CONSUME the index in the method name indicates the occurrence of the repetition production in it's top rule.
An object defining the grammar of each iteration and the separator between iterations
Protected
OPTIONParsing DSL Method that Indicates an Optional production. in EBNF notation this is equivalent to: "[...]".
Note that there are two syntax forms:
Passing the grammar action directly:
this.OPTION(() => {
this.CONSUME(Digit)}
);
using an "options" object:
this.OPTION({
GATE:predicateFunc,
DEF: () => {
this.CONSUME(Digit)
}});
The optional 'GATE' property in "options" object form can be used to add constraints to invoking the grammar action.
As in CONSUME the index in the method name indicates the occurrence of the optional production in it's top rule.
The grammar action to optionally invoke once or an "OPTIONS" object describing the grammar action and optional properties.
The GrammarAction
return value (OUT) if the optional syntax is encountered
or undefined
if not.
Protected
ORParsing DSL method that indicates a choice between a set of alternatives must be made. This is equivalent to an EBNF alternation (A | B | C | D ...), except that the alternatives are ordered like in a PEG grammar. This means that the first matching alternative is always chosen.
There are several forms for the inner alternatives array:
Passing alternatives array directly:
this.OR([
{ ALT:() => { this.CONSUME(One) }},
{ ALT:() => { this.CONSUME(Two) }},
{ ALT:() => { this.CONSUME(Three) }}
])
Passing alternative array directly with predicates (GATE):
this.OR([
{ GATE: predicateFunc1, ALT:() => { this.CONSUME(One) }},
{ GATE: predicateFuncX, ALT:() => { this.CONSUME(Two) }},
{ GATE: predicateFuncX, ALT:() => { this.CONSUME(Three) }}
])
These syntax forms can also be mixed:
this.OR([
{
GATE: predicateFunc1,
ALT:() => { this.CONSUME(One) }
},
{ ALT:() => { this.CONSUME(Two) }},
{ ALT:() => { this.CONSUME(Three) }}
])
Additionally an "options" object may be used:
this.OR({
DEF:[
{ ALT:() => { this.CONSUME(One) }},
{ ALT:() => { this.CONSUME(Two) }},
{ ALT:() => { this.CONSUME(Three) }}
],
// OPTIONAL property
ERR_MSG: "A Number"
})
The 'predicateFuncX' in the long form can be used to add constraints to choosing the alternative.
As in CONSUME the index in the method name indicates the occurrence of the alternation production in it's top rule.
A set of alternatives or an "OPTIONS" object describing the alternatives and optional properties.
The result of invoking the chosen alternative.
Protected
OR1Protected
OR2Protected
OR3Protected
OR4Protected
OR5Protected
OR6Protected
OR7Protected
OR8Protected
OR9Protected
OVERRIDE_Overrides a Grammar Rule See usage example in: https://github.com/chevrotain/chevrotain/blob/master/examples/parser/versioning/versioning.js
Optional
config: IRuleConfig<CstNode>Protected
RULECreates a Grammar Rule
Note that any parameters of your implementation must be optional as it will be called without parameters during the grammar recording phase.
Optional
config: IRuleConfig<CstNode>Protected
SKIP_Protected
SUBRULEThe Parsing DSL Method is used by one rule to call another. It is equivalent to a non-Terminal in EBNF notation.
This may seem redundant as it does not actually do much. However using it is mandatory for all sub rule invocations.
Calling another rule without wrapping in SUBRULE(...) will cause errors/mistakes in the Parser's self analysis phase, which will lead to errors in error recovery/automatic lookahead calculation and any other functionality relying on the Parser's self analysis output.
As in CONSUME the index in the method name indicates the occurrence of the sub rule invocation in its rule.
Optional
options: SubruleMethodOpts<ARGS>Protected
atLike AT_LEAST_ONE
with the numerical suffix as a parameter, e.g:
atLeastOne(0, X) === AT_LEAST_ONE(X)
atLeastOne(1, X) === AT_LEAST_ONE1(X)
atLeastOne(2, X) === AT_LEAST_ONE2(X)
...
AT_LEAST_ONE
Protected
canProtected
canBy default, all tokens type may be inserted. This behavior may be overridden in inheriting Recognizers for example: One may decide that only punctuation tokens may be inserted automatically as they have no additional semantic value. (A mandatory semicolon has no additional semantic meaning, but an Integer may have additional meaning depending on its int value and context (Inserting an integer 0 in cardinality: "[1..]" will cause semantic issues as the max of the cardinality will be greater than the min value (and this is a false error!).
The token vector up to (not including) the content assist point
Protected
consumeLike CONSUME
with the numerical suffix as a parameter, e.g:
consume(0, X) === CONSUME(X)
consume(1, X) === CONSUME1(X)
consume(2, X) === CONSUME2(X)
...
Optional
options: ConsumeMethodOptsCONSUME
Rest
...args: any[]Rest
...args: any[]Protected
getProtected
getReturns an "imaginary" Token to insert when Single Token Insertion is done Override this if you require special behavior in your grammar. For example if an IntegerToken is required provide one with the image '0' so it would be valid syntactically.
Protected
manyLike MANY
with the numerical suffix as a parameter, e.g:
many(0, X) === MANY(X)
many(1, X) === MANY1(X)
many(2, X) === MANY2(X)
...
MANY
Protected
optionLike OPTION
with the numerical suffix as a parameter, e.g:
option(0, X) === OPTION(X)
option(1, X) === OPTION1(X)
option(2, X) === OPTION2(X)
...
OPTION
Protected
orLike OR
with the numerical suffix as a parameter, e.g:
or(0, X) === OR(X)
or(1, X) === OR1(X)
or(2, X) === OR2(X)
...
OR
Protected
performThis must be called at the end of a Parser constructor. See: http://chevrotain.io/docs/tutorial/step2_parsing.html#under-the-hood
Protected
subruleLike SUBRULE
with the numerical suffix as a parameter, e.g:
subrule(0, X) === SUBRULE(X)
subrule(1, X) === SUBRULE1(X)
subrule(2, X) === SUBRULE2(X)
...
Optional
options: SubruleMethodOpts<ARGS>SUBRULE
Generated using TypeDoc
A Parser that outputs a Concrete Syntax Tree. See: