In a previous post, I mentioned the implementation of a new workflow language that I recently completed. The syntax of the language is fairly simple, but I wanted to created some diagrams that illustrated exactly what the compiler expected.
I found a great open-source tool named EBNF-Visualizer that can produce nice looking graphics based on rules that are in Extended Backus Naur Form (EBNF). Here's an an example of the EBNF rule for the parallel statement.
parallel = "parallel" [":wait"] "do" {parallel_branch} "end".
and the resulting graphic is:
In this particular case, the parallel statement has a sub-component named parallel_branch that is defined in another EBNF rule.
The EBNF-Visualizer software has great error handling and it was easy to create the diagrams and correct errors in the EBNF rules.