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 test
to 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 <[email protected]> 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.