Re[4]: подскажите как парсят мнемоники С
От: VVVa  
Дата: 14.10.22 10:37
Оценка:
Здравствуйте, netch80, Вы писали:

N>Здравствуйте, VVVa, Вы писали:


VVV>>Интересный вопрос возник как Вы так парсите сначала без методов потом с ними?

VVV>>Вы какимто поиском пользуетесь? но в LR вроде его нету...

N>Так а кто говорит конкретно про LR, LL или что-то подобное? Они все как-то не очень соответствуют реалиям таких языков. Иначе бы не писали рукопашные парсеры, а пользовались генераторами вроде YACC или ANTLR.


что-то в обще не понял вы про рекурсивный спуск?
А чем тогда пользуются?
Re[10]: подскажите как парсят мнемоники С
От: VVVa  
Дата: 14.10.22 10:43
Оценка:
Здравствуйте, netch80, Вы писали:


N>С обоими, лексером и парсером.

N>На выходе препроцессора, формально, поток лексем. Но как минимум #line и #pragma требуют поддержки в парсере.

а конец \n препроцессора определяется лексером?

N>Написать — да. Но зачем? Если это реальная заказная работа, то ограничиваться C нет смысла, а если это для себя, то вообще к ним лезть не следует, ибо бесполезный гимор.

не я просто сам решил написать свой говно компилятор попроще (видал самопальные С компиляторы в интернете)

N>Нет. У меня нет даже 10 человеко-лет ненужных, чтобы выкинуть их на повторение уже доступных GCC или Clang в худшем варианте.

А сколько человеко-лет уйдёт чтобы написать С компилятор попроще без оптимизаций ?

Кстати откуда вы столько знаете про компиляторы?
Отредактировано 14.10.2022 10:47 VVVa . Предыдущая версия . Еще …
Отредактировано 14.10.2022 10:45 VVVa . Предыдущая версия .
Re[5]: подскажите как парсят мнемоники С
От: netch80 Украина http://netch80.dreamwidth.org/
Дата: 14.10.22 14:23
Оценка:
Здравствуйте, VVVa, Вы писали:

N>>Так а кто говорит конкретно про LR, LL или что-то подобное? Они все как-то не очень соответствуют реалиям таких языков. Иначе бы не писали рукопашные парсеры, а пользовались генераторами вроде YACC или ANTLR.


VVV>что-то в обще не понял вы про рекурсивный спуск?


Типично да, но могут быть варианты (например, Пратт).

VVV>А чем тогда пользуются?


Если нет причины писать всё самому, то генераторы.
YACC (Bison как основной представитель), ANTLR я описал. Они реализуют LR и LL соответственно.
Есть много средств, которые реализуют PEG (его можно условно приравнять к LL(∞)), сейчас это одно из самых популярных.
Ну и так далее.

А вот с учётом реального синтаксиса того же C++ никакой генератор такое не потянет — как уже писал, там местами просто разбор неоднозначный, пока не будет вычислен тип элемента за конкретным словом. Поэтому в компиляторе реально есть интерпретатор части самого C++ и языка его шаблонов, после которых уже можно говорить про конкретные AST.

А ещё учтите, что IDE добавляют свою порцию радости потому, что там нужно не Abstract Syntax Tree, а вполне себе конкретное с сохранением отступов, пробелов, комментариев, конкретных особенностей типа что тут написано a+(b*c) несмотря на то, что a+b*c было бы достаточно по приоритетам — вот так там нужно. Зачем это — чтобы после рефакторинга типа "выделить этот блок как метод" или любого другого аналогичного — автор продолжал бы получать тот же код с другими сдвигами, переименованием переменных и т.п., и чтобы он мог опознать этот код. И вот когда требование держать и менять CST начинает сочетаться со всеми траблами языка... там вообще сложность выше чем зашкальная. Сейчас это ещё передовой фронт парсерной мысли.
The God is real, unless declared integer.
Re[11]: подскажите как парсят мнемоники С
От: netch80 Украина http://netch80.dreamwidth.org/
Дата: 14.10.22 14:25
Оценка:
Здравствуйте, VVVa, Вы писали:

N>>С обоими, лексером и парсером.

N>>На выходе препроцессора, формально, поток лексем. Но как минимум #line и #pragma требуют поддержки в парсере.
VVV>а конец \n препроцессора определяется лексером?

Да. Но по факту препроцессор встраивается в лексер.

N>>Нет. У меня нет даже 10 человеко-лет ненужных, чтобы выкинуть их на повторение уже доступных GCC или Clang в худшем варианте.

VVV>А сколько человеко-лет уйдёт чтобы написать С компилятор попроще без оптимизаций ?

Ну если ничего больше не делать — месяц можно потратить (пропустив особо тёмные углы языка), два (если и тёмные места закрыть). Но это уже при каком-то реальном опыте.

VVV>Кстати откуда вы столько знаете про компиляторы?


Я очень мало знаю, просто опыт разнообразный. Тут много тех, кто знает больше, и сам писал. Но они что-то пока не включались в дискуссию.
The God is real, unless declared integer.
Re[12]: подскажите как парсят мнемоники С
От: VVVa  
Дата: 14.10.22 16:12
Оценка:
Здравствуйте, netch80, Вы писали:

N>Ну если ничего больше не делать — месяц можно потратить (пропустив особо тёмные углы языка), два (если и тёмные места закрыть). Но это уже при каком-то реальном опыте.

Это вы про Фронтэнд только? Или про весь компилятор?

Как то пытался рекурсивным спуском парсить — сложноватая поддержка получается...(если что-то переделывать то жестоко) с LR парсером полегче

Очень интересует частичный парсинг — его и в ИДЕ наверное вставляют
А LR парсером можно частично парсить?
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.