Различие, сделанное статьей из Википедии, выглядит для меня так, будто оно раскалывает волосы.«BNF / EBNF» давно означало написание правил грамматики примерно в следующей форме:
nonterminal = right_hand_side end_rule_marker
Как и в случае других глупых различий в языке («{» в C, начинаются с Pascal, endif против fi), вы можетеполучить совершенно другой, но идентичный смысл, выбрав другой синтаксис для end_rule_marker и то, что вы можете сказать для right_hand_side.
Обычно люди допускают буквальные токены в (на ваш выбор!) кавычках, другие нетерминальные именаи для EBNF, различные операторы «выбора» обычно |или / для альтернатив, * или + для "повторения", [...] или?для необязательных и т. д.
Поскольку люди, разрабатывающие синтаксис языка, играют с синтаксисом, они, кажется, изобретают свои собственные каждый раз, когда записывают некоторые.(Проверьте различные синтаксические формализмы в стандартах языка; ни один из них не одинаков).Да, нам всем было бы лучше, если бы был один стандартный способ написать этот материал.Но мы не делаем этого для C или C ++ или C # (даже Microsoft не могла следовать их собственному стандарту);почему BNF должен отличаться?
Поскольку люди, которые создают генераторы синтаксического анализатора, обычно используют его для анализа собственного синтаксиса, они могут и так легко определить свои собственные для каждого генератора синтаксического анализатора.Я никогда не видел ни одного, который сделал бы именно "WSN" версию в Википедии, и я сомневаюсь, что когда-либо буду на практике.
Имеет ли это большое значение?Ну нет.Что действительно важно, так это мощность генератора синтаксического анализатора за нотацией.Вы должны согнуть большинство грамматик, чтобы соответствовать силе (ну, слабости) генератора синтаксического анализатора;например, для генераторов в стиле LL ваши правила грамматики не могут оставлять рекурсию (WSN позволяет это в соответствии с моим чтением).Люди, создающие генераторы синтаксических анализаторов, также хотят, чтобы им было удобно выражать проблемы, не связанные с синтаксическим анализатором (например, «как строить узлы дерева»), и поэтому они также добавляют дополнительные обозначения для проблем, не связанных с анализом.
Так что на самом деле движет синтаксис генератора синтаксического анализатора - это слабости генератора синтаксического анализатора для обработки произвольных языков, дополнительные плюсы, которые считаются ценными для генератора синтаксического анализатора, и настроение парня, реализующего его.