LemonJS/README.md

94 lines
2.7 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

## Requires
- node
- npm
- gcc
## Compile lemon-js
```bash
gcc -o ./lemon-src/lemon-js -O2 ./lemon-src/lemon-js.c
./build.sh
```
## Example (One minute start)
Also you can build example config
```bash
./build-example.sh
node main.js
#or test if want check work
node test.js
```
## Configurate
You need create your config.js from config.template or config.example
```javascript
var config = {
lemon_bin: "./lemon-src/lemon-js", // папка с исходниками лемона
input_path: "parser_template/", // папка с шаблоном парсера
output_path: "out/", // папка куда будет выгружен файл
file_name: "parser", // имя файла шаблона
flags: "-l", // флаги для ./lemon-js
require_templates: "require_js/" // Папка для шаблона require_js/
};
```
```bash
cat config.template > config.js
# or
cat config.example > config.js
```
## Start
```bash
node main.js --c=<your_config>.js --t=<web|node>
```
## Test
Also you can test your parser
```bash
node test.js --c=<your_config>.js
```
## Also
You can use this syntax for include your *.y file.
```bash
<&&REPLACER{<file_path>}&&>
```
## Special Directives
See lemon.html for additional documentation.
- %name - Set parser class name (default is "Parse")
- %include - Include code in the beginning of file (usefull for imports)
- %code - Include code in the end of file (usefull for exports or main code)
- %token_destructor - Define code which will be executed on token destruction.
- %default_destructor
- %token_prefix - Define token name prefix.
- %syntax_error - Define custom error handler for syntax erorrs.
- %parse_accept - Define handler for all accepted tokens.
- %parse_failure - Define handler for parse errors.
- %stack_overflow - Define handler for stack overflow.
- %extra_argument - **NOT SUPPORTED**
- %token_type - **NOT SUPPORTED**
- %default_type - **NOT SUPPORTED**
- %stack_size - Set default stack size.
- %start_symbol
- %left - Set left associative tokens.
- %right - Set right associative tokens.
- %nonassoc - Set non associative tokens.
- %destructor - Define custom parser destructor.
- %type - **NOT SUPPORTED**
- %fallback - Define fallback logic for tokens.
- %wildcard - Define WILDCARD token.
- %token_class - **NOT SUPPORTED**
## Lexer
Used re2js lexer from: [http://git.macaw.me:3000/chichenkov/re2-js-generator](http://git.macaw.me:3000/chichenkov/re2-js-generator)
## Original project
See https://github.com/sormy/lemon-js
## Links
- Used js-beautify-node from: [https://github.com/rwaldron/js-beautify-node](https://github.com/rwaldron/js-beautify-node)
- Used args-parser from: [https://www.npmjs.com/package/args-parser](https://www.npmjs.com/package/args-parser)