https://github.com/arlac77/pratt-parser
TDOP parser https://tdop.github.io
https://github.com/arlac77/pratt-parser
javascript pratt-parser
Last synced: 3 months ago
JSON representation
TDOP parser https://tdop.github.io
- Host: GitHub
- URL: https://github.com/arlac77/pratt-parser
- Owner: arlac77
- License: 0bsd
- Created: 2015-08-28T18:51:51.000Z (almost 11 years ago)
- Default Branch: master
- Last Pushed: 2026-02-28T22:40:27.000Z (3 months ago)
- Last Synced: 2026-03-01T01:41:45.116Z (3 months ago)
- Topics: javascript, pratt-parser
- Language: JavaScript
- Homepage:
- Size: 2.94 MB
- Stars: 17
- Watchers: 1
- Forks: 3
- Open Issues: 2
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
[](https://www.npmjs.com/package/pratt-parser)
[](https://spdx.org/licenses/0BSD.html)
[](https://typescriptlang.org)
[](https://bundlejs.com/?q=pratt-parser)
[](https://npmjs.org/package/pratt-parser)
[](https://github.com/arlac77/pratt-parser/issues)
[](https://actions-badge.atrox.dev/arlac77/pratt-parser/goto)
[](https://github.com/prettier/prettier)
[](http://commitizen.github.io/cz-cli/)
[](https://snyk.io/test/github/arlac77/pratt-parser)
[](https://coveralls.io/github/arlac77/pratt-parser)
# pratt-parser
Pratt Parser
Based on
[Top Down Operator Precedence](https://tdop.github.io) and
[Douglas Crockford TDOP](https://github.com/douglascrockford/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);
```
# API
### Table of Contents
* [ParsePosition](#parseposition)
* [Properties](#properties)
* [Token](#token)
* [Properties](#properties-1)
* [RootToken](#roottoken)
* [parse](#parse)
* [Parameters](#parameters)
* [WhiteSpaceToken](#whitespacetoken)
* [LineCommentToken](#linecommenttoken)
* [EOFToken](#eoftoken)
* [Parser](#parser)
* [Parameters](#parameters-1)
* [error](#error)
* [Parameters](#parameters-2)
* [parse](#parse-1)
* [Parameters](#parameters-3)
* [Tokenizer](#tokenizer)
* [Parameters](#parameters-4)
* [tokens](#tokens)
* [Parameters](#parameters-5)
* [error](#error-1)
* [Parameters](#parameters-6)
## ParsePosition
Type: [Object](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Object)
### Properties
* `offset` **[number](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Number)**
* `chunk` **[string](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/String)**
## Token
Type: [Object](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Object)
### Properties
* `type` **[string](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/String)**
* `precedence` **[number](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Number)**
* `value` **any**
## RootToken
Base object for all tokens
### parse
Parses from chunk of PrasePosition and delivers next token
Modifies ParsePosition so that it points behind the detected token.
#### Parameters
* `pp` **[ParsePosition](#parseposition)**
Returns **[Token](#token)**
## WhiteSpaceToken
skip white space
## LineCommentToken
skips until end of line
## EOFToken
Token representing 'end of file'
## Parser
Creates a grammar for later parsing
### Parameters
* `grammar` **any**
* `options` **[Object](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Object)?**
### error
Forwards error to the tokenizer
#### Parameters
* `args` **...any**
Returns **[Object](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Object)** error
### parse
Parses the input and delivers the outermoost expression.
#### Parameters
* `chunk` **[string](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/String)** input text
* `context` **[Object](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Object)** object transparently passed to tokenizer
Returns **[Object](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Object)** evaluated input
## Tokenizer
Creates a tokenizer for later parsing.
### Parameters
* `grammar` **[Object](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Object)** definition of the grammar with operators...
### tokens
Delivers tokens from the input.
#### Parameters
* `chunk` **[string](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/String)** the input to be processed
* `context` **[Object](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Object)** additional info to be used by the actual token types
### error
#### Parameters
* `message` **[string](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/String)**
* `context` **[Object](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Object)** token initiating the error
* `value` **[Object](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Object)?**
Returns **[Object](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Object)** error
# install
With [npm](http://npmjs.org) do:
```shell
npm install pratt-parser
```
# license
BSD-2-Clause