|PyPI version| |PyPI downloads|

**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 officially written in ECMAScript (also popularly known as
`JavaScript <https://en.wikipedia.org/wiki/JavaScript>`__) and ported to
Python. Esprima is created and maintained by `Ariya
Hidayat <https://twitter.com/ariyahidayat>`__, with the help of `many
contributors <https://github.com/jquery/esprima/contributors>`__.

Python port is a line-by-line manual translation and was created and is
maintained by `German Mendez Bravo
(Kronuz) <https://twitter.com/germbravo>`__.

Features
~~~~~~~~

-  Full support for ECMAScript 2017 (`ECMA-262 8th
   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/>`__
-  Optional tracking of syntax node location (index-based and
   line-column)
-  `Heavily tested <http://esprima.org/test/ci.html>`__ (~1500 `unit
   tests <https://github.com/jquery/esprima/tree/master/test/fixtures>`__
   with `full code
   coverage <https://codecov.io/github/jquery/esprima>`__)

Installation
~~~~~~~~~~~~

.. code:: shell

    pip install esprima

API
~~~

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.

A simple example:

.. code:: python

    >>> import esprima
    >>> program = 'const answer = 42'

    >>> esprima.tokenize(program)
    [{ type: "Keyword", value: "const" },
     { type: "Identifier", value: "answer" },
     { type: "Punctuator", value: "=" },
     { type: "Numeric", value: "42" }]

    >>> esprima.parseScript(program)
    { body: [{ kind: "const", declarations: [{ init: { raw: "42", type: "Literal", value: 42 }, type: "VariableDeclarator", id: { type: "Identifier", name: "answer" } }], type: "VariableDeclaration" }], type: "Program", sourceType: "script" }

For more information, please read the `complete
documentation <http://esprima.org/doc>`__.

.. |PyPI version| image:: https://img.shields.io/pypi/v/esprima.svg
   :target: https://pypi.python.org/pypi/esprima
.. |PyPI downloads| image:: https://img.shields.io/pypi/dm/esprima.svg
   :target: https://pypi.python.org/pypi/esprima
