## 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=.js --t= ``` ## Test Also you can test your parser ```bash node test.js --c=.js ``` ## Also You can use this syntax for include your *.y file. ```bash <&&REPLACER{}&&> ``` ## 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)