Сообщение Re[2]: Страшная правда о lex и yacc от 20.07.2020 4:00
Изменено 20.07.2020 5:08 Эйнсток Файр
Re[2]: Страшная правда о lex и yacc
AG>объяснили, зачем.
У них в первом же предложении:
но это не бросается в глаза.
Дальше они уводят дискуссию в сторону, призывая
—
Они не дают способа формального описания разделения двух грамматик.
Что если нижная грамматика — это грамматика препроцессора? С директивами #include ?
Или ладно, include можно ещё обработать регулярными выражениями, если не считать его
ключевым словом, отделённым от # пробелами.
А вот уже́ с вложенными директивами ifdef endif так не получится, там
потребуется вторая контекстно-свободная грамматика.
И тогда получается, что есть два уровня парсинга, которые оба описываются КС-грамматиками. Это значит что аргумент про "chomsky hierarchy" — фуфло.
Аргумент про бэктрекинг вообще смешон. Потому что он может быть не нужен если использовать КС-парсеры без необходимости бэктрекинга.
Главная причина — именно в пробелах.
Но препроцессор и компилятор — не единственная пара КС-языков в одном исходнике.
Может быть например Embedded SQL — это третья КС-грамматика внутри.
И вот неужели никто не попробовал описать единый подход к комбинированию и разделению таких грамматик?
Имея три разных грамматики, как их скомбинировать в одну?
А имея одну, как разделить на несколько?
Можно ли таким образом, например, реализовать поддежку template-ов?
У них в первом же предложении:
strings called tokens, separated by whitespace
но это не бросается в глаза.
Дальше они уводят дискуссию в сторону, призывая
—
—the "Chomsky Hierarchy"
Всё как обычно. Просто эталонный образец информационной пропаганды для сокрытия заговора.the need for backtracking
Они не дают способа формального описания разделения двух грамматик.
Что если нижная грамматика — это грамматика препроцессора? С директивами #include ?
Или ладно, include можно ещё обработать регулярными выражениями, если не считать его
ключевым словом, отделённым от # пробелами.
А вот уже́ с вложенными директивами ifdef endif так не получится, там
потребуется вторая контекстно-свободная грамматика.
И тогда получается, что есть два уровня парсинга, которые оба описываются КС-грамматиками. Это значит что аргумент про "chomsky hierarchy" — фуфло.
Аргумент про бэктрекинг вообще смешон. Потому что он может быть не нужен если использовать КС-парсеры без необходимости бэктрекинга.
Главная причина — именно в пробелах.
Но препроцессор и компилятор — не единственная пара КС-языков в одном исходнике.
Может быть например Embedded SQL — это третья КС-грамматика внутри.
И вот неужели никто не попробовал описать единый подход к комбинированию и разделению таких грамматик?
Имея три разных грамматики, как их скомбинировать в одну?
А имея одну, как разделить на несколько?
Можно ли таким образом, например, реализовать поддежку template-ов?
Re[2]: Страшная правда о lex и yacc
AG>объяснили, зачем.
У них в первом же предложении:
но это не бросается в глаза.
Дальше они уводят дискуссию в сторону, призывая
—
Они не дают способа формального описания разделения двух грамматик.
Что если нижная грамматика — это грамматика препроцессора? С директивами #include ?
Или ладно, include можно ещё обработать регулярными выражениями, если не считать его
ключевым словом, отделённым от # пробелами.
А вот уже́ с вложенными директивами ifdef endif так не получится, там
потребуется вторая контекстно-свободная грамматика.
И тогда получается, что есть два уровня парсинга, которые оба описываются КС-грамматиками. Это значит что аргумент про "chomsky hierarchy" — фуфло.
Аргумент про бэктрекинг вообще смешон. Потому что он может быть не нужен если использовать КС-парсеры без необходимости бэктрекинга.
Главная причина — именно в пробелах.
Но препроцессор и компилятор — не единственная пара КС-языков в одном исходнике.
Может быть например Embedded SQL — это третья КС-грамматика внутри.
И вот неужели никто не попробовал описать единый подход к комбинированию и разделению таких грамматик?
Имея три разных грамматики, как их скомбинировать в одну?
А имея одну, как разделить на несколько?
Чтобы таким образом, например, реализовать поддежку template-ов.
Как при разделении грамматики разделяются описания действий? (semantic actions)?
У них в первом же предложении:
strings called tokens, separated by whitespace
но это не бросается в глаза.
Дальше они уводят дискуссию в сторону, призывая
—
—the "Chomsky Hierarchy"
Всё как обычно. Просто эталонный образец информационной пропаганды для сокрытия заговора.the need for backtracking
Они не дают способа формального описания разделения двух грамматик.
Что если нижная грамматика — это грамматика препроцессора? С директивами #include ?
Или ладно, include можно ещё обработать регулярными выражениями, если не считать его
ключевым словом, отделённым от # пробелами.
А вот уже́ с вложенными директивами ifdef endif так не получится, там
потребуется вторая контекстно-свободная грамматика.
И тогда получается, что есть два уровня парсинга, которые оба описываются КС-грамматиками. Это значит что аргумент про "chomsky hierarchy" — фуфло.
Аргумент про бэктрекинг вообще смешон. Потому что он может быть не нужен если использовать КС-парсеры без необходимости бэктрекинга.
Главная причина — именно в пробелах.
Но препроцессор и компилятор — не единственная пара КС-языков в одном исходнике.
Может быть например Embedded SQL — это третья КС-грамматика внутри.
И вот неужели никто не попробовал описать единый подход к комбинированию и разделению таких грамматик?
Имея три разных грамматики, как их скомбинировать в одну?
А имея одну, как разделить на несколько?
Чтобы таким образом, например, реализовать поддежку template-ов.
Как при разделении грамматики разделяются описания действий? (semantic actions)?