сегодня догадался, почему родственные вещи - регулярные выражения и контекстно-свободные грамматики описываются настолько непохожим образом, как регулярное выражение и BNF.
Всё дело в связывании имён: для раскрытия всего потенциала нерегулярной грамматики нужно какие-то термы привязывать к именам. А для типичного применения регулярных выражений этого делать не нужно.
При этом язык ANTLR4 даёт обе возможности, а в стандартной связке lex/yacc почему-то используются два принципиально разных языка.
у вирта был признак: язык называется регулярным, если описывается ровно одним нонтерминалом
Потому что в регулярках нет нетерминалов, да. И надо было придумать хоть какой-то интерфейс
Хмм... а Вам не кажется, что дело всего лишь в том, что регулярные выражения (и грамматики) почти никогда не используют для parsing, в отличие от? И наоборот, CFG никогда (?) не используют для того, для чего используются регулярки?
Меня этот вопрос очень занимал — почему в теории автоматов всё элегантно выстроено в иерархию, а в языках регулярок, кс-грамматик и программ всё дико различается?
Для пополнения "наивности" укажу ещё два очевидных факта: 1. при помощи BNF можно легко описывать и регулярные грамматики; 2. имена нужны чтобы описывать рекурсивные структуры (в виде плоского текста). В регулярных языках рекурсивных структур нет — имена не обязательны. Хотя на практике-то... 😏
Они всё время используются для разбора.
Да, это я подразумевал, но не написал!
А может быть всё дело в том, что нотацию для регулярных выражений придумали лет на восемь раньше, чем BNF?
Тут скорее обычное различие теории и практики: в теории исследуются максимально "обрезанные" объекты, так что места для вариаций не остаётся. Но пользоваться такими объектами обычно весьма затруднительно (только доказывать про них что-то удобно). С точки зрения теории, особой разницы между Java, C#, Python и JavaScript нет, но на практике есть...
Что, регулярные выражения? Именно для parsing? Где/как и, главное, почему? ;)
Дело не в связывание, а в том, что у них разный исторический контекст. Хомский, вроде даже не информатикой занимался
Ага, он лингвист, потом ещё пытался в философию и политику
И в психологии заметно наследил :)
Потому что это разница между теоретиками и практиками.
Обсуждают сегодня