Существует ли расширение железнодорожных схем для регистрации исключений? - PullRequest
5 голосов
/ 02 февраля 2011

Железнодорожные диаграммы - это популярный метод визуализации контекстно-свободных грамматик, и вы можете сопоставить форму Бэкуса-Наура с этими диаграммами.Но некоторые варианты BNF , например W3C-BNF , допускают исключения (поскольку языки без контекста не закрываются при различиях, эти исключения должны быть регулярными).Я хотел бы визуализировать грамматику с исключениями в диаграмме железной дороги.Должен ли я придумать собственное расширение для графической нотации или кто-то уже экспериментировал с этим?

Вот пример правила с исключением (да, вы также можете выразить эту конкретную грамматику без исключения, но это неточка):

comment := "<!--" (string - "--") "-->"

Исключением может быть любая обычная грамматика.Я думал о добавлении исключения, связанного с нетерминальными символами каким-то особым типом стрелки или линии (здесь обозначено восклицательными знаками):

[<] → [!] → [-] → [-] → (string) → [-] → [-] → [>]
                          !
                          ! → [-] → [-] → ↯

PS: Грамматика была неправильнойдолжно быть

comment := "<!--" (string - (string "--" string | string "-")) "-->"

Может быть, неинтуитивное использование отрицания является одной из причин, почему оно мало используется в формальных грамматиках?

1 Ответ

4 голосов
/ 09 февраля 2011

При написании генератора диаграмм железных дорог для грамматик W3C недавно я некоторое время думал о том, как это представить, но не смог найти решение, которое меня порадовало.Также не нашел примеров для подражания.

Это не только оператор разности множеств, для которого нет графического эквивалента в обычных железнодорожных схемах.Нотация для кодовых точек, диапазонов и дополнений также не подходит.

В конце я воздержался от графического расширения модели.Я нарисовал клеммную коробку для грамматического фрагмента, который не имеет железнодорожного эквивалента в исходной записи.Чтобы отличить это от буквальных блоков, оно выделено курсивом.Вот пример из рекомендации XML:

XML comment railroad diagram

Производство EBNF было:

Comment ::= '<!--' ((Char - '-') | ('-' (Char - '-')))* '-->'

Редактировать :

Следуя предложению Якоба о другой форме, неразрешенные выражения EBNF теперь отображаются в шестиугольнике:

enter image description here

...