Re[2]: Страшная правда о lex и yacc
От: Aquilaware  
Дата: 21.07.20 11:06
Оценка:
-
Отредактировано 21.07.2020 11:07 Aquilaware . Предыдущая версия . Еще …
Отредактировано 21.07.2020 11:06 Aquilaware . Предыдущая версия .
Re[2]: Страшная правда о lex и yacc
От: Эйнсток Файр Мухосранск Странный реагент
Дата: 21.07.20 12:16
Оценка:
A> Я помогу вам в ваших измышлениях

Со времён Хомского в парсинге два поколения сменилось.
Почитали бы вы книжку
2010, Laura Kallmeyer, Parsing Beyond Context-Free Grammars
Re[3]: Страшная правда о lex и yacc
От: Aquilaware  
Дата: 21.07.20 14:43
Оценка:
Здравствуйте, Эйнсток Файр, Вы писали:

ЭФ>2010, Laura Kallmeyer, Parsing Beyond Context-Free Grammars


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

Я не знаю какую задачу хотите решить вы, но в плане машинных компиляторов подобные задачи решаются уже следующими слоями, которые авляются надстройками над разобранной, примитивной, дословной семантической моделью программы.

Например, Control Flow Graph строится не граматикой (!), а уже следующим слоем, ответственным за семантическую интерпретацию инструкций. Следующий слой, Data Flow Analysis, строится поверх Control Flow Graph, и т.д.

То же самое относится к выводу типов, декомпозии синтаксического сахара и прочему так наываемому lowering'y — они все идут после грамматики и в основном сделаны на старых добрых pattern matching, if и switch.

Что-то должно идти перед грамматикой — препроцессор макросов, триграфов и пр. Но можно препроцессор сделать и после грамматики — но это тогда уже будет не C препроцессор, а нечто свое.

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

Поэтому, ваш вопрос о lex и yacc требует уточнения в плане класса задач который вы хотите решать. Вы хотите написать свой компилятор? Если да, то в чем была бы его особенность? В том, что он будет использовать одну большую грамматику и вы сможете выиграть в эффективности?
Отредактировано 21.07.2020 15:05 Aquilaware . Предыдущая версия . Еще …
Отредактировано 21.07.2020 15:01 Aquilaware . Предыдущая версия .
Отредактировано 21.07.2020 14:55 Aquilaware . Предыдущая версия .
Re[4]: Страшная правда о lex и yacc
От: Эйнсток Файр Мухосранск Странный реагент
Дата: 21.07.20 18:08
Оценка:
A> ваш вопрос о lex и yacc

У меня не вопрос. У меня изложение момента озарения.
Re: Страшная правда о lex и yacc
От: mrTwister Россия  
Дата: 07.08.20 15:42
Оценка:
Здравствуйте, Эйнсток Файр, Вы писали:

ЭФ>lex — это регулярные автоматы

ЭФ>yacc — это КС-грамматики

ЭФ>но на самом деле всё не так.


ЭФ>Можно обойтись без lex, если токены будут соответствовать буквам.

ЭФ>Но тогда в грамматике придётся писать правила для учёта пробельных символов,
ЭФ>и грамматика станет более "зашумлённой".

А как могло быть иначе, если регулярные грамматики — это частный случай КС грамматик?
лэт ми спик фром май харт
Re[2]: Страшная правда о lex и yacc
От: Эйнсток Файр Мухосранск Странный реагент
Дата: 08.08.20 01:17
Оценка:
T> А как могло быть иначе ... ?

Могло бы разделение пройти по другому принципу. Из КС-грамматики можно было бы вынести МАКСИМАЛЬНО ВОЗМОЖНОЕ количество регулярных частей.
Но нет, остановились далеко не доходя до этой оптимальной точки.

Впрочем, чего я вам это рассказываю, если вы смысла написанного выше не поняли и вещаете свою собственную пропаганду?
Отредактировано 08.08.2020 1:18 Эйнсток Файр . Предыдущая версия . Еще …
Отредактировано 08.08.2020 1:18 Эйнсток Файр . Предыдущая версия .
Re[3]: Страшная правда о lex и yacc
От: mrTwister Россия  
Дата: 09.08.20 07:04
Оценка: -1
Здравствуйте, Эйнсток Файр, Вы писали:


ЭФ>Могло бы разделение пройти по другому принципу. Из КС-грамматики можно было бы вынести МАКСИМАЛЬНО ВОЗМОЖНОЕ количество регулярных частей.

ЭФ>Но нет, остановились далеко не доходя до этой оптимальной точки.

Если из КС грамматики "вынести регулярные части", то это уже будет не КС грамматика.
лэт ми спик фром май харт
Re[4]: Страшная правда о lex и yacc
От: Эйнсток Файр Мухосранск Странный реагент
Дата: 09.08.20 07:05
Оценка:
T>Если из КС грамматики "вынести регулярные части", то это уже будет не КС грамматика.

Ложное утверждение.
Re: Страшная правда о lex и yacc
От: ettcat США  
Дата: 01.09.20 05:11
Оценка:
ЭФ>lex — это регулярные автоматы
ЭФ>yacc — это КС-грамматики

Всё правильно, lex описывает регулярную грамматику, а yacc — КС.

Простейшие парсеры можно и на lex написать, если регулярного языка хватает. Например, вложенных конструкций нет. И наоборот, можно выбросить lex и сразу написать грамматику в yacc, где токенами будут символы.

Так зачем же нам lex, спросите вы? Дело в том что регулярная грамматика компилируется в ДКА, который исполняется на порядки быстрее чем тот же автомат сгенерённый yacc'ом. Поэтому для скорости разбора полезно всё что можно выразить регулярным языком вынести в лексер.
Re[2]: Страшная правда о lex и yacc
От: Эйнсток Файр Мухосранск Странный реагент
Дата: 01.09.20 05:50
Оценка:
Ты ничего не понял из написанного мной, и написал то что ты понял из учебников.
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.