Железнодорожные диаграммы - это популярный метод визуализации контекстно-свободных грамматик, и вы можете сопоставить форму Бэкуса-Наура с этими диаграммами.Но некоторые варианты BNF , например W3C-BNF , допускают исключения (поскольку языки без контекста не закрываются при различиях, эти исключения должны быть регулярными).Я хотел бы визуализировать грамматику с исключениями в диаграмме железной дороги.Должен ли я придумать собственное расширение для графической нотации или кто-то уже экспериментировал с этим?
Вот пример правила с исключением (да, вы также можете выразить эту конкретную грамматику без исключения, но это неточка):
comment := "<!--" (string - "--") "-->"
Исключением может быть любая обычная грамматика.Я думал о добавлении исключения, связанного с нетерминальными символами каким-то особым типом стрелки или линии (здесь обозначено восклицательными знаками):
[<] → [!] → [-] → [-] → (string) → [-] → [-] → [>]
!
! → [-] → [-] → ↯
PS: Грамматика была неправильнойдолжно быть
comment := "<!--" (string - (string "--" string | string "-")) "-->"
Может быть, неинтуитивное использование отрицания является одной из причин, почему оно мало используется в формальных грамматиках?