{"dist":{"shasum":"cc5712e361aaabd4a1bb75c469b8acaec15e0ec6","tarball":"https://registry.npmjs.org/lex-parser/-/lex-parser-0.1.2.tgz","integrity":"sha512-05o2Y3lWS9Awy2yhZr9NPUNMJcMzylH/19A4QLbJR95cRszYrGZoMJjLq4cxKOKU6PFaa3KJcKnRrhTblY/V0A==","signatures":[{"sig":"MEUCIQCtk2MSisg/iUtNRXI1vypVLqYe4oBKd7Db8D8FDHIJlgIgdROp67ZB6age/y5Z3oUTRwZkN9CKaL1K+ZqSj2DsxRg=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}]},"main":"lex-parser.js","name":"lex-parser","_from":".","author":{"name":"Zach Carter"},"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","license":"MIT","scripts":{"test":"make test"},"_npmUser":{"name":"zaach","email":"zack.carter@gmail.com"},"keywords":["lexical","grammar","parser","jison"],"repository":"","_npmVersion":"1.2.10","description":"A parser for lexical grammars used by jison","maintainers":[{"name":"zaach","email":"zack.carter@gmail.com"}],"readmeFilename":"README.md","devDependencies":{"test":"*","jison":"0.4.x"},"_id":"lex-parser@0.1.2","version":"0.1.2"}