1.2.4 • Published 9 months ago

@davnpsh/automata v1.2.4

Weekly downloads
-
License
GPL-3.0
Repository
-
Last release
9 months ago

automata

npm

This npm package provides a way to create and manipulate finite automatons based on regular expressions.

Install

npm install @davnpsh/automata

Usage

The NFA (Nondeterministic Finite Automaton) object allows you to create a NFA from a regular expression string.

import { NFA } from '@davnpsh/automata';

const nfa = new NFA('a(b|c)*');

You can also create a DFA from a regular expression string.

import { uDFA, mDFA } from '@davnpsh/automata';

const udfa = new uDFA('a(b|c)*'); // Unoptimised DFA
const mdfa = new mDFA('a(b|c)*'); // Minimised DFA

In both cases, you can traverse the automaton given the initial_state attribute and going through the next attribute, which is an array of edges.

Configuration

These objects can also be configured.

import { NFA } from '@davnpsh/automata';

const nfa = new NFA('a(b|c)*', {
  // Custom empty symbol
  empty_symbol: "&"
});

Test

You can test the automaton with a string.

import { mDFA } from '@davnpsh/automata';

const mdfa = new mDFA('a(b|c)*');
mdfa.test("ab");

It returns an object with the accept attribute and the routes attribute, which is an array of arrays of transitions.

Graph

You can also get the graph of the automaton in a format compatible with Cytoscape.

import { mDFA } from '@davnpsh/automata';

const mdfa = new mDFA('a(b|c)*');
mdfa.cytograph(); // Cytoscape elements format

It is recommended to import the stylesheet and the layout into your project.

import { cytoscape_styles, cytoscape_layout } from '@davnpsh/automata';

// Use it on your cytoscape component.
// For example, in React:

// IMPORTANT: To use the provided layout, you must import cytoscape-dagre
Cytoscape.use(dagre);

const Graph = () => {
  return (
    <CytoscapeComponent
      elements={mdfa.cytograph()}
      style={{ width: "100%", height: "100%" }}
      stylesheet={cytoscape_styles}
      layout={cytoscape_layout}
    />
  );
};
1.2.4

9 months ago

1.2.3

10 months ago

1.2.2

10 months ago

1.2.0

10 months ago

1.2.1

10 months ago

1.1.0

10 months ago

1.0.4

10 months ago

1.0.3

10 months ago

1.0.2

10 months ago

1.0.1

10 months ago

1.0.0

10 months ago