Noam
JavaScript library for working with automata and grammars for regular and context-free languages
Install / Use
/learn @izuzak/NoamREADME
Noam 
Noam is a JavaScript library for working with automata and formal grammars for regular and context-free languages.
Noam's name comes from Noam Chomsky and his hierarchy of formal languages and grammars.
Status
Pre-alpha. Horrible performance, only functions for working with FSMs implemented. Stay tuned. See TODO list.
Web apps
- Regular Expressions Gym - Slim your regexes one step at a time! Source is here.
- FSM Simulator - Visually simulate the operation of your DFAs, NFAs and eNFAs one input symbol at a time! Source is here.
- FSM2Regex - Convert your FSMs to regexes and your regexes to FSMs! Source is here.
Install
If you just want to use noam (and not contribute to development), install using npm:
npm install noam
To use noam in a browser, add a <script> link to the browser-based versions found in lib/browser/:
<script src="https://ivanzuzak.info/noam/lib/browser/noam.js"></script>
or minified version:
<script src="https://ivanzuzak.info/noam/lib/browser/noam.min.js"></script>
Development
- Fork and/or clone repo:
git clone https://github.com/izuzak/noam.git - Change dir to noam:
cd noam - Install dependencies:
npm install - Make changes to noam sources (
./src), tests (./test) or benchmarks (./benchmarks) - Build using grunt (validate -> lint -> concat -> test -> minify):
grunt(on linux and osx),grunt.cmd(on windows) - (bonus points) Run
istanbul cover node_modules/jasmine-node/bin/jasmine-node testto get code coverage reports in./coverage. Add more tests or change existing tests to improve coverage - Fix issues reported by tests and coverage reports, and then repeat 5) and 6)
- Commit, push and make a pull request, or send a git patch by e-mail
- E-mail me if you have questions (e-mail address is below)
Credits
Noam is developed by Ivan Zuzak <izuzak@gmail.com> and Ivan Budiselic. Contributors: Vedrana Jankovic.
Noam is built with many awesome open-source projects:
- structure.js - used for its JS hashtable implementation
- cli-table - used for drawing ascii tables in the command-line version of noam
- jQuery - used for the FSM Web application playgrounds
- NodeJS - used for running the command-line version of noam
- viz.js - used for drawing FSM graphs in Web applications
- Bootstrap - used for styles in regex simplification webapp
- JsDiff - used for diffing regexes in regex simplifier webapp
- jasmine-node and grunt-jasmine-node - used for unit testing
- benchtable and benchmark.js - used for performance benchmarking
- grunt-jsvalidate - used for JavaScript validation
- grunt - used as the build tool for the project
- JSHint - used for linting the noam lib
- UglifyJS - used for minifying the noam lib
- PhantomJS - used for testing webapps
- WD.js - used for testing webapps
- Istanbul - used for code coverage
License
Licensed under the Apache 2.0 License.
Related Skills
proje
Interactive vocabulary learning platform with smart flashcards and spaced repetition for effective language acquisition.
YC-Killer
2.7kA library of enterprise-grade AI agents designed to democratize artificial intelligence and provide free, open-source alternatives to overvalued Y Combinator startups. If you are excited about democratizing AI access & AI agents, please star ⭐️ this repository and use the link in the readme to join our open source AI research team.
best-practices-researcher
The most comprehensive Claude Code skills registry | Web Search: https://skills-registry-web.vercel.app
groundhog
400Groundhog's primary purpose is to teach people how Cursor and all these other coding agents work under the hood. If you understand how these coding assistants work from first principles, then you can drive these tools harder (or perhaps make your own!).
