A parser for lexical grammars used by jison
A parser for lexical grammars used by jison and jison-lex.
npm install lex-parser
To build the parser yourself, clone the git repo then run:
make
This will generate lex-parser.js.
var lexParser = require("@ts-jison/lex-parser");
// parse a lexical grammar and return JSON
lexParser.parse("%% ... ");
The parser can parse its own lexical grammar, shown below:
NAME [a-zA-Z_][a-zA-Z0-9_-]*
%s indented trail rules
%x code start_condition options conditions action
%%
"%{"(.|\n)*?"%}" yytext = yytext.substr(2, yytext.length-4); return 'ACTION'
"/"(.|\n|\r)?"/" / ignore */
"//". / ignore */
\n+ / /
\s+ / /
{NAME} return 'NAME'
\"("\\\\"|'\"'|[^"])*\" yytext = yytext.replace(/\\"/g,'"');return 'STRING_LIT'
"'"("\\\\"|"\'"|[^'])*"'" yytext = yytext.replace(/\\'/g,"'");return 'STRING_LIT'
"|" return '|'
"["("\\\\"|"\]"|[^\]])*"]" return 'ANY_GROUP_REGEX'
"(?:" return 'SPECIAL_GROUP'
"(?=" return 'SPECIAL_GROUP'
"(?!" return 'SPECIAL_GROUP'
"(" return '('
")" return ')'
"+" return '+'
"" return ''
"?" return '?'
"^" return '^'
"," return ','
"<
"<" this.begin('conditions'); return '<'
"/!" return '/!'
"/" return '/'
"\\"([0-7]{1,3}|[rfntvsSbBwWdD\\*+()${}|[\]\/.^?]|"c"[A-Z]|"x"[0-9A-F]{2}|"u"[a-fA-F0-9]{4}) return 'ESCAPE_CHAR'
"\\". yytext = yytext.replace(/^\\/g,''); return 'ESCAPE_CHAR'
"$" return '$'
"." return '.'
"%options" yy.options = {}; this.begin('options')
"%s" this.begin('start_condition');return 'START_INC'
"%x" this.begin('start_condition');return 'START_EXC'
"%%" this.begin('rules'); return '%%'
"{"\d+(","\s?\d+|",")?"}" return 'RANGE_REGEX'
"{"{NAME}"}" return 'NAME_BRACE'
"{" return '{'
"}" return '}'
. / ignore bad characters /
<*><
(.|\n)+ return 'CODE'
%%
MIT