{"_id":"subhuti","_rev":"27-95b199c3de4df1289954e6f8f6c8823b","name":"subhuti","dist-tags":{"latest":"0.2.86"},"versions":{"0.0.1":{"name":"subhuti","version":"0.0.1","keywords":[],"author":"","license":"ISC","_id":"subhuti@0.0.1","maintainers":[{"name":"alamhubb","email":"alamhubb@163.com"}],"dist":{"shasum":"65c7e46db77b59ac8cd6080c3b530e40864eff15","tarball":"https://registry.npmjs.org/subhuti/-/subhuti-0.0.1.tgz","fileCount":25,"integrity":"sha512-rfSbV8dvecH3BaPnZn3tkPp8zRGeui4o92gISiSao/wOcdT1PrFjefUFVeqjw4e1lcDnLJ3H/SuwKPlBl4YIdw==","signatures":[{"sig":"MEUCIFZJ4HT5GYcA6Ynd64FOpzt6w6shMCc+I5Bgjd5VLA11AiEAqdgy0fKmfPscVngf9Qql47zfG+tQHrPeFBVQGrFigrM=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":31999},"main":"index.js","gitHead":"a129db9a59688b1bdefb337b221cf99b09a0ba34","scripts":{"test":"tsx test/test1LetJson.ts"},"_npmUser":{"name":"alamhubb","email":"alamhubb@163.com"},"_npmVersion":"10.5.0","directories":{},"_nodeVersion":"20.12.2","dependencies":{"tsx":"^4.19.1","lodash":"^4.17.21","typescript":"^5.6.2","@types/lodash":"^4.17.10"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/subhuti_0.0.1_1728579931502_0.09577090784762521","host":"s3://npm-registry-packages"}},"0.0.2":{"name":"subhuti","version":"0.0.2","keywords":[],"author":"","license":"ISC","_id":"subhuti@0.0.2","maintainers":[{"name":"alamhubb","email":"alamhubb@163.com"}],"dist":{"shasum":"ca0eb0a427e1c6cca2a4ac44352f11873fe8c8f7","tarball":"https://registry.npmjs.org/subhuti/-/subhuti-0.0.2.tgz","fileCount":27,"integrity":"sha512-puGX0vWQby2IfZ9/nT20eE4fThCm9kl57hNUGuECA7V2jtej2G9NaEZey6ofkVs//q/YLRn8TiZJCxZLUbDbhw==","signatures":[{"sig":"MEQCIFRHZkCk9h0XuTBabmUn4GMb0UlMOYzoM0IexXxyBuRNAiB0o937oGMom5vkFVqreoHlA78wNylnG6edwPhn42ILEA==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":71254},"main":"index.js","gitHead":"fd2eb9d798ffca829b57fe69f9b8f15f1f21e2c0","scripts":{"test":"tsx test/test2LetTransConst.ts"},"_npmUser":{"name":"alamhubb","email":"alamhubb@163.com"},"_npmVersion":"10.5.0","description":"Subhuti (सुभूति)","directories":{},"_nodeVersion":"20.12.2","dependencies":{"tsx":"^4.19.1","acorn":"^8.12.1","typescript":"^5.6.2","@types/lodash":"^4.17.10"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/subhuti_0.0.2_1728810727448_0.7224827869990318","host":"s3://npm-registry-packages"}},"0.0.3":{"name":"subhuti","version":"0.0.3","keywords":[],"author":"","license":"ISC","_id":"subhuti@0.0.3","maintainers":[{"name":"alamhubb","email":"alamhubb@163.com"}],"dist":{"shasum":"aee3bbc9014f1274c9296b0df7da70672c11a789","tarball":"https://registry.npmjs.org/subhuti/-/subhuti-0.0.3.tgz","fileCount":54,"integrity":"sha512-ZVfNxvI+jgNXbqgIbTqO4kGsPWEOWSj6g36ukZP6lBZtFZDYDMEhPZRMKzCSeNBOBt7v9gi0L3FsdAnnzC2BzA==","signatures":[{"sig":"MEYCIQCxU4oPjDBMESUBJ9XiGvHV2Jz5oShLGaC5NxsdO6P93AIhAIMCjT7IYHoEVTZnkPEyuCsuzxL9mtuVwmtIXTjcWhPd","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":447737},"main":"index.js","type":"module","gitHead":"bfc44e0b3a62d79a27ebb6a8b8111c1dab544e20","scripts":{"test":"tsx test/HelloWorldGrammarParser.ts","build":"tsc"},"_npmUser":{"name":"alamhubb","email":"alamhubb@163.com"},"_npmVersion":"10.5.0","description":"Subhuti (सुभूति)","directories":{},"_nodeVersion":"20.12.2","dependencies":{"tsx":"^4.19.1","acorn":"^8.12.1","typescript":"^5.6.2","@types/lodash":"^4.17.10"},"_hasShrinkwrap":false,"devDependencies":{"@types/node":"^22.7.6"},"_npmOperationalInternal":{"tmp":"tmp/subhuti_0.0.3_1729191081105_0.5028009288568009","host":"s3://npm-registry-packages"}},"0.0.5":{"name":"subhuti","version":"0.0.5","keywords":["parser","auto-parser","generator","auto-generator","transformer","auto-transfomer"],"author":{"name":"alamhubb"},"license":"MIT","_id":"subhuti@0.0.5","maintainers":[{"name":"alamhubb","email":"alamhubb@163.com"}],"contributors":[{"url":"https://github.com/alamhubb","name":"alamhubb"}],"homepage":"https://github.com/alamhubb/subhuti","bugs":{"url":"https://github.com/alamhubb/subhuti/issues"},"dist":{"shasum":"bc438b05d1b5bea4219d811c86b808899c4f53ee","tarball":"https://registry.npmjs.org/subhuti/-/subhuti-0.0.5.tgz","fileCount":55,"integrity":"sha512-uaxFytj+1X12RKDcQaf1yRdAiYL2yzDZKPPfKsob6gwREpMlNMnofwDHzFxQsCajfk2v4GaLPodNW+jGUGOWDQ==","signatures":[{"sig":"MEUCIQDbnvR/P5E6r/X+AN/lDfHxjQnQYtZI5L6j9BJ/s6AZ9QIgfihKAEdV7eErfRCEP2seMr47+7IO0f2bIVM8/OpSTvg=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":449313},"main":"index.js","type":"module","gitHead":"935bebc1a6dd286804d8c67a3944d49c3811ea94","scripts":{"test":"tsx test/HelloWorldGrammarParser.ts","build":"tsc"},"_npmUser":{"name":"alamhubb","email":"alamhubb@163.com"},"repository":{"url":"git+https://github.com/alamhubb/subhuti.git","type":"git"},"_npmVersion":"10.5.0","description":"Automatic conversion between two different programming languages through two grammar files that define the same grammar structure and grammar name","directories":{},"_nodeVersion":"20.12.2","_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.1","typescript":"^5.6.2","@types/node":"^22.7.6"},"_npmOperationalInternal":{"tmp":"tmp/subhuti_0.0.5_1729192463039_0.19705356379246441","host":"s3://npm-registry-packages"}},"0.0.6":{"name":"subhuti","version":"0.0.6","keywords":["subhuti","parser","auto-parser","generator","auto-generator","transformer","auto-transfomer"],"author":{"name":"alamhubb"},"license":"MIT","_id":"subhuti@0.0.6","maintainers":[{"name":"alamhubb","email":"alamhubb@163.com"}],"contributors":[{"url":"https://github.com/alamhubb","name":"alamhubb"}],"homepage":"https://github.com/alamhubb/subhuti","bugs":{"url":"https://github.com/alamhubb/subhuti/issues"},"dist":{"shasum":"ce792343eb5390f00efca470eec3a7f22234f1f6","tarball":"https://registry.npmjs.org/subhuti/-/subhuti-0.0.6.tgz","fileCount":23,"integrity":"sha512-sZTYtHitTHh1yDCkp/WoCa3hmSoe1+BHCmiKvI9G6HF1iMN4hA1Kov1GO+AGqq1lE4sFgRoyHTji9Lg56l8v3w==","signatures":[{"sig":"MEQCIE41dMS9UoEVlm5DwxynaLnJ3rxmU5wr6qBg7ThVwNk4AiBP0LE+rbHR9xzPHnhPNtrsZdTMJ/nkflISTyIoX67lUQ==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":290970},"main":"index.js","type":"module","gitHead":"bca9bd52c8a9e977944f17f8c7443cac7930ea4e","scripts":{"test":"tsx test/HelloWorldGrammarParser.ts","build":"tsc"},"_npmUser":{"name":"alamhubb","email":"alamhubb@163.com"},"repository":{"url":"git+https://github.com/alamhubb/subhuti.git","type":"git"},"_npmVersion":"10.5.2","description":"Automatic conversion between two different programming languages through two grammar files that define the same grammar structure and grammar name","directories":{},"_nodeVersion":"20.13.1","_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.1","typescript":"^5.6.2","@types/node":"^22.7.6"},"_npmOperationalInternal":{"tmp":"tmp/subhuti_0.0.6_1729245526157_0.37394436068620185","host":"s3://npm-registry-packages"}},"0.0.7":{"name":"subhuti","version":"0.0.7","keywords":["subhuti","parser","auto-parser","generator","auto-generator","transformer","auto-transfomer"],"author":{"name":"alamhubb"},"license":"MIT","_id":"subhuti@0.0.7","maintainers":[{"name":"alamhubb","email":"alamhubb@163.com"}],"contributors":[{"url":"https://github.com/alamhubb","name":"alamhubb"}],"homepage":"https://github.com/alamhubb/subhuti","bugs":{"url":"https://github.com/alamhubb/subhuti/issues"},"dist":{"shasum":"ff65761fc4ad5b5b37214592f6955ebeb147bd93","tarball":"https://registry.npmjs.org/subhuti/-/subhuti-0.0.7.tgz","fileCount":23,"integrity":"sha512-vZu2i+3qVubSIbdMwmBk+WzfJDpunz+eCKpyuuiDUt3/M4L6gIbv0n1fSVgc17HLS4pX8KAwYrRqg0AWM8iNdg==","signatures":[{"sig":"MEYCIQCB6XXNPPWwglOeJ5hFmzPPWldfMqwERjJfFOegPrOfUwIhALQ1WOv2kaGHvgJpzvjyicRG9e/P7ppS5lpRYV6gHBMZ","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":291011},"main":"index.js","type":"module","exports":{"./*":"./lib/*"},"gitHead":"bca9bd52c8a9e977944f17f8c7443cac7930ea4e","scripts":{"test":"tsx test/HelloWorldGrammarParser.ts","build":"tsc"},"_npmUser":{"name":"alamhubb","email":"alamhubb@163.com"},"repository":{"url":"git+https://github.com/alamhubb/subhuti.git","type":"git"},"_npmVersion":"10.5.2","description":"Automatic conversion between two different programming languages through two grammar files that define the same grammar structure and grammar name","directories":{},"_nodeVersion":"20.13.1","_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.1","typescript":"^5.6.2","@types/node":"^22.7.6"},"_npmOperationalInternal":{"tmp":"tmp/subhuti_0.0.7_1729247501200_0.03216728043469819","host":"s3://npm-registry-packages"}},"0.0.8":{"name":"subhuti","version":"0.0.8","keywords":["subhuti","parser","auto-parser","generator","auto-generator","transformer","auto-transfomer"],"author":{"name":"alamhubb"},"license":"MIT","_id":"subhuti@0.0.8","maintainers":[{"name":"alamhubb","email":"alamhubb@163.com"}],"contributors":[{"url":"https://github.com/alamhubb","name":"alamhubb"}],"homepage":"https://github.com/alamhubb/subhuti","bugs":{"url":"https://github.com/alamhubb/subhuti/issues"},"dist":{"shasum":"4458389295951710234fcef11e29748e822f3260","tarball":"https://registry.npmjs.org/subhuti/-/subhuti-0.0.8.tgz","fileCount":23,"integrity":"sha512-3ZCyTpoWk4AUCpF+H6j9jD9IBzUPxI8navKGWsngzuv1fHRrdnRbcRFGmSPVNtiUhUanw/1/YWYm+mKe7g+FDw==","signatures":[{"sig":"MEYCIQDV8ako+AzkbF012fxQAA89j+MgAI+Ee6vetTNJEIoxJQIhAKXvSy6NcS7ZV7JKmyrs+m8jG7aGRfAmXTp+PxArLDis","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":291010},"main":"index.js","type":"module","exports":{"./*":"./lib/*"},"gitHead":"8c57cdab8c77f05c186792621b37f1bf5f82b41a","scripts":{"test":"tsx test/HelloWorldGrammarParser.ts","build":"tsc"},"_npmUser":{"name":"alamhubb","email":"alamhubb@163.com"},"repository":{"url":"git+https://github.com/alamhubb/subhuti.git","type":"git"},"_npmVersion":"10.5.2","description":"Automatic conversion between two different programming languages through two grammar files that define the same grammar structure and grammar name","directories":{},"_nodeVersion":"20.13.1","_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.1","typescript":"^5.6.2","@types/node":"^22.7.6"},"_npmOperationalInternal":{"tmp":"tmp/subhuti_0.0.8_1729247575333_0.9405990780578377","host":"s3://npm-registry-packages"}},"0.1.0":{"name":"subhuti","version":"0.1.0","keywords":["subhuti","parser","auto-parser","generator","auto-generator","transformer","auto-transfomer"],"author":{"name":"alamhubb"},"license":"MIT","_id":"subhuti@0.1.0","maintainers":[{"name":"alamhubb","email":"alamhubb@163.com"}],"contributors":[{"url":"https://github.com/alamhubb","name":"alamhubb"}],"homepage":"https://github.com/alamhubb/subhuti","bugs":{"url":"https://github.com/alamhubb/subhuti/issues"},"dist":{"shasum":"f82944cf0bcf05964a5c0da3dee37e7a1e73111c","tarball":"https://registry.npmjs.org/subhuti/-/subhuti-0.1.0.tgz","fileCount":23,"integrity":"sha512-19iwGaWvJ8rBzJMplCfxKkPYABU9Omg1aWX2dd7AX8RIwSWzVK4F2eRTB8Y+toH5a6pqNuSxIfvfEBAUJ8zM+A==","signatures":[{"sig":"MEYCIQDfM8snSTx+Ot2eBQyxBZS1Gzj4GVJHjauumyYYLZT33gIhAKibidfyX5GLSSyZ8+29JmaWHePSsFp7Eh3q5LYzvVa1","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":291009},"main":"index.js","type":"module","exports":{"./*":"./lib/subhuti/*"},"gitHead":"61388fa5c4c6363b09e534b42b7351cff781debb","scripts":{"test":"tsx test/HelloWorldGrammarParser.ts","build":"tsc"},"_npmUser":{"name":"alamhubb","email":"alamhubb@163.com"},"repository":{"url":"git+https://github.com/alamhubb/subhuti.git","type":"git"},"_npmVersion":"10.1.0","description":"Automatic conversion between two different programming languages through two grammar files that define the same grammar structure and grammar name","directories":{},"_nodeVersion":"20.9.0","_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.1","typescript":"^5.6.2","@types/node":"^22.7.6"},"_npmOperationalInternal":{"tmp":"tmp/subhuti_0.1.0_1729265241613_0.15176413840025216","host":"s3://npm-registry-packages"}},"0.1.1":{"name":"subhuti","version":"0.1.1","keywords":["subhuti","parser","auto-parser","generator","auto-generator","transformer","auto-transfomer"],"author":{"name":"alamhubb"},"license":"MIT","_id":"subhuti@0.1.1","maintainers":[{"name":"alamhubb","email":"alamhubb@163.com"}],"contributors":[{"url":"https://github.com/alamhubb","name":"alamhubb"}],"homepage":"https://github.com/alamhubb/subhuti","bugs":{"url":"https://github.com/alamhubb/subhuti/issues"},"dist":{"shasum":"6ba750acf39079bb9e0c9be3788cde4e9ee9aef3","tarball":"https://registry.npmjs.org/subhuti/-/subhuti-0.1.1.tgz","fileCount":30,"integrity":"sha512-kndrbYz46U9r9BJeX2xP6EI568QyXYM446wg5GJeIOdow11ecQfaoGZURFU3CloMxu6Pa0IJx3a+eBXu1fPD3Q==","signatures":[{"sig":"MEQCIDeuQ/ERTf4oDuRRL1pHO2BUq6HQc/W0XeHs5dNoOrn7AiArsIBO5hFCj7hD8cS4U2iaduvp55uytIKF5Dlvke6aiw==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":273321},"main":"index.js","type":"module","exports":{"./*":"./lib/subhuti/*"},"gitHead":"85050761eb2c1272368e14cdc198793748488d60","scripts":{"test":"tsx test/HelloWorldGrammarParser.ts","build":"tsc"},"_npmUser":{"name":"alamhubb","email":"alamhubb@163.com"},"repository":{"url":"git+https://github.com/alamhubb/subhuti.git","type":"git"},"_npmVersion":"10.1.0","description":"Automatic conversion between two different programming languages through two grammar files that define the same grammar structure and grammar name","directories":{},"_nodeVersion":"20.9.0","_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.1","typescript":"^5.6.2","@types/node":"^22.7.6"},"_npmOperationalInternal":{"tmp":"tmp/subhuti_0.1.1_1729275161792_0.9610372706908825","host":"s3://npm-registry-packages"}},"0.1.2":{"name":"subhuti","version":"0.1.2","keywords":["subhuti","parser","auto-parser","generator","auto-generator","transformer","auto-transfomer"],"author":{"name":"alamhubb"},"license":"MIT","_id":"subhuti@0.1.2","maintainers":[{"name":"alamhubb","email":"alamhubb@163.com"}],"contributors":[{"url":"https://github.com/alamhubb","name":"alamhubb"}],"homepage":"https://github.com/alamhubb/subhuti","bugs":{"url":"https://github.com/alamhubb/subhuti/issues"},"dist":{"shasum":"92885f2c9c31a0d8df555e203fdbc14cff574531","tarball":"https://registry.npmjs.org/subhuti/-/subhuti-0.1.2.tgz","fileCount":83,"integrity":"sha512-YJ/4lGFWSnXHllGk2fTwu5NR4P/3gef/ue4js3vaaQt2gKBlm0R5MlTVOVgx1V2R8zF5XcuwqDJmKDYepQlaSQ==","signatures":[{"sig":"MEUCIA3ALeq7vyA5V5uNEDNHjmoGGKaVjLDklPLhFF+t4HqpAiEA2QwfILHD58JmNjdeABzsyjzZzjibzJ/80aCTgLc7XQM=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":418465},"main":"index.js","type":"module","exports":{"./*":"./lib/subhuti/*"},"gitHead":"87dddc84a773b4a23e3c0750ce8d93f0aa5faa4e","scripts":{"test":"tsx test/HelloWorldGrammarParser.ts","build":"tsc"},"_npmUser":{"name":"alamhubb","email":"alamhubb@163.com"},"repository":{"url":"git+https://github.com/alamhubb/subhuti.git","type":"git"},"_npmVersion":"10.1.0","description":"Automatic conversion between two different programming languages through two grammar files that define the same grammar structure and grammar name","directories":{},"_nodeVersion":"20.9.0","_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.1","typescript":"^5.6.2","@types/node":"^22.7.6"},"_npmOperationalInternal":{"tmp":"tmp/subhuti_0.1.2_1729276107224_0.1981980246540429","host":"s3://npm-registry-packages"}},"0.1.3":{"name":"subhuti","version":"0.1.3","keywords":["subhuti","parser","auto-parser","generator","auto-generator","transformer","auto-transfomer"],"author":{"name":"alamhubb"},"license":"MIT","_id":"subhuti@0.1.3","maintainers":[{"name":"alamhubb","email":"alamhubb@163.com"}],"contributors":[{"url":"https://github.com/alamhubb","name":"alamhubb"}],"homepage":"https://github.com/alamhubb/subhuti","bugs":{"url":"https://github.com/alamhubb/subhuti/issues"},"dist":{"shasum":"a64af696bb8252f30cd30d3efb2cc5d8fc85323b","tarball":"https://registry.npmjs.org/subhuti/-/subhuti-0.1.3.tgz","fileCount":75,"integrity":"sha512-n2CZotB16eHh/azxYhxogrmLoRVvVA0HLafu4MthC4QNSnW3k9xFQhaSCuFpHjIgo0fL6JL6x8fhYGGuxD0dvw==","signatures":[{"sig":"MEUCIQDaOv4EZHPolzpRmZPHJf+ZnFl90MiztifOifie+IkiBwIgMN249MlaxEy7qZe7IycHDai1ttJTLHHEUeV9MT9ozhs=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":403935},"main":"index.js","type":"module","exports":{"./*":"./lib/subhuti/*"},"gitHead":"b8c885e726a95a15b780d974c911723c1ca0342b","scripts":{"test":"tsx test/HelloWorldGrammarParser.ts","build":"tsc"},"_npmUser":{"name":"alamhubb","email":"alamhubb@163.com"},"repository":{"url":"git+https://github.com/alamhubb/subhuti.git","type":"git"},"_npmVersion":"10.1.0","description":"Automatic conversion between two different programming languages through two grammar files that define the same grammar structure and grammar name","directories":{},"_nodeVersion":"20.9.0","_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.1","typescript":"^5.6.2","@types/node":"^22.7.6"},"_npmOperationalInternal":{"tmp":"tmp/subhuti_0.1.3_1729276304291_0.2656692675153125","host":"s3://npm-registry-packages"}},"0.1.4":{"name":"subhuti","version":"0.1.4","keywords":["subhuti","parser","auto-parser","generator","auto-generator","transformer","auto-transfomer"],"author":{"name":"alamhubb"},"license":"MIT","_id":"subhuti@0.1.4","maintainers":[{"name":"alamhubb","email":"alamhubb@163.com"}],"contributors":[{"url":"https://github.com/alamhubb","name":"alamhubb"}],"homepage":"https://github.com/alamhubb/subhuti","bugs":{"url":"https://github.com/alamhubb/subhuti/issues"},"dist":{"shasum":"acfb42916fd552715754e5fd2d1edba0a17ae10d","tarball":"https://registry.npmjs.org/subhuti/-/subhuti-0.1.4.tgz","fileCount":64,"integrity":"sha512-iNJE/rmWzHxHHT14ZIbs6Uy/tezlDo9IjLvml6LKndkoM5lRHnPR3jikenDhkuLOJqFxYK+ygAzif95qSfxjJQ==","signatures":[{"sig":"MEYCIQDmUhDN1kO/8yq1Hno0CWXWY3k+LDVJxN6yW7oPZNguowIhAJ7GlIAZayMnuL5bc/97dHSNM6ox8/RjIxHixOhllhF3","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":34483277},"main":"index.js","gitHead":"2f8c9e3c52445d48435b6a432fffb4eed5187217","scripts":{"test":"tsx test/HelloWorldGrammarParser.ts","build":"tsc","test:validation":"tsx tests/validation/grammar-validation.test.ts"},"_npmUser":{"name":"alamhubb","email":"alamhubb@163.com"},"repository":{"url":"git+https://github.com/alamhubb/subhuti.git","type":"git"},"_npmVersion":"lerna/4.9.4/node@v22.19.0+x64 (win32)","description":"Automatic conversion between two different programming languages through two grammar files that define the same grammar structure and grammar name","directories":{},"_nodeVersion":"22.19.0","dependencies":{"d3":"^7.9.0","dagre-d3":"^0.6.4","lru-cache":"^11.0.0","mnemonist":"^0.40.3","big-cartesian":"^6.1.1","@dagrejs/dagre":"^2.0.0","fast-cartesian":"^9.0.1","@dagrejs/graphlib":"^2.2.4","@dagrejs/graphlib-dot":"^1.0.2"},"_hasShrinkwrap":false,"devDependencies":{"@types/estree":"1.0.6"},"_npmOperationalInternal":{"tmp":"tmp/subhuti_0.1.4_1764826001040_0.12456003760493095","host":"s3://npm-registry-packages-npm-production"}},"0.1.5":{"name":"subhuti","version":"0.1.5","keywords":["subhuti","parser","auto-parser","generator","auto-generator","transformer","auto-transfomer"],"author":{"name":"alamhubb"},"license":"MIT","_id":"subhuti@0.1.5","maintainers":[{"name":"alamhubb","email":"alamhubb@163.com"}],"contributors":[{"url":"https://github.com/alamhubb","name":"alamhubb"}],"homepage":"https://github.com/alamhubb/subhuti","bugs":{"url":"https://github.com/alamhubb/subhuti/issues"},"dist":{"shasum":"feb01640b6c20ddfbd8178537cd0e9065b98a8b0","tarball":"https://registry.npmjs.org/subhuti/-/subhuti-0.1.5.tgz","fileCount":64,"integrity":"sha512-y9K2e8q0tGp41I/5u+BDq/Ofbi+bSbhexsP70XRT2FRtBZOaB0UvrzlvJsJmq2oV3rDYoEnFJrzHM+fvynpIzg==","signatures":[{"sig":"MEQCIG09Ak9oxmhDM36xjOv2r+HIcWeOL4obNtF3BUYnLiWhAiAvxFFC2RU0UES/usPG041DaFSxrFAEGIDlsGtdEO9yiA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":34483277},"main":"index.js","gitHead":"6995ba66e06c93507ffa0b705f9e3999aa62869f","scripts":{"test":"tsx test/HelloWorldGrammarParser.ts","build":"tsc","test:validation":"tsx tests/validation/grammar-validation.test.ts"},"_npmUser":{"name":"alamhubb","email":"alamhubb@163.com"},"repository":{"url":"git+https://github.com/alamhubb/subhuti.git","type":"git"},"_npmVersion":"lerna/4.9.4/node@v22.19.0+x64 (win32)","description":"Automatic conversion between two different programming languages through two grammar files that define the same grammar structure and grammar name","directories":{},"_nodeVersion":"22.19.0","dependencies":{"d3":"^7.9.0","dagre-d3":"^0.6.4","lru-cache":"^11.0.0","mnemonist":"^0.40.3","big-cartesian":"^6.1.1","@dagrejs/dagre":"^2.0.0","fast-cartesian":"^9.0.1","@dagrejs/graphlib":"^2.2.4","@dagrejs/graphlib-dot":"^1.0.2"},"_hasShrinkwrap":false,"devDependencies":{"@types/estree":"1.0.6"},"_npmOperationalInternal":{"tmp":"tmp/subhuti_0.1.5_1764826151407_0.017349732543839425","host":"s3://npm-registry-packages-npm-production"}},"0.1.8":{"name":"subhuti","version":"0.1.8","keywords":["subhuti","parser","auto-parser","generator","auto-generator","transformer","auto-transfomer"],"author":{"name":"alamhubb"},"license":"MIT","_id":"subhuti@0.1.8","maintainers":[{"name":"alamhubb","email":"alamhubb@163.com"}],"contributors":[{"url":"https://github.com/alamhubb","name":"alamhubb"}],"homepage":"https://github.com/alamhubb/subhuti","bugs":{"url":"https://github.com/alamhubb/subhuti/issues"},"dist":{"shasum":"a03a45b8e73bdf9a3f2b235c52cc6ccd329f8ace","tarball":"https://registry.npmjs.org/subhuti/-/subhuti-0.1.8.tgz","fileCount":69,"integrity":"sha512-MApQSoNgdvwST5kvTOFc8AcqVU2n1eHgrjhDzobfmemkgf4Ie/xQiSM6LL8dR68AUVbpPgfrMAlEGIMHs/QvEw==","signatures":[{"sig":"MEUCIQD8uihyh6vMV33Fiy/bJZgjSsa63Yz38XxoCCTNONtCKAIgMt24M3hPfb87tlodxlgZQZY6app1VyWDXauDHCmcsaU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":35349921},"main":"dist/index.mjs","type":"module","types":"dist/index.d.mts","gitHead":"8d91301808916a0d76da721149336e561fa12092","scripts":{"test":"tsx test/HelloWorldGrammarParser.ts","build":"tsdown","clean":"rimraf dist","prepublishOnly":"npm run build","test:validation":"tsx tests/validation/grammar-validation.test.ts"},"_npmUser":{"name":"alamhubb","email":"alamhubb@163.com"},"repository":{"url":"git+https://github.com/alamhubb/subhuti.git","type":"git"},"_npmVersion":"lerna/4.9.4/node@v24.11.1+x64 (win32)","description":"Automatic conversion between two different programming languages through two grammar files that define the same grammar structure and grammar name","directories":{},"_nodeVersion":"24.11.1","dependencies":{"d3":"^7.9.0","dagre-d3":"^0.6.4","lru-cache":"^11.0.0","mnemonist":"^0.40.3","big-cartesian":"^6.1.1","@dagrejs/dagre":"^2.0.0","fast-cartesian":"^9.0.1","@dagrejs/graphlib":"^2.2.4","@dagrejs/graphlib-dot":"^1.0.2"},"_hasShrinkwrap":false,"devDependencies":{"tsdown":"0.17.0-beta.6","@types/node":"^24.10.1","@types/estree":"1.0.6"},"_npmOperationalInternal":{"tmp":"tmp/subhuti_0.1.8_1764906296886_0.3872206239512217","host":"s3://npm-registry-packages-npm-production"}},"0.1.9":{"name":"subhuti","version":"0.1.9","keywords":["subhuti","parser","auto-parser","generator","auto-generator","transformer","auto-transfomer"],"author":{"name":"alamhubb"},"license":"MIT","_id":"subhuti@0.1.9","maintainers":[{"name":"alamhubb","email":"alamhubb@163.com"}],"contributors":[{"url":"https://github.com/alamhubb","name":"alamhubb"}],"homepage":"https://github.com/alamhubb/subhuti","bugs":{"url":"https://github.com/alamhubb/subhuti/issues"},"dist":{"shasum":"48726dc2e2255043d60d79d0f70ae7a2ea73128d","tarball":"https://registry.npmjs.org/subhuti/-/subhuti-0.1.9.tgz","fileCount":69,"integrity":"sha512-qdlDiOfsB8GNmBz5tr9cs80QKa6Qf68AFBEDegnOM2wvUdtYYC1YxLsgb6GHlhMpde4PcvUad2V+B2+NHdmo3w==","signatures":[{"sig":"MEUCIQDbCZumkfZqxqs12FrHcTXuKS4AbptYeTqZGupFhMULCwIgdUaRhgTnHRBQ1oLwpNoCyuHtEtQWtDlI4buApvuNaBM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":35349175},"main":"dist/index.mjs","type":"module","types":"dist/index.d.mts","gitHead":"22c9c3094ae4d589bf09dc47b837fe46c7551ee8","scripts":{"test":"tsx test/HelloWorldGrammarParser.ts","build":"tsdown","clean":"rimraf dist","prepublishOnly":"npm run build","test:validation":"tsx tests/validation/grammar-validation.test.ts"},"_npmUser":{"name":"alamhubb","email":"alamhubb@163.com"},"repository":{"url":"git+https://github.com/alamhubb/subhuti.git","type":"git"},"_npmVersion":"lerna/4.9.4/node@v24.11.1+x64 (win32)","description":"Automatic conversion between two different programming languages through two grammar files that define the same grammar structure and grammar name","directories":{},"_nodeVersion":"24.11.1","dependencies":{"d3":"^7.9.0","dagre-d3":"^0.6.4","lru-cache":"^11.0.0","mnemonist":"^0.40.3","big-cartesian":"^6.1.1","@dagrejs/dagre":"^2.0.0","fast-cartesian":"^9.0.1","@dagrejs/graphlib":"^2.2.4","@dagrejs/graphlib-dot":"^1.0.2"},"_hasShrinkwrap":false,"devDependencies":{"tsdown":"0.17.0-beta.6","@types/node":"^24.10.1","@types/estree":"1.0.6"},"_npmOperationalInternal":{"tmp":"tmp/subhuti_0.1.9_1764997609850_0.7072520503631561","host":"s3://npm-registry-packages-npm-production"}},"0.2.1":{"name":"subhuti","version":"0.2.1","keywords":["subhuti","parser","auto-parser","generator","auto-generator","transformer","auto-transfomer"],"author":{"name":"alamhubb"},"license":"MIT","_id":"subhuti@0.2.1","maintainers":[{"name":"alamhubb","email":"alamhubb@163.com"}],"contributors":[{"url":"https://github.com/alamhubb","name":"alamhubb"}],"homepage":"https://github.com/alamhubb/subhuti","bugs":{"url":"https://github.com/alamhubb/subhuti/issues"},"dist":{"shasum":"2b4486009ca9180fa941b613c987a89c658f74f3","tarball":"https://registry.npmjs.org/subhuti/-/subhuti-0.2.1.tgz","fileCount":69,"integrity":"sha512-Qxpofr2aEzyemkWrQRHzovYpVkqcsXsE+Ku6Rs/7wu2O/1ZL8RHA8jCe3W2cg4YRVMVPgG6mdYzWRupdN5Kbhg==","signatures":[{"sig":"MEQCIAU2KzUvr8Vk/Cz8oF6/848bUCBn+ZFdBq0zdKtL8L84AiB5sQunogvgiZcsB4KxvP9UxQvImyAxbyOWwn+qdIO2LQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":35349176},"main":"dist/index.mjs","type":"module","types":"dist/index.d.mts","gitHead":"015b9bab1b556588e348044bf1e4eb7cd8049e9a","scripts":{"test":"tsx test/HelloWorldGrammarParser.ts","build":"tsdown","clean":"rimraf dist","prepublishOnly":"npm run build","test:validation":"tsx tests/validation/grammar-validation.test.ts"},"_npmUser":{"name":"alamhubb","email":"alamhubb@163.com"},"repository":{"url":"git+https://github.com/alamhubb/subhuti.git","type":"git"},"_npmVersion":"lerna/4.9.4/node@v24.11.1+x64 (win32)","description":"Automatic conversion between two different programming languages through two grammar files that define the same grammar structure and grammar name","directories":{},"_nodeVersion":"24.11.1","dependencies":{"d3":"^7.9.0","dagre-d3":"^0.6.4","lru-cache":"^11.0.0","mnemonist":"^0.40.3","big-cartesian":"^6.1.1","@dagrejs/dagre":"^2.0.0","fast-cartesian":"^9.0.1","@dagrejs/graphlib":"^2.2.4","@dagrejs/graphlib-dot":"^1.0.2"},"_hasShrinkwrap":false,"devDependencies":{"tsdown":"0.17.0-beta.6","@types/node":"^24.10.1","@types/estree":"1.0.6"},"_npmOperationalInternal":{"tmp":"tmp/subhuti_0.2.1_1765045665390_0.3906403067766193","host":"s3://npm-registry-packages-npm-production"}},"0.2.2":{"name":"subhuti","version":"0.2.2","keywords":["subhuti","parser","auto-parser","generator","auto-generator","transformer","auto-transfomer"],"author":{"name":"alamhubb"},"license":"MIT","_id":"subhuti@0.2.2","maintainers":[{"name":"alamhubb","email":"alamhubb@163.com"}],"contributors":[{"url":"https://github.com/alamhubb","name":"alamhubb"}],"homepage":"https://github.com/alamhubb/subhuti","bugs":{"url":"https://github.com/alamhubb/subhuti/issues"},"dist":{"shasum":"2f58240c21842e59fa64f7cf33d75188395b4d6c","tarball":"https://registry.npmjs.org/subhuti/-/subhuti-0.2.2.tgz","fileCount":69,"integrity":"sha512-tvluMDZwg4cKPuuiDO8wmtM1WPyMJdGuc8wcxrmjNwF2DncpDeP6k19sZAqmGTXItebReUpgZQ4VpLsit65asg==","signatures":[{"sig":"MEQCIGlja21CjIbA6NQDVTjk5ZlR5k818B9Z9aUMzq6S59P0AiBcwlgd0hjMoWTWVA84tYG2CzM5m+1X4LHgpSi1sEZafw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":35349175},"main":"dist/index.mjs","type":"module","types":"dist/index.d.mts","gitHead":"cc2464a4d35f474bbc6305d6418a18293e9d5b52","scripts":{"test":"tsx test/HelloWorldGrammarParser.ts","build":"tsdown","clean":"rimraf dist","prepublishOnly":"npm run build","test:validation":"tsx tests/validation/grammar-validation.test.ts"},"_npmUser":{"name":"alamhubb","email":"alamhubb@163.com"},"repository":{"url":"git+https://github.com/alamhubb/subhuti.git","type":"git"},"_npmVersion":"lerna/4.9.4/node@v24.11.1+x64 (win32)","description":"Automatic conversion between two different programming languages through two grammar files that define the same grammar structure and grammar name","directories":{},"_nodeVersion":"24.11.1","dependencies":{"d3":"^7.9.0","dagre-d3":"^0.6.4","lru-cache":"^11.0.0","mnemonist":"^0.40.3","big-cartesian":"^6.1.1","@dagrejs/dagre":"^2.0.0","fast-cartesian":"^9.0.1","@dagrejs/graphlib":"^2.2.4","@dagrejs/graphlib-dot":"^1.0.2"},"_hasShrinkwrap":false,"devDependencies":{"tsdown":"0.17.0-beta.6","@types/node":"^24.10.1","@types/estree":"1.0.6"},"_npmOperationalInternal":{"tmp":"tmp/subhuti_0.2.2_1765046514335_0.30173923416568105","host":"s3://npm-registry-packages-npm-production"}},"0.2.4":{"name":"subhuti","version":"0.2.4","keywords":["subhuti","parser","auto-parser","generator","auto-generator","transformer","auto-transfomer"],"author":{"name":"alamhubb"},"license":"MIT","_id":"subhuti@0.2.4","maintainers":[{"name":"alamhubb","email":"alamhubb@163.com"}],"contributors":[{"url":"https://github.com/alamhubb","name":"alamhubb"}],"homepage":"https://github.com/alamhubb/subhuti","bugs":{"url":"https://github.com/alamhubb/subhuti/issues"},"dist":{"shasum":"076b7f392ca926322b8614f86a9564d993f3f48c","tarball":"https://registry.npmjs.org/subhuti/-/subhuti-0.2.4.tgz","fileCount":71,"integrity":"sha512-aHu3epVBmnDnZr2lbwT8dcyspYnwVnnDniKAj03cvQLq9VPxvJP/8eNCOqWqIKzeB0wVAB8Y6bOXwLY2g2KquA==","signatures":[{"sig":"MEYCIQDTbJD0D+ArZbNo///sQc+0WoPuwdOBex4j93GFX6a09gIhAMvVYKcYvdMNmIvMsB8gFksui/ajN98KC5GRcuozzlGc","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":35535467},"main":"./dist/index.cjs","type":"module","module":"./dist/index.mjs","gitHead":"cc2464a4d35f474bbc6305d6418a18293e9d5b52","scripts":{"test":"tsx test/HelloWorldGrammarParser.ts","build":"tsdown","clean":"rimraf dist","prepublishOnly":"npm run build","test:validation":"tsx tests/validation/grammar-validation.test.ts"},"_npmUser":{"name":"alamhubb","email":"alamhubb@163.com"},"repository":{"url":"git+https://github.com/alamhubb/subhuti.git","type":"git"},"_npmVersion":"11.6.2","description":"Automatic conversion between two different programming languages through two grammar files that define the same grammar structure and grammar name","directories":{},"_nodeVersion":"24.11.1","dependencies":{"d3":"^7.9.0","dagre-d3":"^0.6.4","lru-cache":"^11.0.0","mnemonist":"^0.40.3","big-cartesian":"^6.1.1","@dagrejs/dagre":"^2.0.0","fast-cartesian":"^9.0.1","@dagrejs/graphlib":"^2.2.4","@dagrejs/graphlib-dot":"^1.0.2"},"_hasShrinkwrap":false,"devDependencies":{"tsdown":"0.17.0-beta.6","@types/node":"^24.10.1","@types/estree":"1.0.6"},"_npmOperationalInternal":{"tmp":"tmp/subhuti_0.2.4_1765941172664_0.8182505193567524","host":"s3://npm-registry-packages-npm-production"}},"0.2.5":{"name":"subhuti","version":"0.2.5","keywords":["subhuti","parser","auto-parser","generator","auto-generator","transformer","auto-transfomer"],"author":{"name":"alamhubb"},"license":"MIT","_id":"subhuti@0.2.5","maintainers":[{"name":"alamhubb","email":"alamhubb@163.com"}],"contributors":[{"url":"https://github.com/alamhubb","name":"alamhubb"}],"homepage":"https://github.com/alamhubb/subhuti","bugs":{"url":"https://github.com/alamhubb/subhuti/issues"},"dist":{"shasum":"fc1ba2ac1dbcae0e10a5ed6d2b95dee5841abd6a","tarball":"https://registry.npmjs.org/subhuti/-/subhuti-0.2.5.tgz","fileCount":10,"integrity":"sha512-b8lRL/Du5a0RRHnVRAU7l+as8+Ekd4UuH7xg89fZggjWvW9O1MSfPVzHtBLg7vhPUEIESidRhUiciLMz4GMEAg==","signatures":[{"sig":"MEQCIFA2N2iRlWyzZhSrIU411KCZWMUG/arm+L1r70uduOzmAiB9mz/aLhkM0UPyXQqfisRKD6XnAM+TYN83DGJmBXxvrQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1236942},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.mts","module":"./dist/index.mjs","exports":{".":{"types":"./dist/index.d.mts","import":"./dist/index.mjs","default":"./dist/index.mjs","require":"./dist/index.cjs"}},"gitHead":"cc2464a4d35f474bbc6305d6418a18293e9d5b52","scripts":{"test":"tsx test/HelloWorldGrammarParser.ts","build":"tsdown","clean":"rimraf dist","prepublishOnly":"npm run build","test:validation":"tsx tests/validation/grammar-validation.test.ts"},"_npmUser":{"name":"alamhubb","email":"alamhubb@163.com"},"repository":{"url":"git+https://github.com/alamhubb/subhuti.git","type":"git"},"_npmVersion":"11.6.2","description":"Automatic conversion between two different programming languages through two grammar files that define the same grammar structure and grammar name","directories":{},"_nodeVersion":"24.11.1","dependencies":{"d3":"^7.9.0","dagre-d3":"^0.6.4","lru-cache":"^11.0.0","mnemonist":"^0.40.3","big-cartesian":"^6.1.1","@dagrejs/dagre":"^2.0.0","fast-cartesian":"^9.0.1","@dagrejs/graphlib":"^2.2.4","@dagrejs/graphlib-dot":"^1.0.2"},"_hasShrinkwrap":false,"devDependencies":{"tsdown":"0.17.0-beta.6","@types/node":"^24.10.1","@types/estree":"1.0.6"},"_npmOperationalInternal":{"tmp":"tmp/subhuti_0.2.5_1765947654973_0.21277765684081063","host":"s3://npm-registry-packages-npm-production"}},"0.2.6":{"name":"subhuti","version":"0.2.6","keywords":["subhuti","parser","auto-parser","generator","auto-generator","transformer","auto-transfomer"],"author":{"name":"alamhubb"},"license":"MIT","_id":"subhuti@0.2.6","maintainers":[{"name":"alamhubb","email":"alamhubb@163.com"}],"contributors":[{"url":"https://github.com/alamhubb","name":"alamhubb"}],"homepage":"https://github.com/alamhubb/subhuti","bugs":{"url":"https://github.com/alamhubb/subhuti/issues"},"dist":{"shasum":"73116f17d50f8e52784e17a0ddf90a94195b7725","tarball":"https://registry.npmjs.org/subhuti/-/subhuti-0.2.6.tgz","fileCount":10,"integrity":"sha512-De3oUGwS1/7lhncRaC/5TQVnuUW+Vo7wQ6KV6z5xXl0zq1pransxSspGYhDDVIMnzAlgGcOrGkzFhYUZcw1DZw==","signatures":[{"sig":"MEQCIDt0CqZVDSthkIBpyF6R9Z5ULyZ8S4F7553vsZBJJL1MAiAigS6GVlcK2HvKsQftvzCRS+AJkj0ttzQTYQzZN626EA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1249246},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.mts","module":"./dist/index.mjs","exports":{".":{"types":"./dist/index.d.mts","import":"./dist/index.mjs","default":"./dist/index.mjs","require":"./dist/index.cjs"}},"gitHead":"cc2464a4d35f474bbc6305d6418a18293e9d5b52","scripts":{"test":"tsx test/HelloWorldGrammarParser.ts","build":"tsdown","clean":"rimraf dist","prepublishOnly":"npm run build","test:validation":"tsx tests/validation/grammar-validation.test.ts"},"_npmUser":{"name":"alamhubb","email":"alamhubb@163.com"},"repository":{"url":"git+https://github.com/alamhubb/subhuti.git","type":"git"},"_npmVersion":"11.6.2","description":"Automatic conversion between two different programming languages through two grammar files that define the same grammar structure and grammar name","directories":{},"_nodeVersion":"24.11.1","dependencies":{"d3":"^7.9.0","dagre-d3":"^0.6.4","lru-cache":"^11.0.0","@dagrejs/dagre":"^2.0.0","fast-cartesian":"^9.0.1","@dagrejs/graphlib":"^2.2.4","@dagrejs/graphlib-dot":"^1.0.2"},"_hasShrinkwrap":false,"devDependencies":{"tsdown":"0.17.0-beta.6","@types/node":"^24.10.1","@types/estree":"1.0.6"},"_npmOperationalInternal":{"tmp":"tmp/subhuti_0.2.6_1765951545449_0.09549346107191736","host":"s3://npm-registry-packages-npm-production"}},"0.2.7":{"name":"subhuti","version":"0.2.7","keywords":["subhuti","parser","auto-parser","generator","auto-generator","transformer","auto-transfomer"],"author":{"name":"alamhubb"},"license":"MIT","_id":"subhuti@0.2.7","maintainers":[{"name":"alamhubb","email":"alamhubb@163.com"}],"contributors":[{"url":"https://github.com/alamhubb","name":"alamhubb"}],"homepage":"https://github.com/alamhubb/subhuti","bugs":{"url":"https://github.com/alamhubb/subhuti/issues"},"dist":{"shasum":"4a70445bcd390efe74b75676fc3bc36090c41406","tarball":"https://registry.npmjs.org/subhuti/-/subhuti-0.2.7.tgz","fileCount":10,"integrity":"sha512-++adYrxMZSeb4OhFC5kcS+vFX4JOgi7/SqQPA6APaLKAiQsv/NOV7+As636nktnBKlL6so5ULUxtAf/TIFpQDg==","signatures":[{"sig":"MEUCIDOX2riRxlAAriQ9KSjA49aQNa0xTU3TNKeNnMbm3TuEAiEAx75nXlw8txqaX6QIcSallXfL+OTfAuDcP11yRACWvCI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1249195},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.mts","module":"./dist/index.mjs","exports":{".":{"types":"./dist/index.d.mts","import":"./dist/index.mjs","default":"./dist/index.mjs","require":"./dist/index.cjs"}},"gitHead":"cc2464a4d35f474bbc6305d6418a18293e9d5b52","scripts":{"test":"tsx test/HelloWorldGrammarParser.ts","build":"tsdown","clean":"rimraf dist","prepublishOnly":"npm run build","test:validation":"tsx tests/validation/grammar-validation.test.ts"},"_npmUser":{"name":"alamhubb","email":"alamhubb@163.com"},"repository":{"url":"git+https://github.com/alamhubb/subhuti.git","type":"git"},"_npmVersion":"11.6.2","description":"Automatic conversion between two different programming languages through two grammar files that define the same grammar structure and grammar name","directories":{},"_nodeVersion":"24.11.1","dependencies":{"d3":"^7.9.0","dagre-d3":"^0.6.4","lru-cache":"^11.0.0","@dagrejs/dagre":"^2.0.0","fast-cartesian":"^9.0.1","@dagrejs/graphlib":"^2.2.4","@dagrejs/graphlib-dot":"^1.0.2"},"_hasShrinkwrap":false,"devDependencies":{"tsdown":"0.17.0-beta.6","typescript":"^5.9.3","@types/node":"^24.10.1","@types/estree":"1.0.6"},"_npmOperationalInternal":{"tmp":"tmp/subhuti_0.2.7_1766425108420_0.3506703678138663","host":"s3://npm-registry-packages-npm-production"}},"0.2.8":{"name":"subhuti","version":"0.2.8","keywords":["subhuti","parser","auto-parser","generator","auto-generator","transformer","auto-transfomer"],"author":{"name":"alamhubb"},"license":"MIT","_id":"subhuti@0.2.8","maintainers":[{"name":"alamhubb","email":"alamhubb@163.com"}],"contributors":[{"url":"https://github.com/alamhubb","name":"alamhubb"}],"homepage":"https://github.com/alamhubb/subhuti","bugs":{"url":"https://github.com/alamhubb/subhuti/issues"},"dist":{"shasum":"b65c955238cbf9796f1a7902ea6a5052997249b5","tarball":"https://registry.npmjs.org/subhuti/-/subhuti-0.2.8.tgz","fileCount":11,"integrity":"sha512-pgdzhF2ditwgqU3v+4ryU3NJ+Qo1BMj1vVxv+sBtN/xifZy9/b5Z/AOU7F84IB2UQvoPfRd8kJy12gY0q9EJUQ==","signatures":[{"sig":"MEUCIGJ8bxoBUedK4sZYdwRLyyUi2cMensDqH0Q0bauHQ46cAiEAoG9kYjNq6qRRxwCdCEkdevNA2ethdu416f+3Gr91YWU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1237418},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js"}},"gitHead":"cc2464a4d35f474bbc6305d6418a18293e9d5b52","scripts":{"test":"tsx test/HelloWorldGrammarParser.ts","build":"tsdown","clean":"rimraf dist","prepublishOnly":"npm run build","test:validation":"tsx tests/validation/grammar-validation.test.ts"},"_npmUser":{"name":"alamhubb","email":"alamhubb@163.com"},"repository":{"url":"git+https://github.com/alamhubb/subhuti.git","type":"git"},"_npmVersion":"11.6.2","description":"Automatic conversion between two different programming languages through two grammar files that define the same grammar structure and grammar name","directories":{},"_nodeVersion":"24.11.1","dependencies":{"d3":"^7.9.0","dagre-d3":"^0.6.4","lru-cache":"^11.0.0","@dagrejs/dagre":"^2.0.0","fast-cartesian":"^9.0.1","@dagrejs/graphlib":"^2.2.4","@dagrejs/graphlib-dot":"^1.0.2"},"_hasShrinkwrap":false,"devDependencies":{"tsdown":"0.17.0-beta.6","typescript":"^5.9.3","@types/node":"^24.10.1","@types/estree":"1.0.6"},"_npmOperationalInternal":{"tmp":"tmp/subhuti_0.2.8_1766466210202_0.8657154395454711","host":"s3://npm-registry-packages-npm-production"}},"0.2.81":{"name":"subhuti","version":"0.2.81","keywords":["subhuti","parser","auto-parser","generator","auto-generator","transformer","auto-transfomer"],"author":{"name":"alamhubb"},"license":"MIT","_id":"subhuti@0.2.81","maintainers":[{"name":"alamhubb","email":"alamhubb@163.com"}],"contributors":[{"url":"https://github.com/alamhubb","name":"alamhubb"}],"homepage":"https://github.com/alamhubb/subhuti","bugs":{"url":"https://github.com/alamhubb/subhuti/issues"},"dist":{"shasum":"876f5084a4a4a8a961cc9ffd316af2fab7336ad5","tarball":"https://registry.npmjs.org/subhuti/-/subhuti-0.2.81.tgz","fileCount":11,"integrity":"sha512-BMiuqrMmQoB3IxM95yEEdp7y72IscYoPCANoaqgO8YKQFJHA/jRSe4vMQBBicx5ARIukUxplPsxfBB+RA8i9Kw==","signatures":[{"sig":"MEUCIQDGcNFjnzvukZd/VUjrxRCo2ev4SjPzTtKqhzJHOAgSogIgGbZKl4f2+5c1HrNmPrvl/ddOskKaDyqKjkB5DRB0j6Y=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1237501},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.mts","module":"./dist/index.mjs","exports":{".":{"types":"./dist/index.d.mts","import":"./dist/index.mjs","default":"./dist/index.mjs","require":"./dist/index.cjs","development":"./src/index.ts"}},"gitHead":"cc2464a4d35f474bbc6305d6418a18293e9d5b52","scripts":{"test":"tsx test/HelloWorldGrammarParser.ts","build":"tsdown","clean":"rimraf dist","prepublishOnly":"npm run build","test:validation":"tsx tests/validation/grammar-validation.test.ts"},"_npmUser":{"name":"alamhubb","email":"alamhubb@163.com"},"repository":{"url":"git+https://github.com/alamhubb/subhuti.git","type":"git"},"_npmVersion":"11.6.2","description":"Automatic conversion between two different programming languages through two grammar files that define the same grammar structure and grammar name","directories":{},"_nodeVersion":"24.11.1","dependencies":{"d3":"^7.9.0","dagre-d3":"^0.6.4","lru-cache":"^11.0.0","@dagrejs/dagre":"^2.0.0","fast-cartesian":"^9.0.1","@dagrejs/graphlib":"^2.2.4","@dagrejs/graphlib-dot":"^1.0.2"},"_hasShrinkwrap":false,"devDependencies":{"tsdown":"0.17.0-beta.6","typescript":"^5.9.3","@types/node":"^24.10.1","@types/estree":"1.0.6"},"_npmOperationalInternal":{"tmp":"tmp/subhuti_0.2.81_1766468453863_0.682742566638922","host":"s3://npm-registry-packages-npm-production"}},"0.2.83":{"name":"subhuti","version":"0.2.83","keywords":["subhuti","parser","auto-parser","generator","auto-generator","transformer","auto-transfomer"],"author":{"name":"alamhubb"},"license":"MIT","_id":"subhuti@0.2.83","maintainers":[{"name":"alamhubb","email":"alamhubb@163.com"}],"contributors":[{"url":"https://github.com/alamhubb","name":"alamhubb"}],"homepage":"https://github.com/alamhubb/subhuti","bugs":{"url":"https://github.com/alamhubb/subhuti/issues"},"dist":{"shasum":"9c1d5d6693d5b7fc980f318a2eeeaf44cf5ad464","tarball":"https://registry.npmjs.org/subhuti/-/subhuti-0.2.83.tgz","fileCount":11,"integrity":"sha512-3QCB845I2RbY14KGwwCzTFUa5T5wk3vlC/3ESp+tQwVJdO/CTN+wxXvj7LTxI5QvSHqem5bYRRVJEmdmLdKmZQ==","signatures":[{"sig":"MEUCIFjsRSynCUtzI6pMQZOILxfFuvEzhwGdDQRTOPEgg35YAiEAskxsrZFgL2Oaaa69G0/eU7GpaZZt40j2gXeee55ydNY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1237600},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.mts","module":"./dist/index.mjs","exports":{".":{"bun":"./src/index.ts","types":"./dist/index.d.mts","import":"./dist/index.mjs","default":"./dist/index.mjs","require":"./dist/index.cjs","development":"./src/index.ts"}},"gitHead":"cc2464a4d35f474bbc6305d6418a18293e9d5b52","scripts":{"test":"bun test/HelloWorldGrammarParser.ts","build":"tsdown","clean":"rimraf dist","prepublishOnly":"npm run build","test:validation":"bun tests/validation/grammar-validation.test.ts"},"_npmUser":{"name":"alamhubb","email":"alamhubb@163.com"},"repository":{"url":"git+https://github.com/alamhubb/subhuti.git","type":"git"},"_npmVersion":"11.6.2","description":"Automatic conversion between two different programming languages through two grammar files that define the same grammar structure and grammar name","directories":{},"_nodeVersion":"24.12.0","dependencies":{"d3":"^7.9.0","dagre-d3":"^0.6.4","lru-cache":"^11.0.0","@dagrejs/dagre":"^2.0.0","fast-cartesian":"^9.0.1","@dagrejs/graphlib":"^2.2.4","@dagrejs/graphlib-dot":"^1.0.2"},"_hasShrinkwrap":false,"devDependencies":{"tsdown":"0.17.0-beta.6","typescript":"^5.9.3","@types/node":"^24.10.1","@types/estree":"1.0.6"},"_npmOperationalInternal":{"tmp":"tmp/subhuti_0.2.83_1766638499854_0.0811572874592299","host":"s3://npm-registry-packages-npm-production"}},"0.2.84":{"name":"subhuti","version":"0.2.84","keywords":["subhuti","parser","auto-parser","generator","auto-generator","transformer","auto-transfomer"],"author":{"name":"alamhubb"},"license":"MIT","_id":"subhuti@0.2.84","maintainers":[{"name":"alamhubb","email":"alamhubb@163.com"}],"contributors":[{"url":"https://github.com/alamhubb","name":"alamhubb"}],"homepage":"https://github.com/alamhubb/subhuti","bugs":{"url":"https://github.com/alamhubb/subhuti/issues"},"dist":{"shasum":"134773bcef2e9612cdcf8bb957d5bdd5d6fe841f","tarball":"https://registry.npmjs.org/subhuti/-/subhuti-0.2.84.tgz","fileCount":11,"integrity":"sha512-46zItx23Bv4nH2n0hkmaieumpIT3O6o+OQyc54TE53IjOtESGK0GeOJ/v4TIBqm4il5RmyN0toH8GNcuBnPQ5g==","signatures":[{"sig":"MEQCIGxWfb2yDEKejLn5HDfTbWKMbL/qIh9G9TYYL7mNqENyAiBcnb/9kz3O9ba1kpkgO43zAlnEU1pSNmS+w4wyVb/twQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1237848},"main":"./src/index.ts","type":"module","types":"./src/index.ts","module":"./src/index.ts","exports":{".":{"types":"./src/index.ts","import":"./src/index.ts","default":"./src/index.ts","require":"./src/index.ts"}},"gitHead":"cc2464a4d35f474bbc6305d6418a18293e9d5b52","scripts":{"test":"bun test/HelloWorldGrammarParser.ts","build":"tsdown","clean":"rimraf dist","prepublishOnly":"npm run build","test:validation":"bun tests/validation/grammar-validation.test.ts"},"_npmUser":{"name":"alamhubb","email":"alamhubb@163.com"},"repository":{"url":"git+https://github.com/alamhubb/subhuti.git","type":"git"},"_npmVersion":"11.6.2","description":"Automatic conversion between two different programming languages through two grammar files that define the same grammar structure and grammar name","directories":{},"_nodeVersion":"24.12.0","dependencies":{"d3":"^7.9.0","dagre-d3":"^0.6.4","lru-cache":"^11.0.0","@dagrejs/dagre":"^2.0.0","fast-cartesian":"^9.0.1","@dagrejs/graphlib":"^2.2.4","@dagrejs/graphlib-dot":"^1.0.2"},"publishConfig":{"main":"./dist/index.cjs","types":"./dist/index.d.mts","module":"./dist/index.mjs","exports":{".":{"types":"./dist/index.d.mts","import":"./dist/index.mjs","default":"./dist/index.mjs","require":"./dist/index.cjs"}}},"_hasShrinkwrap":false,"devDependencies":{"tsdown":"0.17.0-beta.6","typescript":"^5.9.3","@types/node":"^24.10.1","@types/estree":"1.0.6"},"_npmOperationalInternal":{"tmp":"tmp/subhuti_0.2.84_1766652126828_0.3740518658193379","host":"s3://npm-registry-packages-npm-production"}},"0.2.85":{"name":"subhuti","version":"0.2.85","keywords":["subhuti","parser","auto-parser","generator","auto-generator","transformer","auto-transfomer"],"author":{"name":"alamhubb"},"license":"MIT","_id":"subhuti@0.2.85","maintainers":[{"name":"alamhubb","email":"alamhubb@163.com"}],"contributors":[{"url":"https://github.com/alamhubb","name":"alamhubb"}],"homepage":"https://github.com/alamhubb/subhuti","bugs":{"url":"https://github.com/alamhubb/subhuti/issues"},"dist":{"shasum":"6ada6419134f431a2356c9f2fede26da743acc8e","tarball":"https://registry.npmjs.org/subhuti/-/subhuti-0.2.85.tgz","fileCount":11,"integrity":"sha512-sdYFkQEod7RW5Ky3TeHsyeGLcNgJHwafAcLXIpD/KbF2k4hdneB0XMA73IomY6c+5SM6iRWlk3KjreHyJfUV0g==","signatures":[{"sig":"MEQCICB2QyW+WH2D0isDUznXvtveklMOcJaVYy/NWZWhryyOAiAi4qMfT/u3YxWsYTVVCezfCKfCIMSWkqOm2q9RvL35LQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1237600},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.mts","module":"./dist/index.mjs","exports":{".":{"bun":"./src/index.ts","types":"./dist/index.d.mts","import":"./dist/index.mjs","default":"./dist/index.mjs","require":"./dist/index.cjs","development":"./src/index.ts"}},"gitHead":"cc2464a4d35f474bbc6305d6418a18293e9d5b52","scripts":{"test":"bun test/HelloWorldGrammarParser.ts","build":"tsdown","clean":"rimraf dist","prepublishOnly":"npm run build","test:validation":"bun tests/validation/grammar-validation.test.ts"},"_npmUser":{"name":"alamhubb","email":"alamhubb@163.com"},"repository":{"url":"git+https://github.com/alamhubb/subhuti.git","type":"git"},"_npmVersion":"11.6.2","description":"Automatic conversion between two different programming languages through two grammar files that define the same grammar structure and grammar name","directories":{},"_nodeVersion":"24.12.0","dependencies":{"d3":"^7.9.0","dagre-d3":"^0.6.4","lru-cache":"^11.0.0","@dagrejs/dagre":"^2.0.0","fast-cartesian":"^9.0.1","@dagrejs/graphlib":"^2.2.4","@dagrejs/graphlib-dot":"^1.0.2"},"_hasShrinkwrap":false,"devDependencies":{"tsdown":"0.17.0-beta.6","typescript":"^5.9.3","@types/node":"^24.10.1","@types/estree":"1.0.6"},"_npmOperationalInternal":{"tmp":"tmp/subhuti_0.2.85_1766653911224_0.4624780653140135","host":"s3://npm-registry-packages-npm-production"}},"0.2.86":{"name":"subhuti","version":"0.2.86","type":"module","main":"./dist/index.cjs","module":"./dist/index.mjs","types":"./dist/index.d.mts","exports":{".":{"types":"./dist/index.d.mts","import":"./dist/index.mjs","require":"./dist/index.cjs","default":"./dist/index.mjs"}},"monorepo":"./index.ts","license":"MIT","scripts":{"build":"tsdown","prepublishOnly":"npm run build","clean":"rimraf dist"},"homepage":"https://github.com/alamhubb/subhuti","repository":{"type":"git","url":"git+https://github.com/alamhubb/subhuti.git"},"contributors":[{"name":"alamhubb","url":"https://github.com/alamhubb"}],"keywords":["subhuti","parser","auto-parser","generator","auto-generator","transformer","auto-transfomer"],"author":{"name":"alamhubb"},"description":"Automatic conversion between two different programming languages through two grammar files that define the same grammar structure and grammar name","dependencies":{"lru-cache":"^11.0.0"},"devDependencies":{"@types/estree":"1.0.6","@types/node":"^24.10.1","tsdown":"0.17.0-beta.6","tsx":"^4.21.0","typescript":"^5.9.3"},"gitHead":"cc2464a4d35f474bbc6305d6418a18293e9d5b52","_id":"subhuti@0.2.86","bugs":{"url":"https://github.com/alamhubb/subhuti/issues"},"_nodeVersion":"24.12.0","_npmVersion":"11.6.2","dist":{"integrity":"sha512-leZC+LCl3bM+cpF9eThz+Sg6dYQsA1TjkyhNhuEvC1o14+5xg4tS1WFUM89kc2VExrsXFiJ60vRQaz3YfXfB2g==","shasum":"44425dae8011d3d64fc9c53ed4194cc64ed56784","tarball":"https://registry.npmjs.org/subhuti/-/subhuti-0.2.86.tgz","fileCount":11,"unpackedSize":956977,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCIEor94XsaWUXKH12forFqE7m293qr48RUbrnnLDWZ7qSAiAzmDUUujDZITuQoxeytAAstjSUl/vuxyrqaPGHBOkh9A=="}]},"_npmUser":{"name":"alamhubb","email":"alamhubb@163.com"},"directories":{},"maintainers":[{"name":"alamhubb","email":"alamhubb@163.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/subhuti_0.2.86_1767447183544_0.9094475061106122"},"_hasShrinkwrap":false}},"time":{"created":"2024-10-10T17:05:31.501Z","modified":"2026-01-03T13:33:03.936Z","0.0.1":"2024-10-10T17:05:31.722Z","0.0.2":"2024-10-13T09:12:07.620Z","0.0.3":"2024-10-17T18:51:21.328Z","0.0.5":"2024-10-17T19:14:23.322Z","0.0.6":"2024-10-18T09:58:46.373Z","0.0.7":"2024-10-18T10:31:41.388Z","0.0.8":"2024-10-18T10:32:55.523Z","0.1.0":"2024-10-18T15:27:21.834Z","0.1.1":"2024-10-18T18:12:42.049Z","0.1.2":"2024-10-18T18:28:27.459Z","0.1.3":"2024-10-18T18:31:44.548Z","0.1.4":"2025-12-04T05:26:41.276Z","0.1.5":"2025-12-04T05:29:11.614Z","0.1.8":"2025-12-05T03:44:57.122Z","0.1.9":"2025-12-06T05:06:50.114Z","0.2.1":"2025-12-06T18:27:45.619Z","0.2.2":"2025-12-06T18:41:54.574Z","0.2.4":"2025-12-17T03:12:52.965Z","0.2.5":"2025-12-17T05:00:55.199Z","0.2.6":"2025-12-17T06:05:45.666Z","0.2.7":"2025-12-22T17:38:28.573Z","0.2.8":"2025-12-23T05:03:30.426Z","0.2.81":"2025-12-23T05:40:54.092Z","0.2.83":"2025-12-25T04:55:00.058Z","0.2.84":"2025-12-25T08:42:06.986Z","0.2.85":"2025-12-25T09:11:51.436Z","0.2.86":"2026-01-03T13:33:03.715Z"},"bugs":{"url":"https://github.com/alamhubb/subhuti/issues"},"author":{"name":"alamhubb"},"license":"MIT","homepage":"https://github.com/alamhubb/subhuti","keywords":["subhuti","parser","auto-parser","generator","auto-generator","transformer","auto-transfomer"],"repository":{"type":"git","url":"git+https://github.com/alamhubb/subhuti.git"},"description":"Automatic conversion between two different programming languages through two grammar files that define the same grammar structure and grammar name","contributors":[{"name":"alamhubb","url":"https://github.com/alamhubb"}],"maintainers":[{"name":"alamhubb","email":"alamhubb@163.com"}],"readme":"# Subhuti\r\n\r\n[![npm version](https://img.shields.io/npm/v/subhuti.svg)](https://www.npmjs.com/package/subhuti)\r\n[![License: MIT](https://img.shields.io/badge/License-MIT-blue.svg)](https://opensource.org/licenses/MIT)\r\n\r\n**Subhuti (सुभूति)** - 轻量级、高性能的 PEG Parser Generator 框架，用 TypeScript 构建，专为快速开发编程语言解析器而设计。\r\n\r\n**名称由来：** Subhuti（菩提祖师）是孙悟空的师父，寓意让编程语言转换如七十二变般灵活。\r\n\r\n## ✨ 核心特性\r\n\r\n### 🚀 高性能 Packrat Parsing\r\n- **线性时间复杂度 O(n)**：通过 LRU 缓存避免重复解析\r\n- **智能缓存管理**：自动清理过期缓存，内存占用可控\r\n- **可选开关**：根据需求灵活启用/禁用缓存\r\n\r\n### 🎯 PEG 风格语法（Parsing Expression Grammar）\r\n- **顺序选择**：`Or` 规则按顺序尝试，第一个成功即返回\r\n- **自动回溯**：失败时自动恢复状态，支持复杂语法\r\n- **清晰语义**：程序员完全控制规则顺序，无二义性\r\n\r\n### 🛡️ 智能错误管理（allowError 机制）\r\n- **前 N-1 分支允许失败**：在 `Or` 规则中优雅处理失败\r\n- **最后分支抛详细错误**：精确定位语法错误，附带完整上下文\r\n- **RAII 模式管理**：自动恢复错误状态，避免手动管理\r\n\r\n### 🎨 优雅的 TypeScript API\r\n- **装饰器模式**：使用 `@SubhutiRule` 定义规则，代码简洁\r\n- **强类型支持**：完整的 TypeScript 类型定义\r\n- **链式调用**：流畅的 API 设计（`.cache().debug().errorHandler()`）\r\n\r\n### 🔧 开发友好\r\n- **调试支持**：内置 Trace Debugger，可视化规则匹配过程\r\n- **错误处理**：详细的错误信息（位置、期望、实际、规则栈）\r\n- **问题检测系统**：运行时检测左递归、无限循环等常见错误\r\n- **语法验证**：自动检测 Or 规则冲突（前缀遮蔽、空路径）\r\n- **CST 辅助方法**：`getChild()`, `getChildren()`, `getToken()` 等便捷方法\r\n- **Token 前瞻**：完整支持 ECMAScript 规范的所有 `[lookahead ...]` 约束\r\n\r\n## 📦 安装\r\n\r\n```bash\r\nnpm install subhuti\r\n# 或\r\nyarn add subhuti\r\n```\r\n\r\n## 🚀 快速开始\r\n\r\n### 1. 定义 Lexer（词法分析器）\r\n\r\n```typescript\r\nimport { SubhutiLexer, createKeywordToken, createRegToken, createValueRegToken } from 'subhuti'\r\n\r\n// 定义 Token\r\nconst tokens = [\r\n  // 关键字\r\n  createKeywordToken('IfTok', 'if'),\r\n  createKeywordToken('ElseTok', 'else'),\r\n  createKeywordToken('ReturnTok', 'return'),\r\n\r\n  // 标识符和字面量\r\n  createRegToken('Identifier', /[a-zA-Z_][a-zA-Z0-9_]*/),\r\n  createRegToken('Number', /[0-9]+/),\r\n\r\n  // 符号\r\n  createKeywordToken('LParen', '('),\r\n  createKeywordToken('RParen', ')'),\r\n  createKeywordToken('Semicolon', ';'),\r\n\r\n  // 跳过空格和注释（skip: true）\r\n  createValueRegToken('WhiteSpace', /[ \\t\\r\\n]+/, '', true),\r\n  createValueRegToken('Comment', /\\/\\/[^\\n]*/, '', true),\r\n]\r\n\r\n// 创建 Lexer\r\nconst lexer = new SubhutiLexer(tokens)\r\n\r\n// 分词\r\nconst sourceCode = 'if (x) return 42;'\r\nconst tokenStream = lexer.tokenize(sourceCode)\r\n```\r\n\r\n### 2. 定义 TokenConsumer（可选，简化 token 消费）\r\n\r\n```typescript\r\nimport { SubhutiTokenConsumer } from 'subhuti'\r\n\r\n// 自定义 TokenConsumer，为每个 token 创建便捷方法\r\nclass MyTokenConsumer extends SubhutiTokenConsumer {\r\n  IfTok() { return this.consume(tokens.find(t => t.name === 'IfTok')!) }\r\n  ElseTok() { return this.consume(tokens.find(t => t.name === 'ElseTok')!) }\r\n  ReturnTok() { return this.consume(tokens.find(t => t.name === 'ReturnTok')!) }\r\n  Identifier() { return this.consume(tokens.find(t => t.name === 'Identifier')!) }\r\n  Number() { return this.consume(tokens.find(t => t.name === 'Number')!) }\r\n  LParen() { return this.consume(tokens.find(t => t.name === 'LParen')!) }\r\n  RParen() { return this.consume(tokens.find(t => t.name === 'RParen')!) }\r\n  Semicolon() { return this.consume(tokens.find(t => t.name === 'Semicolon')!) }\r\n}\r\n```\r\n\r\n### 3. 定义 Parser（语法分析器）\r\n\r\n```typescript\r\nimport { SubhutiParser, SubhutiRule, Subhuti } from 'subhuti'\r\n\r\n@Subhuti\r\nclass MyParser extends SubhutiParser<MyTokenConsumer> {\r\n  constructor(tokens) {\r\n    super(tokens, MyTokenConsumer)  // 传入自定义 TokenConsumer\r\n  }\r\n\r\n  @SubhutiRule\r\n  Statement() {\r\n    this.Or([\r\n      { alt: () => this.IfStatement() },\r\n      { alt: () => this.ReturnStatement() },\r\n      { alt: () => this.ExpressionStatement() }\r\n    ])\r\n  }\r\n\r\n  @SubhutiRule\r\n  IfStatement() {\r\n    this.tokenConsumer.IfTok()      // 使用 TokenConsumer 的便捷方法\r\n    this.tokenConsumer.LParen()\r\n    this.Expression()\r\n    this.tokenConsumer.RParen()\r\n    this.Statement()\r\n\r\n    // 可选的 else 分支\r\n    this.Option(() => {\r\n      this.tokenConsumer.ElseTok()\r\n      this.Statement()\r\n    })\r\n  }\r\n\r\n  @SubhutiRule\r\n  ReturnStatement() {\r\n    this.tokenConsumer.ReturnTok()\r\n    this.Expression()\r\n    this.tokenConsumer.Semicolon()\r\n  }\r\n\r\n  @SubhutiRule\r\n  Expression() {\r\n    // 简化示例\r\n    this.Or([\r\n      { alt: () => this.tokenConsumer.Identifier() },\r\n      { alt: () => this.tokenConsumer.Number() }\r\n    ])\r\n  }\r\n\r\n  @SubhutiRule\r\n  ExpressionStatement() {\r\n    this.Expression()\r\n    this.tokenConsumer.Semicolon()\r\n  }\r\n}\r\n```\r\n\r\n### 4. 解析代码\r\n\r\n```typescript\r\nconst parser = new MyParser(tokenStream)\r\n  .cache(true)          // 启用 Packrat 缓存\r\n  .debug(false)         // 生产环境关闭调试\r\n  .errorHandler(true)   // 启用详细错误信息\r\n\r\n// 解析\r\nconst cst = parser.Statement()\r\n\r\n// 访问 CST\r\nif (cst) {\r\n  console.log('规则名称:', cst.name)\r\n  console.log('子节点数量:', cst.childCount)\r\n\r\n  // 使用便捷方法访问\r\n  const condition = cst.getChild('Expression')\r\n  const returnValue = cst.getToken('Number')\r\n\r\n  // 访问位置信息（用于错误报告、源码映射）\r\n  console.log('位置:', cst.loc.start.line, cst.loc.start.column)\r\n}\r\n```\r\n\r\n## 📖 核心能力\r\n\r\n### Parser 组合器\r\n\r\n#### `Or` - 顺序选择（**规则顺序很重要！**）\r\n\r\n```typescript\r\nthis.Or([\r\n  { alt: () => { /* 长规则：优先尝试 */ } },\r\n  { alt: () => { /* 短规则：作为回退 */ } }\r\n])\r\n```\r\n\r\n⚠️ **关键原则**：**长规则必须在短规则前面**\r\n\r\n#### `Many` - 0 次或多次\r\n\r\n```typescript\r\nthis.Many(() => {\r\n  this.Statement()\r\n})\r\n```\r\n\r\n#### `AtLeastOne` - 1 次或多次\r\n\r\n```typescript\r\nthis.AtLeastOne(() => {\r\n  this.Parameter()\r\n})\r\n```\r\n\r\n#### `Option` - 0 次或 1 次\r\n\r\n```typescript\r\nthis.Option(() => {\r\n  this.ElseClause()\r\n})\r\n```\r\n\r\n### Token 前瞻（Lookahead）\r\n\r\n```typescript\r\n// 检查下一个 token 是否匹配\r\nif (this.lookahead('LBrace', 1)) {\r\n  // 下一个是 {\r\n}\r\n\r\n// 检查下一个 token 是否不匹配\r\nif (this.lookaheadNot('ElseTok', 1)) {\r\n  // 下一个不是 else\r\n}\r\n\r\n// 断言方法\r\nthis.assertLookaheadNotIn(['LBrace', 'FunctionTok', 'ClassTok'])\r\nthis.assertNoLineBreak()\r\n```\r\n\r\n### 语法验证\r\n\r\n```typescript\r\n// 检查语法是否正确\r\nconst result = parser.validateGrammar()\r\n\r\nif (!result.success) {\r\n  console.error('发现语法冲突:', result.errors)\r\n}\r\n```\r\n\r\n## 🎯 核心概念\r\n\r\n### PEG 顺序选择 vs 传统最长匹配\r\n\r\n| 特性 | Subhuti (PEG) | 传统 LR/LALR |\r\n|------|---------------|--------------|\r\n| 匹配策略 | **第一个成功** | 最长匹配 |\r\n| 规则顺序 | ⭐⭐⭐ **关键** | 不重要 |\r\n| 回溯 | ✅ 支持 | ❌ 不支持 |\r\n| 二义性处理 | 程序员控制 | 自动检测/报错 |\r\n\r\n### allowError 机制\r\n\r\n在 `Or` 规则中：\r\n- **前 N-1 分支**：允许失败，失败时返回 `undefined`\r\n- **最后分支**：失败时抛出详细错误\r\n\r\n## 📊 与其他工具对比\r\n\r\n| 工具 | Subhuti | ANTLR | PEG.js | Chevrotain |\r\n|------|---------|-------|--------|------------|\r\n| **语言** | TypeScript | Java/多语言 | JavaScript | TypeScript |\r\n| **风格** | PEG | LL(*) | PEG | LL(k) |\r\n| **定义方式** | 装饰器 | 独立语法文件 | 独立语法文件 | TypeScript API |\r\n| **回溯** | ✅ | ❌ | ✅ | ❌ |\r\n| **性能** | ⭐⭐⭐⭐⭐ | ⭐⭐⭐⭐⭐ | ⭐⭐⭐ | ⭐⭐⭐⭐ |\r\n\r\n## 🎯 实际应用\r\n\r\n### Slime 项目\r\n使用 Subhuti 构建完整的 **JavaScript ES2025** 解析器：\r\n- ✅ 支持最新 ECMAScript 2025 规范的所有语法特性\r\n- ✅ CST → AST 转换\r\n- ✅ 代码生成和 Source Map 支持\r\n\r\n## 📄 License\r\n\r\nMIT © [alamhubb](https://github.com/alamhubb)\r\n\r\n---\r\n\r\n[English](./README.md)\r\n","readmeFilename":"README.zh-CN.md"}