Кто любит RISC в жизни, заходим, не стесняемся.
Ответить

Как компилятор распознает язык си

Пн май 29, 2023 16:29:42

Доброго дня! Уже не мало работаю с языком си. Есть пробелы в понимании основной сути, то есть процесса компиляции языка си в машинный код при помощи компилятора. Есть два вопроса, которые пока никак не могу устаканить в голове. Гуру подскажите:


1)что именно компилятор распознает на языке си при преобразовании в машинный код( например ключевые слова, такие как char, volatile — это я знаю, а что еще? Или где найти эти списки, я не нашел).
Хотелось бы знать прям список этих элементов.

2)и вопрос отталкивающийся от первого: в целом, из чего состоит язык си, из ключевых слов и знаков?

Re: Как компилятор распознает язык си

Пн май 29, 2023 16:52:42

Изначально Си делали как разновидность макроязыка над ассемблером. И в те времена соответствие было довольно таки однозначным. скажем при распознании конструкции IF всё сводилось к кастованию условия во флаг, чтоб потом его можно было элементарно обработать командой JZ/JNZ. Так же с циклами и пр. Ищите книгу Креншоу. Она правда внутри содержит описание компилятора Паскаль, но сути дела это не меняет. Но это тогда! Сейчас Си - это попа в плане понимания мозгами! Компилеры оптимизируют всё так, что без бутылки не разберёшься! У того-же GCC есть флажок, позволяющий транслировать исходник Си в ассемблер. Можно несколько программ написать и посмотреть, что на выходе получится. Но с тем же Креншоу это уже не будет иметь ничего общего.

Re: Как компилятор распознает язык си

Пн май 29, 2023 17:06:16

Что процесс компиляции очень сложный, это понятно, особо углубляться в это не стоит. Ну у меня возник этот вопрос, так как я в библиотеки CMSIS встречаю подобные слова «ICCARM» или «__CC_ARM». И хотел бы знать, компилятор эти слова тоже распознает как обычные ключевые слова, например «char»?!

Re: Как компилятор распознает язык си

Пн май 29, 2023 17:24:21

Это ведь какие-то define-ы. Препроцессор. Не? В стандарте языка такого нет. Ранее препроцессор был отдельной от лексического анализатора сущностью. Как сейчас - не знаю. По логике ни о каких ICCARM компилятор не знает, сл-но обработать это так же, как и char у него тоже нет возможности.

Добавлено after 9 minutes 35 seconds:
И вообще до компилятора дело может и не дойти. Там далее может быть банальное - если определено ICCARM, то инклюд вон то и вот это. И всё!

Re: Как компилятор распознает язык си

Пн май 29, 2023 17:48:36

Уже не мало работаю с языком си. Есть пробелы в понимании основной сути... Есть два вопроса, которые пока никак не могу устаканить в голове. Гуру подскажите


"немало", пишется слитно, так как заменяется "много". "основная суть" - суть не может быть основной, устаканить, вероятно, можно ответы на вопросы, а если вопросы не устаканены, то и нехрен их озвучивать. "Гуру, подскажите" - обращение, необходима запятая. Русский язык и тот с проблемами, а Вы за Си беретесь.
Но это так, бесполезное брюзжание.
А по теме - книг тьма. Что-то препятствует их чтению? Предпочитаете изучать на форуме по ответам с ошибками? Это странно.

Re: Как компилятор распознает язык си

Пн май 29, 2023 17:58:17

Любой компилятор - разновидность текстового редактора.
Собственно там и смотрим, как и чего устроено.
8)

Re: Как компилятор распознает язык си

Пн май 29, 2023 19:06:43

Любой компилятор - разновидность текстового редактора.Собственно там и смотрим, как и чего устроено.8)

Повеселил.

maksimdag0 писал(а):что именно компилятор распознает на языке си при преобразовании в машинный код


1) Н. Вирт "Алгоритмы+структуры данных=программы"
Показано создание мини-Паскадя с генерацией кода.

2) Не могу вспомнить название книги на русском, в которой показано создание интерпретатора языка Small C как пример применения языка Си. Небольшого формата, не очень толстая.

Re: Как компилятор распознает язык си

Пн май 29, 2023 19:22:02

Small C - это наверное Герберт Шилдт. У него в разных редакциях книжек разные языки реализованы. То Бейсик, то Си.

Re: Как компилятор распознает язык си

Пн май 29, 2023 19:52:41

BOB51 писал(а):) Н. Вирт "Алгоритмы+структуры данных=программы"
Показано создание мини-Паскадя с генерацией кода.
. Попробую поискать в ней ответ на свой вопрос. Благодарю

Re: Как компилятор распознает язык си

Пн май 29, 2023 20:35:09

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

Но к их удивлению, их тайнопись пришлась по вкусу клану программистов, не желающих иметь конкурентов среди прикладных специалистов, для которых Вирт разработал хорошо продуманный язык с простой компактной семантикой. Причем - даже начальные версии его языка позволяли легко получать решения любых алгоритмических задач.
И когда был устроен чемпионат по языкам программировани, типа, кто круче, то сищники и паскалисты предложили по 10 задач своим противникам. В результате сишники смогли написать код лишь для 8 задач паскалистов, а паскалисты легко решили все 10 задач по Си.
Разумеется, каждая команда имела и решения по своим задачам.

А что имеем в результате ? Си потихоньку сползает на семантические концепции Вирта, ну а наследником Виртовской ветки является ныне Питон.

Так что, по поводу того, что С считает кодом на нашем радиоКоте можно сказать так - все, что шевелится, считается мышкой...

Re: Как компилятор распознает язык си

Вт май 30, 2023 04:07:47

Есть пробелы в понимании основной сути, то есть процесса компиляции языка си в машинный код при помощи компилятора.

Меньше знаешь - крепче сон. Некоторые вещи могут серьёзно ушатать психику. Появится маниакальное желание что-то подкрутить и улучшить, и это очень плохо кончится.
Например основных участников проекта GCC всего несколько человек. Если отбросить рапорты, то ещё примерно 50 человек в год решают какую-либо наболевшую проблему, или добавляют/улучшают встроенные функции. Проект открытый, каждый может подключиться к работе, но желающих очень мало - слишком высокий порог.
Это на весь мир!!!
А теперь подумай, насколько нужно форматнуть свой мозг - чтобы туда уместилось всё необходимое. Мозги не резиновые, что-то обязательно придётся забыть.

Re: Как компилятор распознает язык си

Вт май 30, 2023 04:36:23

порог-то не очень высокий, на самом деле. созданием компиляторов только ленивый раньше не занимался. Всё зависит от уровня компилятора, а GCC вообще уже давно не только Си и далеко не одна платформа, так что, как пример не очень удачен, это типа чувак захотел змейку написать, а ему показали KSP.
Но в целом да. Мозг беречь надо
Ответить