Другие языки программирования и технологии
Как работают языки программирования
Щас вдруг возник вопрос. А каким работаюобразом языки программирования. Каким образом какие-то сочитания букв преобразовываются в показатели: 0/1?
Компилятор преобразует текст на языке в грамматическое дерево.
Кодогенератор по грамматическому дереву генерирует машинный код.
Например.
Здесь описан только принцип. Естественно, в реальных примерах всё сложнее. Каждая операция может быть вызовом какой-нибудь навороченной подпрограммы, которая вызывает другие подпрограммы. Вызов подпрограммы в грамматике - это тоже узел дерева, ничего сверхъестественного. Также применяются оптимизации уровня кодогенератора (инлайн, развёртка циклов, преобразование в более дешёвые инструкции, например, сдвиг вместо умножения, и т.п.) и уровня компилятора (вычисление константных поддеревьев и др.)
Существуют стандартизированные грамматические описания, например, LLVM. Можно сделать компилятор своего языка высокого уровня, который переводит его код в LLVM, а потом воспользоваться готовыми кодогенераторами из LLVM в машинные коды соответствующих платформ. И наоборот, если кто-то выводит на рынок своё железо, то он может написать кодогенераторы из LLVM в его систему команд, и тогда оно станет доступным всем языкам, имеющим компиляторы в LLVM.
Кодогенератор по грамматическому дереву генерирует машинный код.
Например.
код:
a = b * c + d
грамматическое дерево:
=
/ \
a +
/ \
* d
/ \
b c
машинный код (в ассемблерной нотации x86):
mov eax, [b]
mov ecx, [c]
imul ecx
add eax, [d]
mov [a], eax
Здесь описан только принцип. Естественно, в реальных примерах всё сложнее. Каждая операция может быть вызовом какой-нибудь навороченной подпрограммы, которая вызывает другие подпрограммы. Вызов подпрограммы в грамматике - это тоже узел дерева, ничего сверхъестественного. Также применяются оптимизации уровня кодогенератора (инлайн, развёртка циклов, преобразование в более дешёвые инструкции, например, сдвиг вместо умножения, и т.п.) и уровня компилятора (вычисление константных поддеревьев и др.)
Существуют стандартизированные грамматические описания, например, LLVM. Можно сделать компилятор своего языка высокого уровня, который переводит его код в LLVM, а потом воспользоваться готовыми кодогенераторами из LLVM в машинные коды соответствующих платформ. И наоборот, если кто-то выводит на рынок своё железо, то он может написать кодогенераторы из LLVM в его систему команд, и тогда оно станет доступным всем языкам, имеющим компиляторы в LLVM.
Максим Соколов
Спасибо, осталось только найти в интернете определение части вещей, которые ты сказал и все нормик
Максим Соколов
Святой вы человек, отец
Коротко говоря - достаточно сложные математические преобразования, изучаемые в соответствующих разделах дискретной математики - графы, деревья, абстрактные грамматики и т.п.
Лексический анализ - преобразование коде в последовательность токенов (ключевое слово, литерал и т.д.)
Синтаксический анализ - построение дерева разбора, использование грамматик.
Семантический анализ
Оптимизация
Генерация целевого кода
Синтаксический анализ - построение дерева разбора, использование грамматик.
Семантический анализ
Оптимизация
Генерация целевого кода
Поищи на ютьюбе. На пальцах объяснить сложно. Долгая тема.
Максим Соколов
Я щас разберусь в вещах сказанным человеком выше и уже возможно пойду смотрел на ютубчике
Похожие вопросы
- А какие языки программирования изучали в 80х и на чём вы их изучали?
- Как работает return в языке программирования Java?
- Какой язык программирования выбрать для изучения для начинающего ? (внутри)
- С какого языка программирования начать?
- И снова про языки программирования ^_^ Поправьте, если я ошибаюсь где-то.
- Какой язык программирования следует изучить в первую очередь, если в программировании вообще ничего не понимаешь?
- Виды языков программирования
- С чего начать учение программированию? С каких языков программирования лучше начинать учиться программированию?
- Помогите с выбором изучения языка программирования, после которого будет легче работать с другими языками?
- Какой язык программирования стоит освоить