Skip to content

Latest commit

ย 

History

History
1014 lines (823 loc) ยท 40.3 KB

optimizations.md

File metadata and controls

1014 lines (823 loc) ยท 40.3 KB

Optimizations

This file will demonstrate all the diagram optimizations and markup.

Markup

The markup will be written in markdown. Why?

  • Markdown produces clean HTML
  • Markdown works in plain text form in the EBNF comments
    • Its clean
    • And still structured
  • It prevents breaking markup

Also, links to sites, like https://github.com/matthijsgroen/ebnf2railroad will be converted into a clickable link.

Text decoration

Text markup is also a breeze. Using asterisks and underscores to place emphasis.

Linking to a EBNF declaration is also nice

It nice if you spend a lot of time and effort on creating a DSL (Domain specific language). That if you formally specify it using EBNF, you get really good looking documentation for free!

-- someone

Code examples

Small code examples can be embedded as well.

it(could("improve") && clarify()) {
  your = "syntax";
  // intentions
}

Tiny tidbits to clarify terminals like null or undefined can help greatly.

What would a document great as html format:

  1. responsive design

    • to view on small screens as well.
    • and make no really long run on sentences that seem to last forever on really large screens, because that is really, really annoying to read.
  2. clear nice readable text. (nice font!)

  3. linking to different sections

optimizations

           โ•ญโ•ดoptimized choicesโ•ถโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•ฎ
           โ•Ž          โ•ญโ•ดchoice with optionalโ•ถโ•ฎ          โ•Ž
โ•Ÿโ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ•ข
 โ”‚         โ•Žโ”‚         โ•Ž       โ”‚โ•ญโ”€โ”€โ”€โ•ฎโ”‚        โ•Ž         โ”‚โ•Ž          โ”‚
 โ”‚         โ•Žโ”‚         โ•Ž       โ”œโ”ค a โ”œโ”ค        โ•Ž         โ”‚โ•Ž          โ”‚
 โ”‚         โ•Žโ”‚         โ•Ž       โ”‚โ•ฐโ”€โ”€โ”€โ•ฏโ”‚        โ•Ž         โ”‚โ•Ž          โ”‚
 โ”‚         โ•Žโ”‚         โ•Ž       โ”‚โ•ญโ”€โ”€โ”€โ•ฎโ”‚        โ•Ž         โ”‚โ•Ž          โ”‚
 โ”‚         โ•Žโ”‚         โ•Ž       โ•ฐโ”ค b โ”œโ•ฏ        โ•Ž         โ”‚โ•Ž          โ”‚
 โ”‚         โ•Žโ”‚         โ•Ž        โ•ฐโ”€โ”€โ”€โ•ฏ         โ•Ž         โ”‚โ•Ž          โ”‚
 โ”‚         โ•Žโ”‚         โ•ฐโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•ฏ         โ”‚โ•Ž          โ”‚
 โ”‚         โ•Žโ”‚     โ•ญโ•ดnested choices with optionalโ•ถโ•ฎ     โ”‚โ•Ž          โ”‚
 โ”‚         โ•Žโ”œโ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”คโ•Ž          โ”‚
 โ”‚         โ•Žโ”‚     โ•Ž           โ”‚โ•ญโ”€โ”€โ”€โ•ฎโ”‚            โ•Ž     โ”‚โ•Ž          โ”‚
 โ”‚         โ•Žโ”‚     โ•Ž           โ”œโ”ค a โ”œโ”ค            โ•Ž     โ”‚โ•Ž          โ”‚
 โ”‚         โ•Žโ”‚     โ•Ž           โ”‚โ•ฐโ”€โ”€โ”€โ•ฏโ”‚            โ•Ž     โ”‚โ•Ž          โ”‚
 โ”‚         โ•Žโ”‚     โ•Ž           โ”‚โ•ญโ”€โ”€โ”€โ•ฎโ”‚            โ•Ž     โ”‚โ•Ž          โ”‚
 โ”‚         โ•Žโ”‚     โ•Ž           โ”œโ”ค b โ”œโ”ค            โ•Ž     โ”‚โ•Ž          โ”‚
 โ”‚         โ•Žโ”‚     โ•Ž           โ”‚โ•ฐโ”€โ”€โ”€โ•ฏโ”‚            โ•Ž     โ”‚โ•Ž          โ”‚
 โ”‚         โ•Žโ”‚     โ•Ž           โ”‚โ•ญโ”€โ”€โ”€โ•ฎโ”‚            โ•Ž     โ”‚โ•Ž          โ”‚
 โ”‚         โ•Žโ”‚     โ•Ž           โ•ฐโ”ค c โ”œโ•ฏ            โ•Ž     โ”‚โ•Ž          โ”‚
 โ”‚         โ•Žโ”‚     โ•Ž            โ•ฐโ”€โ”€โ”€โ•ฏ             โ•Ž     โ”‚โ•Ž          โ”‚
 โ”‚         โ•Žโ”‚     โ•ฐโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•ฏ     โ”‚โ•Ž          โ”‚
 โ”‚         โ•Žโ”‚โ•ญโ•ดnested choices with multiple optionalsโ•ถโ•ฎโ”‚โ•Ž          โ”‚
 โ”‚         โ•Žโ”œโ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”คโ•Ž          โ”‚
 โ”‚         โ•Žโ”‚โ•Ž                โ”‚โ•ญโ”€โ”€โ”€โ•ฎโ”‚                 โ•Žโ”‚โ•Ž          โ”‚
 โ”‚         โ•Žโ”‚โ•Ž                โ”œโ”ค a โ”œโ”ค                 โ•Žโ”‚โ•Ž          โ”‚
 โ”‚         โ•Žโ”‚โ•Ž                โ”‚โ•ฐโ”€โ”€โ”€โ•ฏโ”‚                 โ•Žโ”‚โ•Ž          โ”‚
 โ”‚         โ•Žโ”‚โ•Ž                โ”‚โ•ญโ”€โ”€โ”€โ•ฎโ”‚                 โ•Žโ”‚โ•Ž          โ”‚
 โ”‚         โ•Žโ”‚โ•Ž                โ”œโ”ค b โ”œโ”ค                 โ•Žโ”‚โ•Ž          โ”‚
 โ”‚         โ•Žโ”‚โ•Ž                โ”‚โ•ฐโ”€โ”€โ”€โ•ฏโ”‚                 โ•Žโ”‚โ•Ž          โ”‚
 โ”‚         โ•Žโ”‚โ•Ž                โ”‚โ•ญโ”€โ”€โ”€โ•ฎโ”‚                 โ•Žโ”‚โ•Ž          โ”‚
 โ”‚         โ•Žโ”‚โ•Ž                โ”œโ”ค c โ”œโ”ค                 โ•Žโ”‚โ•Ž          โ”‚
 โ”‚         โ•Žโ”‚โ•Ž                โ”‚โ•ฐโ”€โ”€โ”€โ•ฏโ”‚                 โ•Žโ”‚โ•Ž          โ”‚
 โ”‚         โ•Žโ”‚โ•Ž                โ”‚โ•ญโ”€โ”€โ”€โ•ฎโ”‚                 โ•Žโ”‚โ•Ž          โ”‚
 โ”‚         โ•Žโ”‚โ•Ž                โ”œโ”ค d โ”œโ”ค                 โ•Žโ”‚โ•Ž          โ”‚
 โ”‚         โ•Žโ”‚โ•Ž                โ”‚โ•ฐโ”€โ”€โ”€โ•ฏโ”‚                 โ•Žโ”‚โ•Ž          โ”‚
 โ”‚         โ•Žโ”‚โ•Ž                โ”‚โ•ญโ”€โ”€โ”€โ•ฎโ”‚                 โ•Žโ”‚โ•Ž          โ”‚
 โ”‚         โ•Žโ”‚โ•Ž                โ•ฐโ”ค e โ”œโ•ฏ                 โ•Žโ”‚โ•Ž          โ”‚
 โ”‚         โ•Žโ”‚โ•Ž                 โ•ฐโ”€โ”€โ”€โ•ฏ                  โ•Žโ”‚โ•Ž          โ”‚
 โ”‚         โ•Žโ”‚โ•ฐโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•ฏโ”‚โ•Ž          โ”‚
 โ”‚         โ•Žโ”‚            โ•ญโ•ดnested choicesโ•ถโ•ฎ            โ”‚โ•Ž          โ”‚
 โ”‚         โ•Žโ”‚            โ•Ž     โ•ญโ”€โ”€โ”€โ•ฎ      โ•Ž            โ”‚โ•Ž          โ”‚
 โ”‚         โ•Žโ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”ฌโ”ค a โ”œโ”ฌโ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”คโ•Ž          โ”‚
 โ”‚         โ•Žโ”‚            โ•Ž    โ”‚โ•ฐโ”€โ”€โ”€โ•ฏโ”‚     โ•Ž            โ”‚โ•Ž          โ”‚
 โ”‚         โ•Žโ”‚            โ•Ž    โ”‚โ•ญโ”€โ”€โ”€โ•ฎโ”‚     โ•Ž            โ”‚โ•Ž          โ”‚
 โ”‚         โ•Žโ”‚            โ•Ž    โ”œโ”ค b โ”œโ”ค     โ•Ž            โ”‚โ•Ž          โ”‚
 โ”‚         โ•Žโ”‚            โ•Ž    โ”‚โ•ฐโ”€โ”€โ”€โ•ฏโ”‚     โ•Ž            โ”‚โ•Ž          โ”‚
 โ”‚         โ•Žโ”‚            โ•Ž    โ”‚โ•ญโ”€โ”€โ”€โ•ฎโ”‚     โ•Ž            โ”‚โ•Ž          โ”‚
 โ”‚         โ•Žโ”‚            โ•Ž    โ•ฐโ”ค c โ”œโ•ฏ     โ•Ž            โ”‚โ•Ž          โ”‚
 โ”‚         โ•Žโ”‚            โ•Ž     โ•ฐโ”€โ”€โ”€โ•ฏ      โ•Ž            โ”‚โ•Ž          โ”‚
 โ”‚         โ•Žโ”‚            โ•ฐโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•ฏ            โ”‚โ•Ž          โ”‚
 โ”‚         โ•Žโ”‚       โ•ญโ•ดchoice with one or moreโ•ถโ•ฎ        โ”‚โ•Ž          โ”‚
 โ”‚         โ•Žโ•ฐโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฏโ•Ž          โ”‚
 โ”‚         โ•Ž        โ•Ž        โ”‚ โ•ญโ”€โ”€โ”€โ•ฎ โ”‚        โ•Ž         โ•Ž          โ”‚
 โ”‚         โ•Ž        โ•Ž        โ”œโ”€โ”ค a โ”œโ”€โ”ค        โ•Ž         โ•Ž          โ”‚
 โ”‚         โ•Ž        โ•Ž        โ”‚ โ•ฐโ”€โ”€โ”€โ•ฏ โ”‚        โ•Ž         โ•Ž          โ”‚
 โ”‚         โ•Ž        โ•Ž        โ”‚ โ•ญโ”€โ”€โ”€โ•ฎ โ”‚        โ•Ž         โ•Ž          โ”‚
 โ”‚         โ•Ž        โ•Ž        โ•ฐโ”ฌโ”ค b โ”œโ”ฌโ•ฏ        โ•Ž         โ•Ž          โ”‚
 โ”‚         โ•Ž        โ•Ž         โ”‚โ•ฐโ”€โ”€โ”€โ•ฏโ”‚         โ•Ž         โ•Ž          โ”‚
 โ”‚         โ•Ž        โ•Ž         โ•ฐโ”€โ”€โ†โ”€โ”€โ•ฏ         โ•Ž         โ•Ž          โ”‚
 โ”‚         โ•Ž        โ•ฐโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•ฏ         โ•Ž          โ”‚
 โ”‚         โ•ฐโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•ฏ          โ”‚
 โ”‚โ•ญโ•ดoptimized one or moreโ•ถโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•ฎโ”‚
 โ”‚โ•Ž                  โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”“                  โ•Žโ”‚
 โ•ฐโ”ผโ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”จ choice with one or more โ” โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”ผโ•ฏ
  โ•Žโ”‚                 โ”—โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”›                 โ”‚โ•Ž
  โ•Žโ”‚                       โ•ญโ•ดone or moreโ•ถโ•ฎ                       โ”‚โ•Ž
  โ•Žโ”‚                       โ•Ž    โ•ญโ”€โ”€โ”€โ•ฎ    โ•Ž                       โ”‚โ•Ž
  โ•Žโ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”ฌโ”ค a โ”œโ”ฌโ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”คโ•Ž
  โ•Žโ”‚                       โ•Ž   โ”‚โ•ฐโ”€โ”€โ”€โ•ฏโ”‚   โ•Ž                       โ”‚โ•Ž
  โ•Žโ”‚                       โ•Ž   โ•ฐโ”€โ”€โ†โ”€โ”€โ•ฏ   โ•Ž                       โ”‚โ•Ž
  โ•Žโ”‚                       โ•ฐโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•ฏ                       โ”‚โ•Ž
  โ•Žโ”‚                 โ•ญโ•ดone or more with groupโ•ถโ•ฎ                  โ”‚โ•Ž
  โ•Žโ”‚                 โ•Ž         โ•ญโ”€โ”€โ”€โ•ฎ          โ•Ž                  โ”‚โ•Ž
  โ•Žโ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”ฌโ”ค a โ”œโ”ฌโ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”คโ•Ž
  โ•Žโ”‚                 โ•Ž       โ”‚โ”‚โ•ฐโ”€โ”€โ”€โ•ฏโ”‚โ”‚        โ•Ž                  โ”‚โ•Ž
  โ•Žโ”‚                 โ•Ž       โ”‚โ”‚โ•ญโ”€โ”€โ”€โ•ฎโ”‚โ”‚        โ•Ž                  โ”‚โ•Ž
  โ•Žโ”‚                 โ•Ž       โ”‚โ•ฐโ”ค b โ”œโ•ฏโ”‚        โ•Ž                  โ”‚โ•Ž
  โ•Žโ”‚                 โ•Ž       โ”‚ โ•ฐโ”€โ”€โ”€โ•ฏ โ”‚        โ•Ž                  โ”‚โ•Ž
  โ•Žโ”‚                 โ•Ž       โ•ฐโ”€โ”€โ”€โ†โ”€โ”€โ”€โ•ฏ        โ•Ž                  โ”‚โ•Ž
  โ•Žโ”‚                 โ•ฐโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•ฏ                  โ”‚โ•Ž
  โ•Žโ”‚ โ•ญโ•ดone or more with repeaterโ•ถโ•ฎ โ•ญโ•ดoptimizationsโ•ถโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•ฎ โ”‚โ•Ž
  โ•Žโ”‚ โ•Ž โ•ญโ”€โ”€โ”€โ•ฎ     โ•ญโ”€โ”€โ”€โ•ฎ โ•ญโ”€โ”€โ”€โ•ฎ     โ•Ž โ•Ž   โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”“   โ•Ž โ”‚โ•Ž
  โ•Žโ•ฐโ”€โ”ผโ”€โ”ค a โ”œโ”€โ”ฌโ”€โ”€โ”€โ”ค b โ”œโ”€โ”ค c โ”œโ”€โ”€โ”€โ”ฌโ”€โ”ผโ”€โ”ผโ”ฌโ”€โ”€โ”จ optimized choices โ” โ”€โ”€โ”ฌโ”ผโ”€โ•ฏโ•Ž
  โ•Ž  โ•Ž โ•ฐโ”€โ”€โ”€โ•ฏ โ”‚   โ•ฐโ”€โ”€โ”€โ•ฏ โ•ฐโ”€โ”€โ”€โ•ฏ   โ”‚ โ•Ž โ•Žโ”‚  โ”—โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”›  โ”‚โ•Ž  โ•Ž
  โ•Ž  โ•Ž       โ”‚  โ•ญโ”€โ”€โ”€โ•ฎ โ•ญโ”€โ”€โ”€โ•ฎ    โ”‚ โ•Ž โ•Žโ”‚โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”“โ”‚โ•Ž  โ•Ž
  โ•Ž  โ•Ž       โ•ฐโ”€โ”€โ”ค e โ”œโ”€โ”ค d โ”œโ”€โ”€โ†โ”€โ•ฏ โ•Ž โ•Žโ•ฐโ”จ optimized one or more โ” โ•ฏโ•Ž  โ•Ž
  โ•Ž  โ•Ž          โ•ฐโ”€โ”€โ”€โ•ฏ โ•ฐโ”€โ”€โ”€โ•ฏ      โ•Ž โ•Ž โ”—โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”› โ•Ž  โ•Ž
  โ•Ž  โ•ฐโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•ฏ โ•ฐโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•ฏ  โ•Ž
  โ•ฐโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•ฏ

Text:

optimizations
  = optimized choices
  | optimized one or more
  ;

Optimization: Removal of duplicate choices

original fragment:

optimizations
  = optimized choices
  | optimized one or more
  | (optimized one or more)
  | optimized one or more;

optimized choices

           โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”“
โ•Ÿโ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”จ choice with optional โ” โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ•ข
 โ”‚         โ”—โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”›         โ”‚
 โ”‚     โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”“     โ”‚
 โ”œโ”€โ”€โ”€โ”€โ”€โ”จ nested choices with optional โ” โ”€โ”€โ”€โ”€โ”€โ”ค
 โ”‚     โ”—โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”›     โ”‚
 โ”‚โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”“โ”‚
 โ”œโ”จ nested choices with multiple optionals โ” โ”ค
 โ”‚โ”—โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”›โ”‚
 โ”‚            โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”“            โ”‚
 โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”จ nested choices โ” โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
 โ”‚            โ”—โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”›            โ”‚
 โ”‚       โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”“        โ”‚
 โ•ฐโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”จ choice with one or more โ” โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฏ
         โ”—โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”›

Text:

optimized choices
  = choice with optional
  | nested choices with optional
  | nested choices with multiple optionals
  | nested choices
  | choice with one or more
  ;

optimized one or more

             โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”“
โ•Ÿโ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”จ choice with one or more โ” โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ•ข
 โ”‚           โ”—โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”›           โ”‚
 โ”‚                 โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”“                 โ”‚
 โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”จ one or more โ” โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
 โ”‚                 โ”—โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”›                 โ”‚
 โ”‚           โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”“            โ”‚
 โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”จ one or more with group โ” โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
 โ”‚           โ”—โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”›            โ”‚
 โ”‚ โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”“ โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”“ โ”‚
 โ•ฐโ”€โ”จ one or more with repeater โ” โ”€โ”จ optimizations โ” โ”€โ•ฏ
   โ”—โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”› โ”—โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”›

Text:

optimized one or more
  = choice with one or more
  | one or more
  | one or more with group
  | one or more with repeater , optimizations
  ;

choice with optional

โ” โ”ฌโ”€โ”€โ”€โ”€โ”€โ”ฌโ”จ
 โ”‚โ•ญโ”€โ”€โ”€โ•ฎโ”‚
 โ”œโ”ค a โ”œโ”ค
 โ”‚โ•ฐโ”€โ”€โ”€โ•ฏโ”‚
 โ”‚โ•ญโ”€โ”€โ”€โ•ฎโ”‚
 โ•ฐโ”ค b โ”œโ•ฏ
  โ•ฐโ”€โ”€โ”€โ•ฏ

Text:

choice with optional = [ "a" | "b" ] ;

nested choices with optional

โ” โ”ฌโ”€โ”€โ”€โ”€โ”€โ”ฌโ”จ
 โ”‚โ•ญโ”€โ”€โ”€โ•ฎโ”‚
 โ”œโ”ค a โ”œโ”ค
 โ”‚โ•ฐโ”€โ”€โ”€โ•ฏโ”‚
 โ”‚โ•ญโ”€โ”€โ”€โ•ฎโ”‚
 โ”œโ”ค b โ”œโ”ค
 โ”‚โ•ฐโ”€โ”€โ”€โ•ฏโ”‚
 โ”‚โ•ญโ”€โ”€โ”€โ•ฎโ”‚
 โ•ฐโ”ค c โ”œโ•ฏ
  โ•ฐโ”€โ”€โ”€โ•ฏ

Text:

nested choices with optional = [ "a" | "b" | "c" ] ;

Optimization: Rewrite to simplify optional paths

If a choice has an optional path rewrite so that it is more clear that the entire choice can be skipped.

original fragment:

nested choices with optional = "a" | [ "b" | [ "c" ] ];

nested choices with multiple optionals

โ” โ”ฌโ”€โ”€โ”€โ”€โ”€โ”ฌโ”จ
 โ”‚โ•ญโ”€โ”€โ”€โ•ฎโ”‚
 โ”œโ”ค a โ”œโ”ค
 โ”‚โ•ฐโ”€โ”€โ”€โ•ฏโ”‚
 โ”‚โ•ญโ”€โ”€โ”€โ•ฎโ”‚
 โ”œโ”ค b โ”œโ”ค
 โ”‚โ•ฐโ”€โ”€โ”€โ•ฏโ”‚
 โ”‚โ•ญโ”€โ”€โ”€โ•ฎโ”‚
 โ”œโ”ค c โ”œโ”ค
 โ”‚โ•ฐโ”€โ”€โ”€โ•ฏโ”‚
 โ”‚โ•ญโ”€โ”€โ”€โ•ฎโ”‚
 โ”œโ”ค d โ”œโ”ค
 โ”‚โ•ฐโ”€โ”€โ”€โ•ฏโ”‚
 โ”‚โ•ญโ”€โ”€โ”€โ•ฎโ”‚
 โ•ฐโ”ค e โ”œโ•ฏ
  โ•ฐโ”€โ”€โ”€โ•ฏ

Text:

nested choices with multiple optionals = [ "a" | "b" | "c" | "d" | "e" ] ;

original fragment:

nested choices with multiple optionals = "a" | [ "b" | "c"] | [ "d" | "e" ];

nested choices

  โ•ญโ”€โ”€โ”€โ•ฎ
โ” โ”ฌโ”ค a โ”œโ”ฌโ”จ
 โ”‚โ•ฐโ”€โ”€โ”€โ•ฏโ”‚
 โ”‚โ•ญโ”€โ”€โ”€โ•ฎโ”‚
 โ”œโ”ค b โ”œโ”ค
 โ”‚โ•ฐโ”€โ”€โ”€โ•ฏโ”‚
 โ”‚โ•ญโ”€โ”€โ”€โ•ฎโ”‚
 โ•ฐโ”ค c โ”œโ•ฏ
  โ•ฐโ”€โ”€โ”€โ•ฏ

Text:

nested choices = "a" | "b" | "c" ;

Optimization: Ungrouping

If a structure can be ungrouped without changing the meaning, ungroup it.

original fragment:

nested choices = "a" | ( "b" | "c" );

duplicate choices

  โ•ญโ”€โ”€โ”€โ•ฎ
โ” โ”ฌโ”ค a โ”œโ”ฌโ”จ
 โ”‚โ•ฐโ”€โ”€โ”€โ•ฏโ”‚
 โ”‚โ•ญโ”€โ”€โ”€โ•ฎโ”‚
 โ”œโ”ค b โ”œโ”ค
 โ”‚โ•ฐโ”€โ”€โ”€โ•ฏโ”‚
 โ”‚โ•ญโ”€โ”€โ”€โ•ฎโ”‚
 โ•ฐโ”ค c โ”œโ•ฏ
  โ•ฐโ”€โ”€โ”€โ•ฏ

Text:

duplicate choices = "a" | "b" | "c" ;

Optimization: Ungrouping

If a structure can be ungrouped without changing the meaning, ungroup it.

original fragment:

duplicate choices = "a" | ( "b" | "c" | "a" ) | "b";

choice with one or more

โ” โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”จ
 โ”‚ โ•ญโ”€โ”€โ”€โ•ฎ โ”‚
 โ”œโ”€โ”ค a โ”œโ”€โ”ค
 โ”‚ โ•ฐโ”€โ”€โ”€โ•ฏ โ”‚
 โ”‚ โ•ญโ”€โ”€โ”€โ•ฎ โ”‚
 โ•ฐโ”ฌโ”ค b โ”œโ”ฌโ•ฏ
  โ”‚โ•ฐโ”€โ”€โ”€โ•ฏโ”‚
  โ•ฐโ”€โ”€โ†โ”€โ”€โ•ฏ

Text:

choice with one or more = "a" | { "b" } ;

one or more

  โ•ญโ”€โ”€โ”€โ•ฎ
โ” โ”ฌโ”ค a โ”œโ”ฌโ”จ
 โ”‚โ•ฐโ”€โ”€โ”€โ•ฏโ”‚
 โ•ฐโ”€โ”€โ†โ”€โ”€โ•ฏ

Text:

one or more = { "a" }- ;

Optimization: Simplify one-or-more syntax

original fragment:

one or more = "a", { "a" };

one or more with group

   โ•ญโ”€โ”€โ”€โ•ฎ
โ” โ”ฌโ”ฌโ”ค a โ”œโ”ฌโ”ฌโ”จ
 โ”‚โ”‚โ•ฐโ”€โ”€โ”€โ•ฏโ”‚โ”‚
 โ”‚โ”‚โ•ญโ”€โ”€โ”€โ•ฎโ”‚โ”‚
 โ”‚โ•ฐโ”ค b โ”œโ•ฏโ”‚
 โ”‚ โ•ฐโ”€โ”€โ”€โ•ฏ โ”‚
 โ•ฐโ”€โ”€โ”€โ†โ”€โ”€โ”€โ•ฏ

Text:

one or more with group = { "a" | "b" }- ;

one or more with repeater

  โ•ญโ”€โ”€โ”€โ•ฎ     โ•ญโ”€โ”€โ”€โ•ฎ โ•ญโ”€โ”€โ”€โ•ฎ
โ” โ”€โ”ค a โ”œโ”€โ”ฌโ”€โ”€โ”€โ”ค b โ”œโ”€โ”ค c โ”œโ”€โ”€โ”€โ”ฌโ”€โ”จ
  โ•ฐโ”€โ”€โ”€โ•ฏ โ”‚   โ•ฐโ”€โ”€โ”€โ•ฏ โ•ฐโ”€โ”€โ”€โ•ฏ   โ”‚
        โ”‚  โ•ญโ”€โ”€โ”€โ•ฎ โ•ญโ”€โ”€โ”€โ•ฎ    โ”‚
        โ•ฐโ”€โ”€โ”ค e โ”œโ”€โ”ค d โ”œโ”€โ”€โ†โ”€โ•ฏ
           โ•ฐโ”€โ”€โ”€โ•ฏ โ•ฐโ”€โ”€โ”€โ•ฏ

Text:

one or more with repeater = "a" , "b" , "c" , { "d" , "e" , "b" , "c" } ;

optional repeater

 โ•ญโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฎ
 โ”‚  โ•ญโ”€โ”€โ”€โ•ฎ โ•ญโ”€โ”€โ”€โ•ฎ  โ”‚
โ” โ”ดโ”ฌโ”€โ”ค a โ”œโ”€โ”ค b โ”œโ”€โ”ฌโ”ดโ”จ
  โ”‚ โ•ฐโ”€โ”€โ”€โ•ฏ โ•ฐโ”€โ”€โ”€โ•ฏ โ”‚
  โ•ฐโ”€โ”€โ”€โ”€โ”€โ”€โ†โ”€โ”€โ”€โ”€โ”€โ”€โ•ฏ

Text:

optional repeater = { "a" , "b" } ;

Optimization: Remove duplicate optional routes

If a repetation is optional, but also wrap inside an optional, remove the optional

original fragment:

optional repeater = [ { "a", "b" } ];

optional optional

 โ•ญโ”€โ”€โ”€โ”€โ”€โ”€โ†’โ”€โ”€โ”€โ”€โ”€โ”€โ•ฎ
 โ”‚ โ•ญโ”€โ”€โ”€โ•ฎ โ•ญโ”€โ”€โ”€โ•ฎ โ”‚
โ” โ”ดโ”€โ”ค a โ”œโ”€โ”ค b โ”œโ”€โ”ดโ”จ
   โ•ฐโ”€โ”€โ”€โ•ฏ โ•ฐโ”€โ”€โ”€โ•ฏ

Text:

optional optional = [ "a" , "b" ] ;

original fragment:

optional optional = [ [ "a", "b" ] ];

calculation

   โ•ญโ•ดnormal valueโ•ถโ•ฎ          โ•ญโ•ดnumber valueโ•ถโ•ฎ
   โ•Žโ•ญโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฎโ•Ž    โ•ญโ”€โ”€โ”€โ•ฎ โ•Žโ•ญโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฎโ•Ž
โ•Ÿโ”ฌโ”€โ”ผโ”ค fixing ref โ”œโ”ผโ”€โ”ฌโ”€โ”€โ”ค * โ”œโ”€โ”ผโ”ค fixing ref โ”œโ”ผโ”€โ”€โ”ฌโ”€โ”ฌโ•ข
 โ”‚ โ•Žโ•ฐโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฏโ•Ž โ”‚  โ•ฐโ”€โ”€โ”€โ•ฏ โ•Žโ•ฐโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฏโ•Ž  โ”‚ โ”‚
 โ”‚ โ•ฐโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•ฏ โ”‚        โ•ฐโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•ฏ  โ”‚ โ”‚
 โ”‚                  โ”‚  โ•ญโ”€โ”€โ”€โ•ฎ  โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”“ โ”‚ โ”‚
 โ”‚                  โ•ฐโ”€โ”ฌโ”ค + โ”œโ”ฌโ”€โ”จ normal value โ” โ”€โ•ฏ โ”‚
 โ”‚                    โ”‚โ•ฐโ”€โ”€โ”€โ•ฏโ”‚ โ”—โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”›   โ”‚
 โ”‚                    โ”‚โ•ญโ”€โ”€โ”€โ•ฎโ”‚                    โ”‚
 โ”‚                    โ•ฐโ”ค - โ”œโ•ฏ                    โ”‚
 โ”‚                     โ•ฐโ”€โ”€โ”€โ•ฏ                     โ”‚
 โ”‚   โ•ญโ•ดspecial valueโ•ถโ•ฎ                           โ”‚
 โ”‚   โ•Žโ•ญโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฎ โ•Ž โ•ญโ”€โ”€โ”€โ•ฎ โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”“   โ”‚
 โ•ฐโ”€โ”€โ”€โ”ผโ”ค fixing ref โ”œโ”€โ”ผโ”€โ”ค - โ”œโ”€โ”จ special value โ” โ”€โ”€โ”€โ•ฏ
     โ•Žโ•ฐโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฏ โ•Ž โ•ฐโ”€โ”€โ”€โ•ฏ โ”—โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”›
     โ•ฐโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•ฏ

Text:

calculation
  = normal value , "*" , number value
  | normal value , "+" , normal value
  | normal value , "-" , normal value
  | special value , "-" , special value
  ;

normal value

 โ•ญโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฎ
โ” โ”ค fixing ref โ”œโ”จ
 โ•ฐโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฏ

Text:

normal value = "fixing ref" ;

special value

 โ•ญโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฎ
โ” โ”ค fixing ref โ”œโ”จ
 โ•ฐโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฏ

Text:

special value = "fixing ref" ;

number value

 โ•ญโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฎ
โ” โ”ค fixing ref โ”œโ”จ
 โ•ฐโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฏ

Text:

number value = "fixing ref" ;

Mixing comments in

comments

           โ•ญโ•ดcomment in choice with optionalโ•ถโ•ฎ
โ•Ÿโ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ•ข
 โ”‚         โ•Ž      โ”‚       โ•ญโ”€โ”€โ”€โ•ฎ       โ”‚      โ•Ž         โ”‚
 โ”‚         โ•Ž      โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค a โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค      โ•Ž         โ”‚
 โ”‚         โ•Ž      โ”‚       โ•ฐโ”€โ”€โ”€โ•ฏ       โ”‚      โ•Ž         โ”‚
 โ”‚         โ•Ž      โ”‚ โ•ญโ”€โ”€โ”€โ•ฎ   comment   โ”‚      โ•Ž         โ”‚
 โ”‚         โ•Ž      โ•ฐโ”€โ”ค b โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฏ      โ•Ž         โ”‚
 โ”‚         โ•Ž        โ•ฐโ”€โ”€โ”€โ•ฏ                    โ•Ž         โ”‚
 โ”‚         โ•ฐโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•ฏ         โ”‚
 โ”‚          โ•ญโ•ดcomment in one or more beforeโ•ถโ•ฎ          โ”‚
 โ”‚          โ•Ž                    โ•ญโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฎ  โ•Ž          โ”‚
 โ”‚          โ•Ž  โ•ญโ”€โ”€โ”€โ•ฎ   comment   โ”‚ โ•ญโ”€โ”€โ”€โ•ฎ โ”‚  โ•Ž          โ”‚
 โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”ค a โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”ฌโ”ค a โ”œโ”ฌโ”ดโ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
 โ”‚          โ•Ž  โ•ฐโ”€โ”€โ”€โ•ฏ              โ”‚โ•ฐโ”€โ”€โ”€โ•ฏโ”‚   โ•Ž          โ”‚
 โ”‚          โ•Ž                     โ•ฐโ”€โ”€โ†โ”€โ”€โ•ฏ   โ•Ž          โ”‚
 โ”‚          โ•ฐโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•ฏ          โ”‚
 โ”‚          โ•ญโ•ดcomment_in_one_or_more_inโ•ถโ•Œโ•Œโ•Œโ•Œโ•ฎ          โ”‚
 โ”‚          โ•Ž       โ•ญโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฎ โ•Ž          โ”‚
 โ”‚          โ•Ž โ•ญโ”€โ”€โ”€โ•ฎ โ”‚  โ•ญโ”€โ”€โ”€โ•ฎ   comment    โ”‚ โ•Ž          โ”‚
 โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”ค a โ”œโ”€โ”ดโ”ฌโ”€โ”ค a โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”ดโ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
 โ”‚          โ•Ž โ•ฐโ”€โ”€โ”€โ•ฏ  โ”‚ โ•ฐโ”€โ”€โ”€โ•ฏ             โ”‚  โ•Ž          โ”‚
 โ”‚          โ•Ž        โ•ฐโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ†โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฏ  โ•Ž          โ”‚
 โ”‚          โ•ฐโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•ฏ          โ”‚
 โ”‚          โ•ญโ•ดcomment in one or more afterโ•ถโ•ฎ           โ”‚
 โ”‚          โ•Ž      โ•ญโ”€โ”€โ”€โ•ฎ    comment        โ•Ž           โ”‚
 โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”ฌโ”ค a โ”œโ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
 โ”‚          โ•Ž     โ”‚โ•ฐโ”€โ”€โ”€โ•ฏโ”‚                  โ•Ž           โ”‚
 โ”‚          โ•Ž     โ•ฐโ”€โ”€โ†โ”€โ”€โ•ฏ                  โ•Ž           โ”‚
 โ”‚          โ•ฐโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•ฏ           โ”‚
 โ”‚โ•ญโ•ดcomment in one or more with repeaterโ•ถโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•ฎโ”‚
 โ”‚โ•Ž โ•ญโ”€โ”€โ”€โ•ฎ โ•ญโ”€โ”€โ”€โ•ฎ   comment             โ•ญโ”€โ”€โ”€โ•ฎ           โ•Žโ”‚
 โ”œโ”ผโ”€โ”ค a โ”œโ”€โ”ค b โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค c โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”ผโ”ค
 โ”‚โ•Ž โ•ฐโ”€โ”€โ”€โ•ฏ โ•ฐโ”€โ”€โ”€โ•ฏ             โ”‚         โ•ฐโ”€โ”€โ”€โ•ฏ         โ”‚ โ•Žโ”‚
 โ”‚โ•Ž                         โ”‚  โ•ญโ”€โ”€โ”€โ•ฎ โ•ญโ”€โ”€โ”€โ•ฎ โ•ญโ”€โ”€โ”€โ•ฎ    โ”‚ โ•Žโ”‚
 โ”‚โ•Ž                         โ•ฐโ”€โ”€โ”ค b โ”œโ”€โ”ค e โ”œโ”€โ”ค d โ”œโ”€โ”€โ†โ”€โ•ฏ โ•Žโ”‚
 โ”‚โ•Ž                            โ•ฐโ”€โ”€โ”€โ•ฏ โ•ฐโ”€โ”€โ”€โ•ฏ โ•ฐโ”€โ”€โ”€โ•ฏ      โ•Žโ”‚
 โ”‚โ•ฐโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•ฏโ”‚
 โ”‚โ•ญโ•ดcomment in nested choices with multiple optionalsโ•ถโ•ฎโ”‚
 โ”œโ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”ค
 โ”‚โ•Ž       โ”‚               โ•ญโ”€โ”€โ”€โ•ฎ               โ”‚       โ•Žโ”‚
 โ”‚โ•Ž       โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค a โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค       โ•Žโ”‚
 โ”‚โ•Ž       โ”‚               โ•ฐโ”€โ”€โ”€โ•ฏ               โ”‚       โ•Žโ”‚
 โ”‚โ•Ž       โ”‚                         comment   โ”‚       โ•Žโ”‚
 โ”‚โ•Ž       โ”œโ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค       โ•Žโ”‚
 โ”‚โ•Ž       โ”‚ โ”‚ โ•ญโ”€โ”€โ”€โ•ฎ   comment   โ”‚             โ”‚       โ•Žโ”‚
 โ”‚โ•Ž       โ”‚ โ”œโ”€โ”ค b โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค             โ”‚       โ•Žโ”‚
 โ”‚โ•Ž       โ”‚ โ”‚ โ•ฐโ”€โ”€โ”€โ•ฏ             โ”‚             โ”‚       โ•Žโ”‚
 โ”‚โ•Ž       โ”‚ โ”‚       โ•ญโ”€โ”€โ”€โ•ฎ       โ”‚             โ”‚       โ•Žโ”‚
 โ”‚โ•Ž       โ”‚ โ•ฐโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค c โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฏ             โ”‚       โ•Žโ”‚
 โ”‚โ•Ž       โ”‚         โ•ฐโ”€โ”€โ”€โ•ฏ                     โ”‚       โ•Žโ”‚
 โ”‚โ•Ž       โ”‚               โ•ญโ”€โ”€โ”€โ•ฎ               โ”‚       โ•Žโ”‚
 โ”‚โ•Ž       โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค d โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค       โ•Žโ”‚
 โ”‚โ•Ž       โ”‚               โ•ฐโ”€โ”€โ”€โ•ฏ               โ”‚       โ•Žโ”‚
 โ”‚โ•Ž       โ”‚               โ•ญโ”€โ”€โ”€โ•ฎ               โ”‚       โ•Žโ”‚
 โ”‚โ•Ž       โ•ฐโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค e โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฏ       โ•Žโ”‚
 โ”‚โ•Ž                       โ•ฐโ”€โ”€โ”€โ•ฏ                       โ•Žโ”‚
 โ”‚โ•ฐโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•ฏโ”‚
 โ”‚   โ•ญโ•ดcomment in one or more with repeater afterโ•ถโ•ฎ    โ”‚
 โ”‚   โ•Ž   โ•ญโ”€โ”€โ”€โ•ฎ     โ•ญโ”€โ”€โ”€โ•ฎ โ•ญโ”€โ”€โ”€โ•ฎ       comment      โ•Ž    โ”‚
 โ”œโ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”ค a โ”œโ”€โ”ฌโ”€โ”€โ”€โ”ค b โ”œโ”€โ”ค c โ”œโ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”ค
 โ”‚   โ•Ž   โ•ฐโ”€โ”€โ”€โ•ฏ โ”‚   โ•ฐโ”€โ”€โ”€โ•ฏ โ•ฐโ”€โ”€โ”€โ•ฏ   โ”‚                โ•Ž    โ”‚
 โ”‚   โ•Ž         โ”‚  โ•ญโ”€โ”€โ”€โ•ฎ โ•ญโ”€โ”€โ”€โ•ฎ    โ”‚                โ•Ž    โ”‚
 โ”‚   โ•Ž         โ•ฐโ”€โ”€โ”ค e โ”œโ”€โ”ค d โ”œโ”€โ”€โ†โ”€โ•ฏ                โ•Ž    โ”‚
 โ”‚   โ•Ž            โ•ฐโ”€โ”€โ”€โ•ฏ โ•ฐโ”€โ”€โ”€โ•ฏ                     โ•Ž    โ”‚
 โ”‚   โ•ฐโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•ฏ    โ”‚
 โ”‚        โ•ญโ•ดcomment before optionalโ•ถโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•ฎ        โ”‚
 โ”‚        โ•Ž โ•ญโ”€โ”€โ”€โ•ฎ           comment           โ•Ž        โ”‚
 โ•ฐโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”ค a โ”œโ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฏ
          โ•Ž โ•ฐโ”€โ”€โ”€โ•ฏ โ”‚ โ•ญโ”€โ”€โ”€โ•ฎ โ•ญโ”€โ”€โ”€โ•ฎ โ•ญโ”€โ”€โ”€โ•ฎ โ•ญโ”€โ”€โ”€โ•ฎ โ”‚ โ•Ž
          โ•Ž       โ•ฐโ”€โ”ค d โ”œโ”€โ”ค e โ”œโ”€โ”ค b โ”œโ”€โ”ค c โ”œโ”€โ•ฏ โ•Ž
          โ•Ž         โ•ฐโ”€โ”€โ”€โ•ฏ โ•ฐโ”€โ”€โ”€โ•ฏ โ•ฐโ”€โ”€โ”€โ•ฏ โ•ฐโ”€โ”€โ”€โ•ฏ   โ•Ž
          โ•ฐโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•ฏ

Text:

comments
  = comment in choice with optional
  | comment in one or more before
  | comment_in_one_or_more_in
  | comment in one or more after
  | comment in one or more with repeater
  | comment in nested choices with multiple optionals
  | comment in one or more with repeater after
  | comment before optional
  ;

comment in choice with optional

โ” โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”จ
 โ”‚       โ•ญโ”€โ”€โ”€โ•ฎ       โ”‚
 โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค a โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
 โ”‚       โ•ฐโ”€โ”€โ”€โ•ฏ       โ”‚
 โ”‚ โ•ญโ”€โ”€โ”€โ•ฎ   comment   โ”‚
 โ•ฐโ”€โ”ค b โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฏ
   โ•ฐโ”€โ”€โ”€โ•ฏ

Text:

comment in choice with optional = [ "a" | "b" (* comment *) ] ;

comment in one or more before

                    โ•ญโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฎ
  โ•ญโ”€โ”€โ”€โ•ฎ   comment   โ”‚ โ•ญโ”€โ”€โ”€โ•ฎ โ”‚
โ” โ”€โ”ค a โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”ฌโ”ค a โ”œโ”ฌโ”ดโ”€โ”จ
  โ•ฐโ”€โ”€โ”€โ•ฏ              โ”‚โ•ฐโ”€โ”€โ”€โ•ฏโ”‚
                     โ•ฐโ”€โ”€โ†โ”€โ”€โ•ฏ

Text:

comment in one or more before = "a" , (* comment *) , { "a" } ;

comment_in_one_or_more_in

        โ•ญโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฎ
  โ•ญโ”€โ”€โ”€โ•ฎ โ”‚  โ•ญโ”€โ”€โ”€โ•ฎ   comment    โ”‚
โ” โ”€โ”ค a โ”œโ”€โ”ดโ”ฌโ”€โ”ค a โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”ดโ”€โ”จ
  โ•ฐโ”€โ”€โ”€โ•ฏ  โ”‚ โ•ฐโ”€โ”€โ”€โ•ฏ             โ”‚
         โ•ฐโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ†โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฏ

Text:

comment_in_one_or_more_in = "a" , { "a" (* comment *) } ;

comment in one or more after

   โ•ญโ”€โ”€โ”€โ•ฎ    comment
โ” โ”€โ”ฌโ”ค a โ”œโ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”จ
  โ”‚โ•ฐโ”€โ”€โ”€โ•ฏโ”‚
  โ•ฐโ”€โ”€โ†โ”€โ”€โ•ฏ

Text:

comment in one or more after = { "a" }- ,
  (* comment *) ;

comment in one or more with repeater

  โ•ญโ”€โ”€โ”€โ•ฎ โ•ญโ”€โ”€โ”€โ•ฎ   comment             โ•ญโ”€โ”€โ”€โ•ฎ
โ” โ”€โ”ค a โ”œโ”€โ”ค b โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค c โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”จ
  โ•ฐโ”€โ”€โ”€โ•ฏ โ•ฐโ”€โ”€โ”€โ•ฏ             โ”‚         โ•ฐโ”€โ”€โ”€โ•ฏ         โ”‚
                          โ”‚  โ•ญโ”€โ”€โ”€โ•ฎ โ•ญโ”€โ”€โ”€โ•ฎ โ•ญโ”€โ”€โ”€โ•ฎ    โ”‚
                          โ•ฐโ”€โ”€โ”ค b โ”œโ”€โ”ค e โ”œโ”€โ”ค d โ”œโ”€โ”€โ†โ”€โ•ฏ
                             โ•ฐโ”€โ”€โ”€โ•ฏ โ•ฐโ”€โ”€โ”€โ•ฏ โ•ฐโ”€โ”€โ”€โ•ฏ

Text:

comment in one or more with repeater = "a" , "b" ,
  (* comment *) , "c" , { "d" , "e" , "b" , "c" } ;

comment before optional

  โ•ญโ”€โ”€โ”€โ•ฎ           comment
โ” โ”€โ”ค a โ”œโ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”จ
  โ•ฐโ”€โ”€โ”€โ•ฏ โ”‚ โ•ญโ”€โ”€โ”€โ•ฎ โ•ญโ”€โ”€โ”€โ•ฎ โ•ญโ”€โ”€โ”€โ•ฎ โ•ญโ”€โ”€โ”€โ•ฎ โ”‚
        โ•ฐโ”€โ”ค d โ”œโ”€โ”ค e โ”œโ”€โ”ค b โ”œโ”€โ”ค c โ”œโ”€โ•ฏ
          โ•ฐโ”€โ”€โ”€โ•ฏ โ•ฐโ”€โ”€โ”€โ•ฏ โ•ฐโ”€โ”€โ”€โ•ฏ โ•ฐโ”€โ”€โ”€โ•ฏ

Text:

comment before optional = "a" , (* comment *) [ "d" , "e" , "b" , "c" ] ;

comment in nested choices with multiple optionals

โ” โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”จ
 โ”‚               โ•ญโ”€โ”€โ”€โ•ฎ               โ”‚
 โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค a โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
 โ”‚               โ•ฐโ”€โ”€โ”€โ•ฏ               โ”‚
 โ”‚                         comment   โ”‚
 โ”œโ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
 โ”‚ โ”‚ โ•ญโ”€โ”€โ”€โ•ฎ   comment   โ”‚             โ”‚
 โ”‚ โ”œโ”€โ”ค b โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค             โ”‚
 โ”‚ โ”‚ โ•ฐโ”€โ”€โ”€โ•ฏ             โ”‚             โ”‚
 โ”‚ โ”‚       โ•ญโ”€โ”€โ”€โ•ฎ       โ”‚             โ”‚
 โ”‚ โ•ฐโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค c โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฏ             โ”‚
 โ”‚         โ•ฐโ”€โ”€โ”€โ•ฏ                     โ”‚
 โ”‚               โ•ญโ”€โ”€โ”€โ•ฎ               โ”‚
 โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค d โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
 โ”‚               โ•ฐโ”€โ”€โ”€โ•ฏ               โ”‚
 โ”‚               โ•ญโ”€โ”€โ”€โ•ฎ               โ”‚
 โ•ฐโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค e โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฏ
                 โ•ฐโ”€โ”€โ”€โ•ฏ

Text:

comment in nested choices with multiple optionals =
  [ "a"
  | [ "b" (* comment *) | "c" ] (* comment *)
  | "d"
  | "e"
  ] ;

comment in one or more with repeater after

  โ•ญโ”€โ”€โ”€โ•ฎ     โ•ญโ”€โ”€โ”€โ•ฎ โ•ญโ”€โ”€โ”€โ•ฎ       comment
โ” โ”€โ”ค a โ”œโ”€โ”ฌโ”€โ”€โ”€โ”ค b โ”œโ”€โ”ค c โ”œโ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”จ
  โ•ฐโ”€โ”€โ”€โ•ฏ โ”‚   โ•ฐโ”€โ”€โ”€โ•ฏ โ•ฐโ”€โ”€โ”€โ•ฏ   โ”‚
        โ”‚  โ•ญโ”€โ”€โ”€โ•ฎ โ•ญโ”€โ”€โ”€โ•ฎ    โ”‚
        โ•ฐโ”€โ”€โ”ค e โ”œโ”€โ”ค d โ”œโ”€โ”€โ†โ”€โ•ฏ
           โ•ฐโ”€โ”€โ”€โ•ฏ โ•ฐโ”€โ”€โ”€โ•ฏ

Text:

comment in one or more with repeater after = "a" ,
  "b" , "c" , { "d" , "e" , "b" , "c" } , (* comment *) ;

html dangerous content

html

  โ•ญโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฎ   <h1> can be everywhere </h1>
โ” โ”€โ”ค <h1>Danger & Risks</h1> โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”จ
  โ•ฐโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฏ

Text:

html = "<h1>Danger & Risks</h1>" (* <h1> can be everywhere </h1> *) ;

simple syntax

        โ•ญโ•ดreferenceโ•ถโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•ฎ
        โ•Ž                           โ•ญโ•ดbig partsโ•ถโ•ฎ โ•Ž
  โ•ญโ”€โ”€โ”€โ•ฎ โ•Ž โ•ญโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฎ โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”“ โ•Ž โ•ญโ”€โ”€โ”€โ”€โ”€โ”€โ•ฎ  โ•Ž โ•Ž โ•ญโ”€โ”€โ”€โ•ฎ
โ•Ÿโ”€โ”ค a โ”œโ”€โ”ผโ”€โ”ค using โ”œโ”€โ”จ small parts โ” โ”€โ”ผโ”ฌโ”ค item โ”œโ”ฌโ”€โ”ผโ”€โ”ผโ”€โ”ค b โ”œโ”€โ•ข
  โ•ฐโ”€โ”€โ”€โ•ฏ โ•Ž โ•ฐโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฏ โ”—โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”› โ•Žโ”‚โ•ฐโ”€โ”€โ”€โ”€โ”€โ”€โ•ฏโ”‚ โ•Ž โ•Ž โ•ฐโ”€โ”€โ”€โ•ฏ
        โ•Ž                           โ•Žโ•ฐโ”€โ”€โ”€โ”€โ†โ”€โ”€โ”€โ•ฏ โ•Ž โ•Ž
        โ•Ž                           โ•ฐโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•ฏ โ•Ž
        โ•ฐโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•Œโ•ฏ

Text:

simple syntax = "a" , reference , "b" ;

reference

  โ•ญโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฎ โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”“ โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”“
โ•Ÿโ”€โ”ค using โ”œโ”€โ”จ small parts โ” โ”€โ”จ big parts โ” โ”€โ•ข
  โ•ฐโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฏ โ”—โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”› โ”—โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”›

Text:

reference = "using" , small parts , big parts ;

small parts

  โ•ญโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฎ
โ” โ”ฌโ”ค terminal โ”œโ”ฌโ”จ
 โ”‚โ•ฐโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฏโ”‚
 โ”‚ โ•ญโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฎ  โ”‚
 โ•ฐโ”€โ”ค other โ”œโ”€โ”€โ•ฏ
   โ•ฐโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฏ

Text:

small parts = "terminal" | "other" ;

big parts

  โ•ญโ”€โ”€โ”€โ”€โ”€โ”€โ•ฎ
โ” โ”ฌโ”ค item โ”œโ”ฌโ”จ
 โ”‚โ•ฐโ”€โ”€โ”€โ”€โ”€โ”€โ•ฏโ”‚
 โ•ฐโ”€โ”€โ”€โ”€โ†โ”€โ”€โ”€โ•ฏ

Text:

big parts = { "item" }- ;

Altenative ISO characters

definition main characters

              โ•ญโ”€โ”€โ”€โ”€โ”€โ”€โ•ฎ
โ” โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค item โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”จ
 โ”‚            โ•ฐโ”€โ”€โ”€โ”€โ”€โ”€โ•ฏ             โ”‚
 โ”‚            โ•ญโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฎ            โ”‚
 โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค item2 โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
 โ”‚            โ•ฐโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฏ            โ”‚
 โ”‚ โ•ญโ”€โ”€โ”€โ”€โ”€โ†’โ”€โ”€โ”€โ”€โ”€โ”€โ•ฎ โ•ญโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฎ โ”‚
 โ”‚ โ”‚โ•ญโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฎโ”‚ โ”‚ โ•ญโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฎ โ”‚ โ”‚
 โ•ฐโ”€โ”ดโ”ค optional โ”œโ”ดโ”€โ”ดโ”ฌโ”ค repeater โ”œโ”ฌโ”ดโ”€โ•ฏ
    โ•ฐโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฏ   โ”‚โ•ฐโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฏโ”‚
                   โ•ฐโ”€โ”€โ”€โ”€โ”€โ”€โ†โ”€โ”€โ”€โ”€โ”€โ•ฏ

Text:

definition main characters
  = "item"
  | "item2"
  | [ "optional" ] , { "repeater" }
  ;

Original fragment:

definition main characters = "item" | "item2" | ["optional"], { "repeater" };

alternative main characters

              โ•ญโ”€โ”€โ”€โ”€โ”€โ”€โ•ฎ
โ” โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค item โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”จ
 โ”‚            โ•ฐโ”€โ”€โ”€โ”€โ”€โ”€โ•ฏ             โ”‚
 โ”‚            โ•ญโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฎ            โ”‚
 โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค item2 โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
 โ”‚            โ•ฐโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฏ            โ”‚
 โ”‚ โ•ญโ”€โ”€โ”€โ”€โ”€โ†’โ”€โ”€โ”€โ”€โ”€โ”€โ•ฎ โ•ญโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฎ โ”‚
 โ”‚ โ”‚โ•ญโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฎโ”‚ โ”‚ โ•ญโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฎ โ”‚ โ”‚
 โ•ฐโ”€โ”ดโ”ค optional โ”œโ”ดโ”€โ”ดโ”ฌโ”ค repeater โ”œโ”ฌโ”ดโ”€โ•ฏ
    โ•ฐโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฏ   โ”‚โ•ฐโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฏโ”‚
                   โ•ฐโ”€โ”€โ”€โ”€โ”€โ”€โ†โ”€โ”€โ”€โ”€โ”€โ•ฏ

Text:

alternative main characters
  = "item"
  | "item2"
  | [ "optional" ] , { "repeater" }
  ;

Original fragment:

alternative main characters = "item" / "item2" ! (/ "optional" /), (:  "repeater" :).

lowercase letter

 โ•ญโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฎ
 โ”‚  โ•ญโ”€โ”€โ”€โ•ฎ    โ”‚  โ•ญโ”€โ”€โ”€โ•ฎ   โ”‚โ•ญโ”€โ”€โ”€โ•ฎ
โ” โ”ดโ”ฌโ”€โ”ค a โ”œโ”€โ”€โ”ฌโ•ฎโ•ฐโ”ฌโ”€โ”ค n โ”œโ”€โ”ฌโ•ฎโ•ฐโ”ค z โ”œโ”ฌโ”จ
  โ”‚ โ•ฐโ”€โ”€โ”€โ•ฏ  โ”‚โ”‚ โ”‚ โ•ฐโ”€โ”€โ”€โ•ฏ โ”‚โ”‚ โ•ฐโ”€โ”€โ”€โ•ฏโ”‚
  โ”‚ โ•ญโ”€โ”€โ”€โ•ฎ  โ”‚โ”‚ โ”‚ โ•ญโ”€โ”€โ”€โ•ฎ โ”‚โ”‚      โ”‚
  โ”œโ”€โ”ค b โ”œโ”€โ”€โ”คโ”‚ โ”œโ”€โ”ค o โ”œโ”€โ”คโ”‚      โ”‚
  โ”‚ โ•ฐโ”€โ”€โ”€โ•ฏ  โ”‚โ”‚ โ”‚ โ•ฐโ”€โ”€โ”€โ•ฏ โ”‚โ”‚      โ”‚
  โ”‚ โ•ญโ”€โ”€โ”€โ•ฎ  โ”‚โ”‚ โ”‚โ•ญโ”€โ”€โ”€โ”€โ”€โ•ฎโ”‚โ”‚      โ”‚
  โ”œโ”€โ”ค c โ”œโ”€โ”€โ”คโ”‚ โ”œโ”ค pqr โ”œโ”คโ”‚      โ”‚
  โ”‚ โ•ฐโ”€โ”€โ”€โ•ฏ  โ”‚โ”‚ โ”‚โ•ฐโ”€โ”€โ”€โ”€โ”€โ•ฏโ”‚โ”‚      โ”‚
  โ”‚ โ•ญโ”€โ”€โ”€โ•ฎ  โ”‚โ”‚ โ”‚ โ•ญโ”€โ”€โ”€โ•ฎ โ”‚โ”‚      โ”‚
  โ”œโ”€โ”ค d โ”œโ”€โ”€โ”คโ”‚ โ”œโ”€โ”ค s โ”œโ”€โ”คโ”‚      โ”‚
  โ”‚ โ•ฐโ”€โ”€โ”€โ•ฏ  โ”‚โ”‚ โ”‚ โ•ฐโ”€โ”€โ”€โ•ฏ โ”‚โ”‚      โ”‚
  โ”‚ โ•ญโ”€โ”€โ”€โ•ฎ  โ”‚โ”‚ โ”‚ โ•ญโ”€โ”€โ”€โ•ฎ โ”‚โ”‚      โ”‚
  โ”œโ”€โ”ค e โ”œโ”€โ”€โ”คโ”‚ โ”œโ”€โ”ค t โ”œโ”€โ”คโ”‚      โ”‚
  โ”‚ โ•ฐโ”€โ”€โ”€โ•ฏ  โ”‚โ”‚ โ”‚ โ•ฐโ”€โ”€โ”€โ•ฏ โ”‚โ”‚      โ”‚
  โ”‚ โ•ญโ”€โ”€โ”€โ•ฎ  โ”‚โ”‚ โ”‚ โ•ญโ”€โ”€โ”€โ•ฎ โ”‚โ”‚      โ”‚
  โ”œโ”€โ”ค f โ”œโ”€โ”€โ”คโ”‚ โ”œโ”€โ”ค u โ”œโ”€โ”คโ”‚      โ”‚
  โ”‚ โ•ฐโ”€โ”€โ”€โ•ฏ  โ”‚โ”‚ โ”‚ โ•ฐโ”€โ”€โ”€โ•ฏ โ”‚โ”‚      โ”‚
  โ”‚โ•ญโ”€โ”€โ”€โ”€โ”€โ”€โ•ฎโ”‚โ”‚ โ”‚ โ•ญโ”€โ”€โ”€โ•ฎ โ”‚โ”‚      โ”‚
  โ”œโ”ค ghij โ”œโ”คโ”‚ โ”œโ”€โ”ค v โ”œโ”€โ”คโ”‚      โ”‚
  โ”‚โ•ฐโ”€โ”€โ”€โ”€โ”€โ”€โ•ฏโ”‚โ”‚ โ”‚ โ•ฐโ”€โ”€โ”€โ•ฏ โ”‚โ”‚      โ”‚
  โ”‚ โ•ญโ”€โ”€โ”€โ•ฎ  โ”‚โ”‚ โ”‚ โ•ญโ”€โ”€โ”€โ•ฎ โ”‚โ”‚      โ”‚
  โ”œโ”€โ”ค k โ”œโ”€โ”€โ”คโ”‚ โ”œโ”€โ”ค w โ”œโ”€โ”คโ”‚      โ”‚
  โ”‚ โ•ฐโ”€โ”€โ”€โ•ฏ  โ”‚โ”‚ โ”‚ โ•ฐโ”€โ”€โ”€โ•ฏ โ”‚โ”‚      โ”‚
  โ”‚ โ•ญโ”€โ”€โ”€โ•ฎ  โ”‚โ”‚ โ”‚ โ•ญโ”€โ”€โ”€โ•ฎ โ”‚โ”‚      โ”‚
  โ”œโ”€โ”ค l โ”œโ”€โ”€โ”คโ”‚ โ”œโ”€โ”ค x โ”œโ”€โ”คโ”‚      โ”‚
  โ”‚ โ•ฐโ”€โ”€โ”€โ•ฏ  โ”‚โ”‚ โ”‚ โ•ฐโ”€โ”€โ”€โ•ฏ โ”‚โ”‚      โ”‚
  โ”‚ โ•ญโ”€โ”€โ”€โ•ฎ  โ”‚โ”‚ โ”‚ โ•ญโ”€โ”€โ”€โ•ฎ โ”‚โ”‚      โ”‚
  โ•ฐโ”€โ”ค m โ”œโ”€โ”€โ•ฏโ”‚ โ•ฐโ”€โ”ค y โ”œโ”€โ•ฏโ”‚      โ”‚
    โ•ฐโ”€โ”€โ”€โ•ฏ   โ”‚   โ•ฐโ”€โ”€โ”€โ•ฏ  โ”‚      โ”‚
            โ•ฐโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ•ฏ

Text:

lowercase letter
  = "a" | "b"    | "c"   | "d" | "e"
  | "f" | "ghij" | "k"   | "l" | "m"
  | "n" | "o"    | "pqr" | "s" | "t"
  | "u" | "v"    | "w"   | "x" | "y"
  | "z"
  ;