JavaScript library for working with automata and grammars for regular and context-free languages
Switch branches/tags
Nothing to show
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.

Noam Build Status

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.


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.


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=""></script>

or minified version:

<script src=""></script>


  1. Fork and/or clone repo: git clone
  2. Change dir to noam: cd noam
  3. Install dependencies: npm install
  4. Make changes to noam sources (./src), tests (./test) or benchmarks (./benchmarks)
  5. Build using grunt (validate -> lint -> concat -> test -> minify): grunt (on linux and osx), grunt.cmd (on windows)
  6. (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
  7. Fix issues reported by tests and coverage reports, and then repeat 5) and 6)
  8. Commit, push and make a pull request, or send a git patch by e-mail
  9. E-mail me if you have questions (e-mail address is below)


Noam is developed by Ivan Zuzak <> 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


Licensed under the Apache 2.0 License.

gaugestracking alpha