An extension to Lark that generates a Javascript standalone
Project description
Lark.js
Generate LALR(1) parsers in Javascript
Lark is a popular parsing toolkit for Python.
This project is a live port of the Lark standalone parser to Javascript.
Lark.js takes a .lark
grammar, and from it generates a standalone Javascript parser.
The LALR(1) algorithm guarantees O(n) running time (proportional to input length), and minimal memory consumption.
Lark grammars
Lark grammars are written in an augmented EBNF (a textual format), and usually use the .lark
extension.
Because they are purely declarative, and don't contain code, they are entirely portable between languages.
It is now possible to use Lark grammars in 3 languages: Python, Javascript, and Julia.
"Hello World" Grammar
The following Lark grammar will match the string "Hello, World!" --
// A bunch of words
start: word+
// Allow optional punctuation after each word
word: WORD ["," | "!"]
// imports WORD from library
%import common.WORD
// Disregard spaces in text
%ignore " "
Quick links
- Documentation
- Examples
- Online IDE
- Gitter chat - A place to ask questions and discuss
- Lark - The Python library
Install Lark.js
Install lark-js on Python:
pip install lark-js --upgrade
Generate a Javascript LALR(1) parser
lark-js my_grammar.lark -o my_parser.js
For help, run:
lark-js --help
Features
- LALR(1) parser - Fast and light
- EBNF grammar
- Builds a parse-tree (AST) automagically, based on the structure of the grammar
- Usable in the browser and in Node.js
- Interactive parsing (step-by-step)
- Error handling
- Tree utilities (including transformers & visitors)
- Line & column tracking
- Standard library of terminals (strings, numbers, names, etc.)
- Import grammars from Nearley.js
Planned features:
- Support for Earley
Syntax Highlighting
Lark provides syntax highlighting for its grammar files (*.lark):
Live Port
Usually, ports from one language to another are at risk of falling out of sync as time goes on.
But Lark.js wasn't translated by hand -- 98% of the lines were transpiled directly from Lark's Python code!
That means that futures updates to Lark-Python (fixes, features, etc.) will automatically sync to Lark.js.
License
Lark.js uses the MIT license.
Contribute
Lark.js is accepting pull-requests. If you would like to help, open an issue or find us on gitter.
Sponsoring
Lark.js was made possible with the help of a generous donation by Smore ❤️
If you like Lark, and want to see it grow, please consider sponsoring us!
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Hashes for Lark_js-0.0.7-py2.py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 9e0c77ea807f1fb5e95e32ec02e80d3c7313144ae6c31dbbb44405d2037f68b1 |
|
MD5 | 7b34420a9b59eae75c74a1a8bdc44ec1 |
|
BLAKE2b-256 | 96e04e66bb8bc5557ae0d5ced8ee50e4ed8b000984d53dbca7c7fed1fb35011c |