{"maintainers":[{"name":"anonymous","email":"zack.carter@gmail.com"}],"dist-tags":{"latest":"0.1.4"},"author":{"name":"Zach Carter"},"description":"A parser for lexical grammars used by jison","readme":"# lex-parser\n\nA parser for lexical grammars used by [jison](http://jison.org) and jison-lex.\n\n## install\n\n    npm install lex-parser\n\n## build\n\nTo build the parser yourself, clone the git repo then run:\n\n    make\n\nThis will generate `lex-parser.js`.\n\n## usage\n\n    var lexParser = require('lex-parser');\n\n    // parse a lexical grammar and return JSON\n    lexParser.parse(\"%% ... \");\n\n## example\n\nThe parser can parse its own lexical grammar, shown below:\n\n    NAME              [a-zA-Z_][a-zA-Z0-9_-]*\n\n    %s indented trail rules\n    %x code start_condition options conditions action\n\n    %%\n\n    <action>[^{}]+          return 'ACTION_BODY'\n    <action>\"{\"             yy.depth++; return '{'\n    <action>\"}\"             yy.depth == 0 ? this.begin('trail') : yy.depth--; return '}'\n\n    <conditions>{NAME}      return 'NAME'\n    <conditions>\">\"         this.popState(); return '>'\n    <conditions>\",\"         return ','\n    <conditions>\"*\"         return '*'\n\n    <rules>\\n+              /* */\n    <rules>\\s+              this.begin('indented')\n    <rules>\"%%\"             this.begin('code'); return '%%'\n    <rules>[a-zA-Z0-9_]+    return 'CHARACTER_LIT'\n\n    <options>{NAME}         yy.options[yytext] = true\n    <options>\\n+            this.begin('INITIAL')\n    <options>\\s+\\n+         this.begin('INITIAL')\n    <options>\\s+            /* empty */\n\n    <start_condition>{NAME}         return 'START_COND'\n    <start_condition>\\n+            this.begin('INITIAL')\n    <start_condition>\\s+\\n+         this.begin('INITIAL')\n    <start_condition>\\s+            /* empty */\n\n    <trail>.*\\n+                    this.begin('rules')\n\n    <indented>\"{\"                   yy.depth = 0; this.begin('action'); return '{'\n    <indented>\"%{\"(.|\\n)*?\"%}\"      this.begin('trail'); yytext = yytext.substr(2, yytext.length-4);return 'ACTION'\n    \"%{\"(.|\\n)*?\"%}\"                yytext = yytext.substr(2, yytext.length-4); return 'ACTION'\n    <indented>.+                    this.begin('rules'); return 'ACTION'\n\n    \"/*\"(.|\\n|\\r)*?\"*/\"             /* ignore */\n    \"//\".*                          /* ignore */\n\n    \\n+                             /* */\n    \\s+                             /* */\n    {NAME}                          return 'NAME'\n    \\\"(\"\\\\\\\\\"|'\\\"'|[^\"])*\\\"         yytext = yytext.replace(/\\\\\"/g,'\"');return 'STRING_LIT'\n    \"'\"(\"\\\\\\\\\"|\"\\'\"|[^'])*\"'\"       yytext = yytext.replace(/\\\\'/g,\"'\");return 'STRING_LIT'\n    \"|\"                             return '|'\n    \"[\"(\"\\\\\\\\\"|\"\\]\"|[^\\]])*\"]\"      return 'ANY_GROUP_REGEX'\n    \"(?:\"                           return 'SPECIAL_GROUP'\n    \"(?=\"                           return 'SPECIAL_GROUP'\n    \"(?!\"                           return 'SPECIAL_GROUP'\n    \"(\"                             return '('\n    \")\"                             return ')'\n    \"+\"                             return '+'\n    \"*\"                             return '*'\n    \"?\"                             return '?'\n    \"^\"                             return '^'\n    \",\"                             return ','\n    \"<<EOF>>\"                       return '$'\n    \"<\"                             this.begin('conditions'); return '<'\n    \"/!\"                            return '/!'\n    \"/\"                             return '/'\n    \"\\\\\"([0-7]{1,3}|[rfntvsSbBwWdD\\\\*+()${}|[\\]\\/.^?]|\"c\"[A-Z]|\"x\"[0-9A-F]{2}|\"u\"[a-fA-F0-9]{4}) return 'ESCAPE_CHAR'\n    \"\\\\\".                           yytext = yytext.replace(/^\\\\/g,''); return 'ESCAPE_CHAR'\n    \"$\"                             return '$'\n    \".\"                             return '.'\n    \"%options\"                      yy.options = {}; this.begin('options')\n    \"%s\"                            this.begin('start_condition');return 'START_INC'\n    \"%x\"                            this.begin('start_condition');return 'START_EXC'\n    \"%%\"                            this.begin('rules'); return '%%'\n    \"{\"\\d+(\",\"\\s?\\d+|\",\")?\"}\"       return 'RANGE_REGEX'\n    \"{\"{NAME}\"}\"                    return 'NAME_BRACE'\n    \"{\"                             return '{'\n    \"}\"                             return '}'\n    .                               /* ignore bad characters */\n    <*><<EOF>>                      return 'EOF'\n\n    <code>(.|\\n)+                   return 'CODE'\n\n    %%\n\n## license\n\nMIT\n","repository":{"type":"git","repository":"https://github.com/zaach/lex-parser.git"},"users":{"wenbing":true,"yvesm":true,"slurm":true},"versions":{"0.0.1":{"name":"lex-parser","version":"0.0.1","description":"A parser for lexical grammars used by jison","main":"lex-parser.js","scripts":{"test":"make test"},"repository":"","keywords":["lexical","grammar","parser","jison"],"author":{"name":"Zach Carter"},"license":"MIT","devDependencies":{"jison":"0.3.12","test":"*"},"readme":"# lex-parser\n\nA parser for lexical grammars used by [jison](http://jison.org) and jison-lex.\n\n## install\n\n    npm install lex-parser\n\n## build\n\nTo build the parser yourself, clone the git repo then run:\n\n    make\n\nThis will generate `lex-parser.js`.\n\n## usage\n\n    var lexParser = require('lex-parser');\n\n    // parse a lexical grammar and return JSON\n    lexParser.parse(\"%% ... \");\n\n## example\n\nThe parser can parse its own lexical grammar, shown below:\n\n    NAME              [a-zA-Z_][a-zA-Z0-9_-]*\n\n    %s indented trail rules\n    %x code start_condition options conditions action\n\n    %%\n\n    <action>[^{}]+          return 'ACTION_BODY'\n    <action>\"{\"             yy.depth++; return '{'\n    <action>\"}\"             yy.depth == 0 ? this.begin('trail') : yy.depth--; return '}'\n\n    <conditions>{NAME}      return 'NAME'\n    <conditions>\">\"         this.popState(); return '>'\n    <conditions>\",\"         return ','\n    <conditions>\"*\"         return '*'\n\n    <rules>\\n+              /* */\n    <rules>\\s+              this.begin('indented')\n    <rules>\"%%\"             this.begin('code'); return '%%'\n    <rules>[a-zA-Z0-9_]+    return 'CHARACTER_LIT'\n\n    <options>{NAME}         yy.options[yytext] = true\n    <options>\\n+            this.begin('INITIAL')\n    <options>\\s+\\n+         this.begin('INITIAL')\n    <options>\\s+            /* empty */\n\n    <start_condition>{NAME}         return 'START_COND'\n    <start_condition>\\n+            this.begin('INITIAL')\n    <start_condition>\\s+\\n+         this.begin('INITIAL')\n    <start_condition>\\s+            /* empty */\n\n    <trail>.*\\n+                    this.begin('rules')\n\n    <indented>\"{\"                   yy.depth = 0; this.begin('action'); return '{'\n    <indented>\"%{\"(.|\\n)*?\"%}\"      this.begin('trail'); yytext = yytext.substr(2, yytext.length-4);return 'ACTION'\n    \"%{\"(.|\\n)*?\"%}\"                yytext = yytext.substr(2, yytext.length-4); return 'ACTION'\n    <indented>.+                    this.begin('rules'); return 'ACTION'\n\n    \"/*\"(.|\\n|\\r)*?\"*/\"             /* ignore */\n    \"//\".*                          /* ignore */\n\n    \\n+                             /* */\n    \\s+                             /* */\n    {NAME}                          return 'NAME'\n    \\\"(\"\\\\\\\\\"|'\\\"'|[^\"])*\\\"         yytext = yytext.replace(/\\\\\"/g,'\"');return 'STRING_LIT'\n    \"'\"(\"\\\\\\\\\"|\"\\'\"|[^'])*\"'\"       yytext = yytext.replace(/\\\\'/g,\"'\");return 'STRING_LIT'\n    \"|\"                             return '|'\n    \"[\"(\"\\\\\\\\\"|\"\\]\"|[^\\]])*\"]\"      return 'ANY_GROUP_REGEX'\n    \"(?:\"                           return 'SPECIAL_GROUP'\n    \"(?=\"                           return 'SPECIAL_GROUP'\n    \"(?!\"                           return 'SPECIAL_GROUP'\n    \"(\"                             return '('\n    \")\"                             return ')'\n    \"+\"                             return '+'\n    \"*\"                             return '*'\n    \"?\"                             return '?'\n    \"^\"                             return '^'\n    \",\"                             return ','\n    \"<<EOF>>\"                       return '$'\n    \"<\"                             this.begin('conditions'); return '<'\n    \"/!\"                            return '/!'\n    \"/\"                             return '/'\n    \"\\\\\"([0-7]{1,3}|[rfntvsSbBwWdD\\\\*+()${}|[\\]\\/.^?]|\"c\"[A-Z]|\"x\"[0-9A-F]{2}|\"u\"[a-fA-F0-9]{4}) return 'ESCAPE_CHAR'\n    \"\\\\\".                           yytext = yytext.replace(/^\\\\/g,''); return 'ESCAPE_CHAR'\n    \"$\"                             return '$'\n    \".\"                             return '.'\n    \"%options\"                      yy.options = {}; this.begin('options')\n    \"%s\"                            this.begin('start_condition');return 'START_INC'\n    \"%x\"                            this.begin('start_condition');return 'START_EXC'\n    \"%%\"                            this.begin('rules'); return '%%'\n    \"{\"\\d+(\",\"\\s?\\d+|\",\")?\"}\"       return 'RANGE_REGEX'\n    \"{\"{NAME}\"}\"                    return 'NAME_BRACE'\n    \"{\"                             return '{'\n    \"}\"                             return '}'\n    .                               /* ignore bad characters */\n    <*><<EOF>>                      return 'EOF'\n\n    <code>(.|\\n)+                   return 'CODE'\n\n    %%\n\n## license\n\nMIT\n","_id":"lex-parser@0.0.1","dist":{"shasum":"0130d101c567bd1af0c163a8c60f07c996d9da5d","tarball":"http://repository.ncinga.com/nexus/content/repositories/npm-js-registry/lex-parser/-/lex-parser-0.0.1.tgz","integrity":"sha512-IATMwD/pfkJxINgvlOfFOwGydEtWPsEm8eS27o+9Ypop2DDO26XV/ctZpTyl7TUBsEBQfmCzBGgGH+6QYqJbKA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDLtYP+zq38X8gb1xrVSkbOi0kSM5d7m1SwFseXodo2UwIgWA1UJmtLiwL6kAp5rB1+AQykyTCkxd7zkNPI3AJDbBY="}]},"_npmVersion":"1.1.63","_npmUser":{"name":"anonymous","email":"zack.carter@gmail.com"},"maintainers":[{"name":"anonymous","email":"zack.carter@gmail.com"}],"directories":{}},"0.1.0":{"name":"lex-parser","version":"0.1.0","description":"A parser for lexical grammars used by jison","main":"lex-parser.js","scripts":{"test":"make test"},"repository":"","keywords":["lexical","grammar","parser","jison"],"author":{"name":"Zach Carter"},"license":"MIT","devDependencies":{"jison":"0.4.x","test":"*"},"readme":"# lex-parser\n\nA parser for lexical grammars used by [jison](http://jison.org) and jison-lex.\n\n## install\n\n    npm install lex-parser\n\n## build\n\nTo build the parser yourself, clone the git repo then run:\n\n    make\n\nThis will generate `lex-parser.js`.\n\n## usage\n\n    var lexParser = require('lex-parser');\n\n    // parse a lexical grammar and return JSON\n    lexParser.parse(\"%% ... \");\n\n## example\n\nThe parser can parse its own lexical grammar, shown below:\n\n    NAME              [a-zA-Z_][a-zA-Z0-9_-]*\n\n    %s indented trail rules\n    %x code start_condition options conditions action\n\n    %%\n\n    <action>[^{}]+          return 'ACTION_BODY'\n    <action>\"{\"             yy.depth++; return '{'\n    <action>\"}\"             yy.depth == 0 ? this.begin('trail') : yy.depth--; return '}'\n\n    <conditions>{NAME}      return 'NAME'\n    <conditions>\">\"         this.popState(); return '>'\n    <conditions>\",\"         return ','\n    <conditions>\"*\"         return '*'\n\n    <rules>\\n+              /* */\n    <rules>\\s+              this.begin('indented')\n    <rules>\"%%\"             this.begin('code'); return '%%'\n    <rules>[a-zA-Z0-9_]+    return 'CHARACTER_LIT'\n\n    <options>{NAME}         yy.options[yytext] = true\n    <options>\\n+            this.begin('INITIAL')\n    <options>\\s+\\n+         this.begin('INITIAL')\n    <options>\\s+            /* empty */\n\n    <start_condition>{NAME}         return 'START_COND'\n    <start_condition>\\n+            this.begin('INITIAL')\n    <start_condition>\\s+\\n+         this.begin('INITIAL')\n    <start_condition>\\s+            /* empty */\n\n    <trail>.*\\n+                    this.begin('rules')\n\n    <indented>\"{\"                   yy.depth = 0; this.begin('action'); return '{'\n    <indented>\"%{\"(.|\\n)*?\"%}\"      this.begin('trail'); yytext = yytext.substr(2, yytext.length-4);return 'ACTION'\n    \"%{\"(.|\\n)*?\"%}\"                yytext = yytext.substr(2, yytext.length-4); return 'ACTION'\n    <indented>.+                    this.begin('rules'); return 'ACTION'\n\n    \"/*\"(.|\\n|\\r)*?\"*/\"             /* ignore */\n    \"//\".*                          /* ignore */\n\n    \\n+                             /* */\n    \\s+                             /* */\n    {NAME}                          return 'NAME'\n    \\\"(\"\\\\\\\\\"|'\\\"'|[^\"])*\\\"         yytext = yytext.replace(/\\\\\"/g,'\"');return 'STRING_LIT'\n    \"'\"(\"\\\\\\\\\"|\"\\'\"|[^'])*\"'\"       yytext = yytext.replace(/\\\\'/g,\"'\");return 'STRING_LIT'\n    \"|\"                             return '|'\n    \"[\"(\"\\\\\\\\\"|\"\\]\"|[^\\]])*\"]\"      return 'ANY_GROUP_REGEX'\n    \"(?:\"                           return 'SPECIAL_GROUP'\n    \"(?=\"                           return 'SPECIAL_GROUP'\n    \"(?!\"                           return 'SPECIAL_GROUP'\n    \"(\"                             return '('\n    \")\"                             return ')'\n    \"+\"                             return '+'\n    \"*\"                             return '*'\n    \"?\"                             return '?'\n    \"^\"                             return '^'\n    \",\"                             return ','\n    \"<<EOF>>\"                       return '$'\n    \"<\"                             this.begin('conditions'); return '<'\n    \"/!\"                            return '/!'\n    \"/\"                             return '/'\n    \"\\\\\"([0-7]{1,3}|[rfntvsSbBwWdD\\\\*+()${}|[\\]\\/.^?]|\"c\"[A-Z]|\"x\"[0-9A-F]{2}|\"u\"[a-fA-F0-9]{4}) return 'ESCAPE_CHAR'\n    \"\\\\\".                           yytext = yytext.replace(/^\\\\/g,''); return 'ESCAPE_CHAR'\n    \"$\"                             return '$'\n    \".\"                             return '.'\n    \"%options\"                      yy.options = {}; this.begin('options')\n    \"%s\"                            this.begin('start_condition');return 'START_INC'\n    \"%x\"                            this.begin('start_condition');return 'START_EXC'\n    \"%%\"                            this.begin('rules'); return '%%'\n    \"{\"\\d+(\",\"\\s?\\d+|\",\")?\"}\"       return 'RANGE_REGEX'\n    \"{\"{NAME}\"}\"                    return 'NAME_BRACE'\n    \"{\"                             return '{'\n    \"}\"                             return '}'\n    .                               /* ignore bad characters */\n    <*><<EOF>>                      return 'EOF'\n\n    <code>(.|\\n)+                   return 'CODE'\n\n    %%\n\n## license\n\nMIT\n","_id":"lex-parser@0.1.0","dist":{"shasum":"582a8d9a04e91ef6e526ef3217092cb7313fa011","tarball":"http://repository.ncinga.com/nexus/content/repositories/npm-js-registry/lex-parser/-/lex-parser-0.1.0.tgz","integrity":"sha512-2lJaSL4L5d/fkaXNdMkduoHkABStyCRZRrihNh/uiFuj9EUl16C6Jjt+2XHW+Eg1X5UFjBsA3Fna+FKn7F1sag==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIFrCwTYUs3H8UYTB+0aAV3UlDQM/rqWxXcYgFnTJ2rcRAiBUsYDl5M1kjdiiY5UBq243Ezzc/1B9icWG1Mc4F5/rMA=="}]},"_npmVersion":"1.1.63","_npmUser":{"name":"anonymous","email":"zack.carter@gmail.com"},"maintainers":[{"name":"anonymous","email":"zack.carter@gmail.com"}]},"0.1.1":{"name":"lex-parser","version":"0.1.1","description":"A parser for lexical grammars used by jison","main":"lex-parser.js","scripts":{"test":"make test"},"repository":"","keywords":["lexical","grammar","parser","jison"],"author":{"name":"Zach Carter"},"license":"MIT","devDependencies":{"jison":"0.4.x","test":"*"},"readme":"# lex-parser\n\nA parser for lexical grammars used by [jison](http://jison.org) and jison-lex.\n\n## install\n\n    npm install lex-parser\n\n## build\n\nTo build the parser yourself, clone the git repo then run:\n\n    make\n\nThis will generate `lex-parser.js`.\n\n## usage\n\n    var lexParser = require('lex-parser');\n\n    // parse a lexical grammar and return JSON\n    lexParser.parse(\"%% ... \");\n\n## example\n\nThe parser can parse its own lexical grammar, shown below:\n\n    NAME              [a-zA-Z_][a-zA-Z0-9_-]*\n\n    %s indented trail rules\n    %x code start_condition options conditions action\n\n    %%\n\n    <action>[^{}]+          return 'ACTION_BODY'\n    <action>\"{\"             yy.depth++; return '{'\n    <action>\"}\"             yy.depth == 0 ? this.begin('trail') : yy.depth--; return '}'\n\n    <conditions>{NAME}      return 'NAME'\n    <conditions>\">\"         this.popState(); return '>'\n    <conditions>\",\"         return ','\n    <conditions>\"*\"         return '*'\n\n    <rules>\\n+              /* */\n    <rules>\\s+              this.begin('indented')\n    <rules>\"%%\"             this.begin('code'); return '%%'\n    <rules>[a-zA-Z0-9_]+    return 'CHARACTER_LIT'\n\n    <options>{NAME}         yy.options[yytext] = true\n    <options>\\n+            this.begin('INITIAL')\n    <options>\\s+\\n+         this.begin('INITIAL')\n    <options>\\s+            /* empty */\n\n    <start_condition>{NAME}         return 'START_COND'\n    <start_condition>\\n+            this.begin('INITIAL')\n    <start_condition>\\s+\\n+         this.begin('INITIAL')\n    <start_condition>\\s+            /* empty */\n\n    <trail>.*\\n+                    this.begin('rules')\n\n    <indented>\"{\"                   yy.depth = 0; this.begin('action'); return '{'\n    <indented>\"%{\"(.|\\n)*?\"%}\"      this.begin('trail'); yytext = yytext.substr(2, yytext.length-4);return 'ACTION'\n    \"%{\"(.|\\n)*?\"%}\"                yytext = yytext.substr(2, yytext.length-4); return 'ACTION'\n    <indented>.+                    this.begin('rules'); return 'ACTION'\n\n    \"/*\"(.|\\n|\\r)*?\"*/\"             /* ignore */\n    \"//\".*                          /* ignore */\n\n    \\n+                             /* */\n    \\s+                             /* */\n    {NAME}                          return 'NAME'\n    \\\"(\"\\\\\\\\\"|'\\\"'|[^\"])*\\\"         yytext = yytext.replace(/\\\\\"/g,'\"');return 'STRING_LIT'\n    \"'\"(\"\\\\\\\\\"|\"\\'\"|[^'])*\"'\"       yytext = yytext.replace(/\\\\'/g,\"'\");return 'STRING_LIT'\n    \"|\"                             return '|'\n    \"[\"(\"\\\\\\\\\"|\"\\]\"|[^\\]])*\"]\"      return 'ANY_GROUP_REGEX'\n    \"(?:\"                           return 'SPECIAL_GROUP'\n    \"(?=\"                           return 'SPECIAL_GROUP'\n    \"(?!\"                           return 'SPECIAL_GROUP'\n    \"(\"                             return '('\n    \")\"                             return ')'\n    \"+\"                             return '+'\n    \"*\"                             return '*'\n    \"?\"                             return '?'\n    \"^\"                             return '^'\n    \",\"                             return ','\n    \"<<EOF>>\"                       return '$'\n    \"<\"                             this.begin('conditions'); return '<'\n    \"/!\"                            return '/!'\n    \"/\"                             return '/'\n    \"\\\\\"([0-7]{1,3}|[rfntvsSbBwWdD\\\\*+()${}|[\\]\\/.^?]|\"c\"[A-Z]|\"x\"[0-9A-F]{2}|\"u\"[a-fA-F0-9]{4}) return 'ESCAPE_CHAR'\n    \"\\\\\".                           yytext = yytext.replace(/^\\\\/g,''); return 'ESCAPE_CHAR'\n    \"$\"                             return '$'\n    \".\"                             return '.'\n    \"%options\"                      yy.options = {}; this.begin('options')\n    \"%s\"                            this.begin('start_condition');return 'START_INC'\n    \"%x\"                            this.begin('start_condition');return 'START_EXC'\n    \"%%\"                            this.begin('rules'); return '%%'\n    \"{\"\\d+(\",\"\\s?\\d+|\",\")?\"}\"       return 'RANGE_REGEX'\n    \"{\"{NAME}\"}\"                    return 'NAME_BRACE'\n    \"{\"                             return '{'\n    \"}\"                             return '}'\n    .                               /* ignore bad characters */\n    <*><<EOF>>                      return 'EOF'\n\n    <code>(.|\\n)+                   return 'CODE'\n\n    %%\n\n## license\n\nMIT\n","readmeFilename":"README.md","_id":"lex-parser@0.1.1","dist":{"shasum":"1ebbea4ae56ffa39113ab6458a9149712685810d","tarball":"http://repository.ncinga.com/nexus/content/repositories/npm-js-registry/lex-parser/-/lex-parser-0.1.1.tgz","integrity":"sha512-nvZ3RFE0yqCZ5ZqyiL4+cJlR1VaPI9ArmMF8sm+yWmmMMZb11n9YQ23Nwizm55MSOazCTzE0N/cfy5td9du4Xw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQC6Mal78A6exjw0WGBiF2g3u9RCV00kySEnLPROiB2K0gIgAqJjt9Y17FDO450Z+v3+tR0Pd5BNK5KOa9c+vAs7Vss="}]},"_from":".","_npmVersion":"1.2.10","_npmUser":{"name":"anonymous","email":"zack.carter@gmail.com"},"maintainers":[{"name":"anonymous","email":"zack.carter@gmail.com"}]},"0.1.2":{"name":"lex-parser","version":"0.1.2","description":"A parser for lexical grammars used by jison","main":"lex-parser.js","scripts":{"test":"make test"},"repository":"","keywords":["lexical","grammar","parser","jison"],"author":{"name":"Zach Carter"},"license":"MIT","devDependencies":{"jison":"0.4.x","test":"*"},"readme":"# lex-parser\n\nA parser for lexical grammars used by [jison](http://jison.org) and jison-lex.\n\n## install\n\n    npm install lex-parser\n\n## build\n\nTo build the parser yourself, clone the git repo then run:\n\n    make\n\nThis will generate `lex-parser.js`.\n\n## usage\n\n    var lexParser = require('lex-parser');\n\n    // parse a lexical grammar and return JSON\n    lexParser.parse(\"%% ... \");\n\n## example\n\nThe parser can parse its own lexical grammar, shown below:\n\n    NAME              [a-zA-Z_][a-zA-Z0-9_-]*\n\n    %s indented trail rules\n    %x code start_condition options conditions action\n\n    %%\n\n    <action>[^{}]+          return 'ACTION_BODY'\n    <action>\"{\"             yy.depth++; return '{'\n    <action>\"}\"             yy.depth == 0 ? this.begin('trail') : yy.depth--; return '}'\n\n    <conditions>{NAME}      return 'NAME'\n    <conditions>\">\"         this.popState(); return '>'\n    <conditions>\",\"         return ','\n    <conditions>\"*\"         return '*'\n\n    <rules>\\n+              /* */\n    <rules>\\s+              this.begin('indented')\n    <rules>\"%%\"             this.begin('code'); return '%%'\n    <rules>[a-zA-Z0-9_]+    return 'CHARACTER_LIT'\n\n    <options>{NAME}         yy.options[yytext] = true\n    <options>\\n+            this.begin('INITIAL')\n    <options>\\s+\\n+         this.begin('INITIAL')\n    <options>\\s+            /* empty */\n\n    <start_condition>{NAME}         return 'START_COND'\n    <start_condition>\\n+            this.begin('INITIAL')\n    <start_condition>\\s+\\n+         this.begin('INITIAL')\n    <start_condition>\\s+            /* empty */\n\n    <trail>.*\\n+                    this.begin('rules')\n\n    <indented>\"{\"                   yy.depth = 0; this.begin('action'); return '{'\n    <indented>\"%{\"(.|\\n)*?\"%}\"      this.begin('trail'); yytext = yytext.substr(2, yytext.length-4);return 'ACTION'\n    \"%{\"(.|\\n)*?\"%}\"                yytext = yytext.substr(2, yytext.length-4); return 'ACTION'\n    <indented>.+                    this.begin('rules'); return 'ACTION'\n\n    \"/*\"(.|\\n|\\r)*?\"*/\"             /* ignore */\n    \"//\".*                          /* ignore */\n\n    \\n+                             /* */\n    \\s+                             /* */\n    {NAME}                          return 'NAME'\n    \\\"(\"\\\\\\\\\"|'\\\"'|[^\"])*\\\"         yytext = yytext.replace(/\\\\\"/g,'\"');return 'STRING_LIT'\n    \"'\"(\"\\\\\\\\\"|\"\\'\"|[^'])*\"'\"       yytext = yytext.replace(/\\\\'/g,\"'\");return 'STRING_LIT'\n    \"|\"                             return '|'\n    \"[\"(\"\\\\\\\\\"|\"\\]\"|[^\\]])*\"]\"      return 'ANY_GROUP_REGEX'\n    \"(?:\"                           return 'SPECIAL_GROUP'\n    \"(?=\"                           return 'SPECIAL_GROUP'\n    \"(?!\"                           return 'SPECIAL_GROUP'\n    \"(\"                             return '('\n    \")\"                             return ')'\n    \"+\"                             return '+'\n    \"*\"                             return '*'\n    \"?\"                             return '?'\n    \"^\"                             return '^'\n    \",\"                             return ','\n    \"<<EOF>>\"                       return '$'\n    \"<\"                             this.begin('conditions'); return '<'\n    \"/!\"                            return '/!'\n    \"/\"                             return '/'\n    \"\\\\\"([0-7]{1,3}|[rfntvsSbBwWdD\\\\*+()${}|[\\]\\/.^?]|\"c\"[A-Z]|\"x\"[0-9A-F]{2}|\"u\"[a-fA-F0-9]{4}) return 'ESCAPE_CHAR'\n    \"\\\\\".                           yytext = yytext.replace(/^\\\\/g,''); return 'ESCAPE_CHAR'\n    \"$\"                             return '$'\n    \".\"                             return '.'\n    \"%options\"                      yy.options = {}; this.begin('options')\n    \"%s\"                            this.begin('start_condition');return 'START_INC'\n    \"%x\"                            this.begin('start_condition');return 'START_EXC'\n    \"%%\"                            this.begin('rules'); return '%%'\n    \"{\"\\d+(\",\"\\s?\\d+|\",\")?\"}\"       return 'RANGE_REGEX'\n    \"{\"{NAME}\"}\"                    return 'NAME_BRACE'\n    \"{\"                             return '{'\n    \"}\"                             return '}'\n    .                               /* ignore bad characters */\n    <*><<EOF>>                      return 'EOF'\n\n    <code>(.|\\n)+                   return 'CODE'\n\n    %%\n\n## license\n\nMIT\n","readmeFilename":"README.md","_id":"lex-parser@0.1.2","dist":{"shasum":"cc5712e361aaabd4a1bb75c469b8acaec15e0ec6","tarball":"http://repository.ncinga.com/nexus/content/repositories/npm-js-registry/lex-parser/-/lex-parser-0.1.2.tgz","integrity":"sha512-05o2Y3lWS9Awy2yhZr9NPUNMJcMzylH/19A4QLbJR95cRszYrGZoMJjLq4cxKOKU6PFaa3KJcKnRrhTblY/V0A==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCtk2MSisg/iUtNRXI1vypVLqYe4oBKd7Db8D8FDHIJlgIgdROp67ZB6age/y5Z3oUTRwZkN9CKaL1K+ZqSj2DsxRg="}]},"_from":".","_npmVersion":"1.2.10","_npmUser":{"name":"anonymous","email":"zack.carter@gmail.com"},"maintainers":[{"name":"anonymous","email":"zack.carter@gmail.com"}]},"0.1.3":{"name":"lex-parser","version":"0.1.3","description":"A parser for lexical grammars used by jison","main":"lex-parser.js","scripts":{"test":"make test"},"repository":{"type":"git","repository":"https://github.com/zaach/lex-parser.git"},"keywords":["lexical","grammar","parser","jison"],"author":{"name":"Zach Carter"},"license":"MIT","devDependencies":{"jison":"0.4.x","test":"*"},"readme":"# lex-parser\n\nA parser for lexical grammars used by [jison](http://jison.org) and jison-lex.\n\n## install\n\n    npm install lex-parser\n\n## build\n\nTo build the parser yourself, clone the git repo then run:\n\n    make\n\nThis will generate `lex-parser.js`.\n\n## usage\n\n    var lexParser = require('lex-parser');\n\n    // parse a lexical grammar and return JSON\n    lexParser.parse(\"%% ... \");\n\n## example\n\nThe parser can parse its own lexical grammar, shown below:\n\n    NAME              [a-zA-Z_][a-zA-Z0-9_-]*\n\n    %s indented trail rules\n    %x code start_condition options conditions action\n\n    %%\n\n    <action>[^{}]+          return 'ACTION_BODY'\n    <action>\"{\"             yy.depth++; return '{'\n    <action>\"}\"             yy.depth == 0 ? this.begin('trail') : yy.depth--; return '}'\n\n    <conditions>{NAME}      return 'NAME'\n    <conditions>\">\"         this.popState(); return '>'\n    <conditions>\",\"         return ','\n    <conditions>\"*\"         return '*'\n\n    <rules>\\n+              /* */\n    <rules>\\s+              this.begin('indented')\n    <rules>\"%%\"             this.begin('code'); return '%%'\n    <rules>[a-zA-Z0-9_]+    return 'CHARACTER_LIT'\n\n    <options>{NAME}         yy.options[yytext] = true\n    <options>\\n+            this.begin('INITIAL')\n    <options>\\s+\\n+         this.begin('INITIAL')\n    <options>\\s+            /* empty */\n\n    <start_condition>{NAME}         return 'START_COND'\n    <start_condition>\\n+            this.begin('INITIAL')\n    <start_condition>\\s+\\n+         this.begin('INITIAL')\n    <start_condition>\\s+            /* empty */\n\n    <trail>.*\\n+                    this.begin('rules')\n\n    <indented>\"{\"                   yy.depth = 0; this.begin('action'); return '{'\n    <indented>\"%{\"(.|\\n)*?\"%}\"      this.begin('trail'); yytext = yytext.substr(2, yytext.length-4);return 'ACTION'\n    \"%{\"(.|\\n)*?\"%}\"                yytext = yytext.substr(2, yytext.length-4); return 'ACTION'\n    <indented>.+                    this.begin('rules'); return 'ACTION'\n\n    \"/*\"(.|\\n|\\r)*?\"*/\"             /* ignore */\n    \"//\".*                          /* ignore */\n\n    \\n+                             /* */\n    \\s+                             /* */\n    {NAME}                          return 'NAME'\n    \\\"(\"\\\\\\\\\"|'\\\"'|[^\"])*\\\"         yytext = yytext.replace(/\\\\\"/g,'\"');return 'STRING_LIT'\n    \"'\"(\"\\\\\\\\\"|\"\\'\"|[^'])*\"'\"       yytext = yytext.replace(/\\\\'/g,\"'\");return 'STRING_LIT'\n    \"|\"                             return '|'\n    \"[\"(\"\\\\\\\\\"|\"\\]\"|[^\\]])*\"]\"      return 'ANY_GROUP_REGEX'\n    \"(?:\"                           return 'SPECIAL_GROUP'\n    \"(?=\"                           return 'SPECIAL_GROUP'\n    \"(?!\"                           return 'SPECIAL_GROUP'\n    \"(\"                             return '('\n    \")\"                             return ')'\n    \"+\"                             return '+'\n    \"*\"                             return '*'\n    \"?\"                             return '?'\n    \"^\"                             return '^'\n    \",\"                             return ','\n    \"<<EOF>>\"                       return '$'\n    \"<\"                             this.begin('conditions'); return '<'\n    \"/!\"                            return '/!'\n    \"/\"                             return '/'\n    \"\\\\\"([0-7]{1,3}|[rfntvsSbBwWdD\\\\*+()${}|[\\]\\/.^?]|\"c\"[A-Z]|\"x\"[0-9A-F]{2}|\"u\"[a-fA-F0-9]{4}) return 'ESCAPE_CHAR'\n    \"\\\\\".                           yytext = yytext.replace(/^\\\\/g,''); return 'ESCAPE_CHAR'\n    \"$\"                             return '$'\n    \".\"                             return '.'\n    \"%options\"                      yy.options = {}; this.begin('options')\n    \"%s\"                            this.begin('start_condition');return 'START_INC'\n    \"%x\"                            this.begin('start_condition');return 'START_EXC'\n    \"%%\"                            this.begin('rules'); return '%%'\n    \"{\"\\d+(\",\"\\s?\\d+|\",\")?\"}\"       return 'RANGE_REGEX'\n    \"{\"{NAME}\"}\"                    return 'NAME_BRACE'\n    \"{\"                             return '{'\n    \"}\"                             return '}'\n    .                               /* ignore bad characters */\n    <*><<EOF>>                      return 'EOF'\n\n    <code>(.|\\n)+                   return 'CODE'\n\n    %%\n\n## license\n\nMIT\n","readmeFilename":"README.md","_id":"lex-parser@0.1.3","dist":{"shasum":"479be9bded0ba61217c2cc0fa6e76be00e988bd6","tarball":"http://repository.ncinga.com/nexus/content/repositories/npm-js-registry/lex-parser/-/lex-parser-0.1.3.tgz","integrity":"sha512-IwHyQKjzD1h0A2/B2LwIp6MXUj9BSgqffl+ImM/MQ8KQTt1zhJ3tTD48mJzyghKWF9QZurVWgzSEZHVUhg2dhw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIBfeXcGZWHKKy/5TO5lC/5lB2e8KJhHjZjPbS0HNynlZAiBcSX8uaP9rEtaRhtLjUkjIOsScQzcZPjWXe4F9ycT+cg=="}]},"_from":".","_npmVersion":"1.3.5","_npmUser":{"name":"anonymous","email":"zack.carter@gmail.com"},"maintainers":[{"name":"anonymous","email":"zack.carter@gmail.com"}]},"0.1.4":{"name":"lex-parser","version":"0.1.4","description":"A parser for lexical grammars used by jison","main":"lex-parser.js","scripts":{"test":"make test"},"repository":{"type":"git","repository":"https://github.com/zaach/lex-parser.git"},"keywords":["lexical","grammar","parser","jison"],"author":{"name":"Zach Carter"},"license":"MIT","devDependencies":{"jison":"0.4.x","test":"*"},"readme":"# lex-parser\n\nA parser for lexical grammars used by [jison](http://jison.org) and jison-lex.\n\n## install\n\n    npm install lex-parser\n\n## build\n\nTo build the parser yourself, clone the git repo then run:\n\n    make\n\nThis will generate `lex-parser.js`.\n\n## usage\n\n    var lexParser = require(\"lex-parser\");\n\n    // parse a lexical grammar and return JSON\n    lexParser.parse(\"%% ... \");\n\n## example\n\nThe parser can parse its own lexical grammar, shown below:\n\n    NAME              [a-zA-Z_][a-zA-Z0-9_-]*\n\n    %s indented trail rules\n    %x code start_condition options conditions action\n\n    %%\n\n    <action>[^{}]+          return 'ACTION_BODY'\n    <action>\"{\"             yy.depth++; return '{'\n    <action>\"}\"             yy.depth == 0 ? this.begin('trail') : yy.depth--; return '}'\n\n    <conditions>{NAME}      return 'NAME'\n    <conditions>\">\"         this.popState(); return '>'\n    <conditions>\",\"         return ','\n    <conditions>\"*\"         return '*'\n\n    <rules>\\n+              /* */\n    <rules>\\s+              this.begin('indented')\n    <rules>\"%%\"             this.begin('code'); return '%%'\n    <rules>[a-zA-Z0-9_]+    return 'CHARACTER_LIT'\n\n    <options>{NAME}         yy.options[yytext] = true\n    <options>\\n+            this.begin('INITIAL')\n    <options>\\s+\\n+         this.begin('INITIAL')\n    <options>\\s+            /* empty */\n\n    <start_condition>{NAME}         return 'START_COND'\n    <start_condition>\\n+            this.begin('INITIAL')\n    <start_condition>\\s+\\n+         this.begin('INITIAL')\n    <start_condition>\\s+            /* empty */\n\n    <trail>.*\\n+                    this.begin('rules')\n\n    <indented>\"{\"                   yy.depth = 0; this.begin('action'); return '{'\n    <indented>\"%{\"(.|\\n)*?\"%}\"      this.begin('trail'); yytext = yytext.substr(2, yytext.length-4);return 'ACTION'\n    \"%{\"(.|\\n)*?\"%}\"                yytext = yytext.substr(2, yytext.length-4); return 'ACTION'\n    <indented>.+                    this.begin('rules'); return 'ACTION'\n\n    \"/*\"(.|\\n|\\r)*?\"*/\"             /* ignore */\n    \"//\".*                          /* ignore */\n\n    \\n+                             /* */\n    \\s+                             /* */\n    {NAME}                          return 'NAME'\n    \\\"(\"\\\\\\\\\"|'\\\"'|[^\"])*\\\"         yytext = yytext.replace(/\\\\\"/g,'\"');return 'STRING_LIT'\n    \"'\"(\"\\\\\\\\\"|\"\\'\"|[^'])*\"'\"       yytext = yytext.replace(/\\\\'/g,\"'\");return 'STRING_LIT'\n    \"|\"                             return '|'\n    \"[\"(\"\\\\\\\\\"|\"\\]\"|[^\\]])*\"]\"      return 'ANY_GROUP_REGEX'\n    \"(?:\"                           return 'SPECIAL_GROUP'\n    \"(?=\"                           return 'SPECIAL_GROUP'\n    \"(?!\"                           return 'SPECIAL_GROUP'\n    \"(\"                             return '('\n    \")\"                             return ')'\n    \"+\"                             return '+'\n    \"*\"                             return '*'\n    \"?\"                             return '?'\n    \"^\"                             return '^'\n    \",\"                             return ','\n    \"<<EOF>>\"                       return '$'\n    \"<\"                             this.begin('conditions'); return '<'\n    \"/!\"                            return '/!'\n    \"/\"                             return '/'\n    \"\\\\\"([0-7]{1,3}|[rfntvsSbBwWdD\\\\*+()${}|[\\]\\/.^?]|\"c\"[A-Z]|\"x\"[0-9A-F]{2}|\"u\"[a-fA-F0-9]{4}) return 'ESCAPE_CHAR'\n    \"\\\\\".                           yytext = yytext.replace(/^\\\\/g,''); return 'ESCAPE_CHAR'\n    \"$\"                             return '$'\n    \".\"                             return '.'\n    \"%options\"                      yy.options = {}; this.begin('options')\n    \"%s\"                            this.begin('start_condition');return 'START_INC'\n    \"%x\"                            this.begin('start_condition');return 'START_EXC'\n    \"%%\"                            this.begin('rules'); return '%%'\n    \"{\"\\d+(\",\"\\s?\\d+|\",\")?\"}\"       return 'RANGE_REGEX'\n    \"{\"{NAME}\"}\"                    return 'NAME_BRACE'\n    \"{\"                             return '{'\n    \"}\"                             return '}'\n    .                               /* ignore bad characters */\n    <*><<EOF>>                      return 'EOF'\n\n    <code>(.|\\n)+                   return 'CODE'\n\n    %%\n\n## license\n\nMIT\n","readmeFilename":"README.md","_id":"lex-parser@0.1.4","dist":{"shasum":"64c4f025f17fd53bfb45763faeb16f015a747550","tarball":"http://repository.ncinga.com/nexus/content/repositories/npm-js-registry/lex-parser/-/lex-parser-0.1.4.tgz","integrity":"sha512-DuAEISsr1H4LOpmFLkyMc8YStiRWZCO8hMsoXAXSbgyfvs2WQhSt0+/FBv3ZU/JBFZMGcE+FWzEBSzwUU7U27w==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCfKgHFodd7I5ahTkLC33/8kaYGZDPc8QYoRTmhwzaSnAIgbvSmPhIotYPmSm2/jw0+A8uv4d+qIh/4oUBpLPpVaE4="}]},"_from":".","_npmVersion":"1.3.5","_npmUser":{"name":"anonymous","email":"zack.carter@gmail.com"},"maintainers":[{"name":"anonymous","email":"zack.carter@gmail.com"}]}},"name":"lex-parser","time":{"modified":"2022-06-19T11:55:10.771Z","created":"2013-01-27T03:18:10.806Z","0.0.1":"2013-01-27T03:18:11.544Z","0.1.0":"2013-01-28T03:37:45.642Z","0.1.1":"2013-06-22T18:46:13.738Z","0.1.2":"2013-06-22T19:46:58.186Z","0.1.3":"2013-07-27T22:26:13.868Z","0.1.4":"2013-08-04T02:13:26.721Z"}}