Mahoujin
Generate syntax diagram(aka railroad diagram) from EBNF specification
Requirements
Installation
-
Use Ruby’s package manager
Text $ gem install mahoujin
-
Or from source
Text $ git clone https://github.com/0x01f7/mahoujin.git $ cd mahoujin $ ./bin/setup $ ./bin/rake install
Usage
Run command:
$ mahoujin SYNTAX.ebnfspec -o SYNTAX.png
Note: the SYNTAX.ebnfspec uses EBNF which is defined in ISO/IEC 14977 to describe it’s rules.
Samples - EBNF
SYNTAX.ebnfspec:
Text
syntax = syntax rule, {syntax rule};
syntax rule = meta identifier, '=', definitions list, ';';
definitions list = single definition, {'|', single definition};
single definition = term, {',', term};
term = factor, ['-', exception];
exception = factor;
factor = [integer, '*'], primary;
primary = optional sequence | repeated sequence
| grouped sequence | special sequence
| meta identifier | terminal string;
optional sequence = '[', definitions list, ']';
repeated sequence = '{', definitions list, '}';
grouped sequence = '(', definitions list, ')';
special sequence = '?', {character - '?'}, '?';
meta identifier = letter, {letter | decimal digit | ? ASCII space character ?};
terminal string = "'", character - "'", {character - "'"}, "'"
| '"', character - '"', {character - '"'}, '"';
integer = decimal digit, {decimal digit};
character = ? any character in ASCII alphabet characters ?;
decimal digit = ? any character in ASCII number characters ?;
SYNTAX.png: