Более наглядный способ задания контекстно-свободных грамматик представляют синтаксические диаграммы: определение нетерминального символа задаётся в виде структурированного ориентированного графа с одним входом и одним выходом, вершинами которого являются нетерминалы и терминалы. Вход и выход обозначаются стрелками следующего вида:
| Вход |
|
| Выход |
|
Структурированность означает, что каждый такой граф строится из подграфов с помощью одного из следующих способов композиции:
| Обязательные элементы |
|
| Необязательный элемент |
|
| Игнорируемый элемент |
|
| Повторение элемента |
|
| Повторение через разделитель |
|
Здесь под элементами подразумеваются либо нетерминалы, либо терминалы, либо такого же вида подграфы. Отличие игнорируемого элемента от необязательного состоит в том, что его отсутствие не влияет на смысл программы. Таким образом, игнорируемые элементы используются только для улучшения читаемости программы и относятся к тому, что называется "синтаксическим сахаром".
Диаграмма допускает цепочку терминалов, встречающихся на пути от входа к выходу с «заходом» в диаграммы, соответствующие встречающимся нетерминалам. Несложно показать, что любая контекстно-свободная грамматика может быть представлена диаграммой.
Пример: диаграмма для
идент::= A..Z [(A..Z | 0..9)*]
имеет вид

Пример: описанная выше грамматика для арифметических выражений задаётся совокупностью диаграмм:
| выр |
|
| прост-выр |
|
| слаг |
|
| множ |
|
Поскольку основное предназначение графического представления – облегчить восприятие информации, размер диаграмм часто выбирают так, чтобы сделать их обозримыми, в частности, чтобы они умещались на одной странице. Слишком большое количество диаграмм и вспомогательных понятий также нежелательно. Так, в нашем примере будет разумно избавиться от понятий слаг и множ, подставив их в диаграмму для прост-выр:







