TDOP parser
npm install pratt-parser










Pratt Parser
Based on
Top Down Operator Precedence and
Douglas Crockford TDOP
``javascript
import { Parser, WhiteSpaceToken, NumberToken } from "pratt-parser";
function Value(value) {
return Object.create(null, {
value: {
value: value
}
});
}
const myGrammar = new Parser({
tokens: [WhiteSpaceToken, NumberToken],
prefix: {
"(": {
nud(grammar) {
const e = grammar.expression(0);
grammar.advance(")");
return e;
}
}
},
infix: {
")": {},
"+": {
precedence: 50,
combine: (left, right) => Value(left.value + right.value)
},
"-": {
precedence: 50,
combine: (left, right) => Value(left.value - right.value)
},
"*": {
precedence: 60,
combine: (left, right) => Value(left.value * right.value)
},
"/": {
precedence: 60,
combine: (left, right) => Value(left.value / right.value)
}
}
});
console.log(myGrammar.parse("(1 + (1 + 4 3)) (2 + 1)").value);
`
* ParsePosition
* Properties
* Token
* Properties
* RootToken
* parse
* Parameters
* WhiteSpaceToken
* LineCommentToken
* EOFToken
* Parser
* Parameters
* error
* Parameters
* parse
* Parameters
* Tokenizer
* Parameters
* tokens
* Parameters
* error
* Parameters
Type: Object
* offset number chunk
* string
Type: Object
* type string precedence
* number value
* any
Base object for all tokens
Parses from chunk of PrasePosition and delivers next token
Modifies ParsePosition so that it points behind the detected token.
#### Parameters
* pp ParsePosition
Returns Token
skip white space
skips until end of line
Token representing 'end of file'
Creates a grammar for later parsing
* grammar any options
* Object?
Forwards error to the tokenizer
#### Parameters
* args ...any
Returns Object error
Parses the input and delivers the outermoost expression.
#### Parameters
* chunk string input textcontext
* Object object transparently passed to tokenizer
Returns Object evaluated input
Creates a tokenizer for later parsing.
* grammar Object definition of the grammar with operators...
Delivers tokens from the input.
#### Parameters
* chunk string the input to be processedcontext
* Object additional info to be used by the actual token types
#### Parameters
* message string context
* Object token initiating the errorvalue
* Object?
Returns Object error
With npm do:
`shell``
npm install pratt-parser
BSD-2-Clause