2017-05-03 15:35:00 +02:00
[](https://www.npmjs.com/package/esprima)
[](https://www.npmjs.com/package/esprima)
[](https://travis-ci.org/jquery/esprima)
[](https://codecov.io/github/jquery/esprima)
**Esprima** ([esprima.org](http://esprima.org), BSD license) is a high performance,
standard-compliant [ECMAScript ](http://www.ecma-international.org/publications/standards/Ecma-262.htm )
parser written in ECMAScript (also popularly known as
[JavaScript ](https://en.wikipedia.org/wiki/JavaScript )).
Esprima is created and maintained by [Ariya Hidayat ](https://twitter.com/ariyahidayat ),
with the help of [many contributors ](https://github.com/jquery/esprima/contributors ).
### Features
2017-05-27 17:36:13 +02:00
- Full support for ECMAScript 2016 ([ECMA-262 7th Edition](http://www.ecma-international.org/publications/standards/Ecma-262.htm))
- Sensible [syntax tree format ](https://github.com/estree/estree/blob/master/es5.md ) as standardized by [ESTree project ](https://github.com/estree/estree )
- Experimental support for [JSX ](https://facebook.github.io/jsx/ ), a syntax extension for [React ](https://facebook.github.io/react/ )
2017-05-03 15:35:00 +02:00
- Optional tracking of syntax node location (index-based and line-column)
2017-05-27 17:36:13 +02:00
- [Heavily tested ](http://esprima.org/test/ci.html ) (~1300 [unit tests ](https://github.com/jquery/esprima/tree/master/test/fixtures ) with [full code coverage ](https://codecov.io/github/jquery/esprima ))
2017-05-03 15:35:00 +02:00
2017-05-27 17:36:13 +02:00
### API
2017-05-03 15:35:00 +02:00
2017-05-27 17:36:13 +02:00
Esprima can be used to perform [lexical analysis ](https://en.wikipedia.org/wiki/Lexical_analysis ) (tokenization) or [syntactic analysis ](https://en.wikipedia.org/wiki/Parsing ) (parsing) of a JavaScript program.
2017-05-03 15:35:00 +02:00
2017-05-27 17:36:13 +02:00
A simple example on Node.js REPL:
```javascript
> var esprima = require('esprima');
> var program = 'const answer = 42';
> esprima.tokenize(program);
[ { type: 'Keyword', value: 'const' },
{ type: 'Identifier', value: 'answer' },
{ type: 'Punctuator', value: '=' },
{ type: 'Numeric', value: '42' } ]
> esprima.parse(program);
{ type: 'Program',
body:
[ { type: 'VariableDeclaration',
declarations: [Object],
kind: 'const' } ],
sourceType: 'script' }
```