Транслятор языка программирования

Что такое Skype Translator

Скайп переводчик – это функция Skype, которая позволяет переводить разговоры и сообщения в режиме онлайн. С 2014 года, когда компания Microsoft объявила о появлении новом сервисе, автопереводчик трижды менял принцип работы и подключения:

• Бот-переводчик. Впервые появился в Скайп версии 5.1.0.245. Для подключения в чат между двумя собеседниками приходилось добавлять бот. Был отключен в 2015 году.

• Skype Translator Preview. Усовершенствованная версия Скайп со встроенным переводчиком, которая пришла на смену боту. Подключить функцию можно было для конкретного чата с помощью бегунка-переключателя. Программа устанавливалась вместо классического Skype.

Транслятор языка программирования

• Встроенный переводчик в Скайпе последних версий. В настоящее время работает на всех платформах, начиная с Windows 7 и более поздними версиями, Mac OS, iOS, Android и Linux.

Проектирование компилятора

Некоторые проблемы, возникающие при разработке реального транслятора:

  • Проблемы с исходным языком. Легко ли его скомпилировать? Есть ли препроцессор? Как обрабатываются типы? Имеются ли библиотеки?
  • Группировка проходов компилятора: одно- или многоходовая?
  • Степень желательной оптимизации. Быстрая и нечистая трансляция программы практически без оптимизации может быть нормальной. Чрезмерная оптимизация будет тормозить компилятор, но лучший код во время выполнения может того стоить.
  • Требуемая степень обнаружения ошибок. Может ли транслятор просто остановиться на первой ошибке? Когда он должен остановиться? Доверить ли компилятору исправление ошибок?
  • Наличие инструментов. Если исходный язык не является очень маленьким, сканер и генератор анализаторов являются обязательными. Также существуют генераторы генераторов кода, но они не так распространены.
  • Вид целевого кода для генерации. Следует выбирать из чистого, дополненного или виртуального машинного кода. Или просто написать входную часть, создающую популярные промежуточные представления, такие как LLVM, RTL или JVM. Или сделать трансляцию от исходного в исходный код на C или JavaScript.
  • Формат целевого кода. Можно выбрать язык ассемблера, переносимый машинный код, машинный код образа памяти.
  • Перенацеливание. При множестве генераторов хорошо иметь общую входную часть. По этой же причине лучше иметь один генератор для многих входных частей.

Транслятор языка программирования

Примечания

  1. ↑ ГОСТ 19781-83 // Вычислительная техника. Терминология: Справочное пособие. Выпуск 1 / Рецензент канд. техн. наук Ю. П. Селиванов. — М.: Издательство стандартов, 1989. — 168 с. — 55 000 экз. — ISBN 5-7050-0155-X.
  2. Першиков В. И., Савинков В. М. Толковый словарь по информатике / Рецензенты: канд. физ.-мат. наук А. С. Марков и д-р физ.-мат. наук И. В. Поттосин. — М.: Финансы и статистика, 1991. — 543 с. — 50 000 экз. — ISBN 5-279-00367-0.
  3. СТ ИСО 2382/7-77 // Вычислительная техника. Терминология. Указ. соч.
  4. Толковый словарь по вычислительным системам = Dictionary of Computing / Под ред. В. Иллингуорта и др.: Пер. с англ. А. К. Белоцкого и др.; Под ред. Е. К. Масловского. — М.: Машиностроение, 1990. — 560 с. — 70 000 (доп,) экз. — ISBN 5-217-00617-X (СССР), ISBN 0-19-853913-4 (Великобритания).
  5. Органик Э. Организация системы Интел 432 = A Programmer’s View of the Intel 432 System / Пер. с англ. — М.: Мир, 1987. — С. 20, 31. — 446 с. — 59 000 экз.
  6. Роберт У. Себеста. 1.7. Методы реализации // Основные концепции языков программирования = Concepts of Programming Languages / Пер. с англ. — 5-е изд. — М.: Вильямс, 2001. — С. 45‑52. — 672 с. — 5000 экз. — ISBN 5-8459-0192-8 (рус.), ISBN 0-201-75295-6 (англ.).

Как настроить переводчик

Подключить автоперевод разговора или переписки поможет следующая пошаговая инструкция:
1. Открыть Скайп.

2. Во вкладке «Чаты» найти нужный контакт и вызвать контекстное меню правой кнопкой мыши.

3. Выбрать пункт «Посмотреть профиль».

4. Проскролить меню настроек до раздела «Перевод беседы».

5. Для проверки и изменения настроек по умолчанию кликнуть «Параметры перевода».

Транслятор языка программирования

6. В разделе «Языки речи» выбрать русский язык.

7. В следующем пункте для перевода речи выбрать женский или мужской голос.

8. Вернуться в предыдущее меню и кликнуть курсором по надписи «Отправить запрос на перевод».

Собеседник получит приглашение для подключения беседы с переводом, для подтверждения согласия требуется нажать «Принять».

Реализации

Основная статья:

Достоинство компилятора: программа компилируется один раз и при каждом выполнении не требуется дополнительных преобразований. Соответственно, не требуется наличие компилятора на целевой машине, для которой компилируется программа. Недостаток: отдельный этап компиляции замедляет написание и отладку и затрудняет исполнение небольших, несложных или разовых программ.

Основная статья: Ассемблер

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

Основная статья:

Достоинство чистого интерпретатора: отсутствие промежуточных действий для трансляции упрощает реализацию интерпретатора и делает его удобнее в использовании, в том числе в диалоговом режиме. Недостаток — интерпретатор должен быть в наличии на целевой машине, где должна исполняться программа. А свойство чистого интерпретатора, что ошибки в интерпретируемой программе обнаруживаются только при попытке выполнения команды (или строки) с ошибкой, можно признать как недостатком, так и достоинством.

Существуют компромиссные между компиляцией и чистой интерпретацией варианты реализации языков программирования, когда интерпретатор перед исполнением программы транслирует её на промежуточный язык (например, в байт-код или p-код), более удобный для интерпретации (то есть речь идёт об интерпретаторе со встроенным транслятором). Такой метод называется смешанной реализацией. Примером смешанной реализации языка может служить Perl. Этот подход сочетает как достоинства компилятора и интерпретатора (бо́льшая скорость исполнения и удобство использования), так и недостатки (для трансляции и хранения программы на промежуточном языке требуются дополнительные ресурсы; для исполнения программы на целевой машине должен быть представлен интерпретатор). Также, как и в случае компилятора, смешанная реализация требует, чтобы перед исполнением исходный код не содержал ошибок (лексических, синтаксических и семантических).

Основная статья:

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

Примечания

  1. ↑ ГОСТ 19781-83 // Вычислительная техника. Терминология: Справочное пособие. Выпуск 1 / Рецензент канд. техн. наук Ю. П. Селиванов. — М.: Издательство стандартов, 1989. — 168 с. — 55 000 экз. — ISBN 5-7050-0155-X.
  2. Першиков В. И., Савинков В. М. Толковый словарь по информатике / Рецензенты: канд. физ.-мат. наук А. С. Марков и д-р физ.-мат. наук И. В. Поттосин. — М.: Финансы и статистика, 1991. — 543 с. — 50 000 экз. — ISBN 5-279-00367-0.
  3. СТ ИСО 2382/7-77 // Вычислительная техника. Терминология. Указ. соч.
  4. Толковый словарь по вычислительным системам = Dictionary of Computing / Под ред. В. Иллингуорта и др.: Пер. с англ. А. К. Белоцкого и др.; Под ред. Е. К. Масловского. — М.: Машиностроение, 1990. — 560 с. — 70 000 (доп,) экз. — ISBN 5-217-00617-X (СССР), ISBN 0-19-853913-4 (Великобритания).
  5. Органик Э. Организация системы Интел 432 = A Programmer’s View of the Intel 432 System / Пер. с англ. — М.: Мир, 1987. — С. 20, 31. — 446 с. — 59 000 экз.
  6. Роберт У. Себеста. 1.7. Методы реализации // Основные концепции языков программирования = Concepts of Programming Languages / Пер. с англ. — 5-е изд. — М.: Вильямс, 2001. — С. 45‑52. — 672 с. — 5000 экз. — ISBN 5-8459-0192-8 (рус.), ISBN 0-201-75295-6 (англ.).

Лексический анализ (сканирование)

Сканер конвертирует поток знаков исходного кода в поток токенов, убирая пробелы, комментарии и расширяя макросы.

Сканеры часто встречаются с такими проблемами, как принимать или не принимать во внимание регистр, отступы, перевод строки и вложенные комментарии. Ошибки, которые могут встретиться при сканировании, называются лексическими и включают:

Ошибки, которые могут встретиться при сканировании, называются лексическими и включают:

  • символы, отсутствующие в алфавите;
  • превышение числа знаков в слове или строке;
  • не закрытый знак или строковый литерал;
  • конец файла в комментарии.

Какой выбрать онлайн-словарь?

Онлайн-словари творят чудеса: они проговаривают слова разными голосами, показывают примеры из художественной литературы, приводят списки синонимов и антонимов. Но, возможно, у вас возникнет вопрос: какой словарь лучше? Ну, это смотря как вы им пользуетесь.

  1. Если вы изучаете английский язык, то Лингво – хороший выбор для вас. При чтении текста в интернете также хорошо помогает “ЛеоПереводчик” – его подсказки выскакивают при двойном клике на слово, не приходится особо отвлекаться, а “словарную карточку” можно внести в личную коллекцию. При более глубоком же знакомстве есть смысл покопаться в англо-английском словаре. Мультитран – не лучший выбор, потому что в нем нет озвучки.
  2. Если вы пользуетесь английским по работе, например, часто сталкиваетесь с документами на английском или нужно написать email зарубежному партнеру, то очень здорово подходит Мультитран. Подойдет, конечно, и Лингво, но Мультитран больше рассчитан на использование в трудовых буднях секретарей, бухгалтеров, инженеров, редакторов, строителей, моряков, космонавтов, врачей – в общем, всех, кому может понадобиться англо-русский словарь для рабочих целей. Главное отличие от Лингво в том, что когда вы вводите слово, появляются варианты перевода сразу из всех словарей (по профессиям, специальностям) – это экономит время, которое, как известно, – деньги. Также для рабочих целей очень удобен поисковик Ludwig – он хорошо помогает в случаях, когда вы сомневаетесь в выборе слова или построении предложения.

В этот обзор вошли не вошли некоторые известные словари. Нет, например, merriam-webster.com – это популярный и авторитетный словарь, но в обзоре уже есть функционально похожие Cambridge и Dictionary.com. Нет популярного словаря bab.la – потому что Лингво, в общем-то, выполняет те же функции.

Меня зовут Сергей Ним, я автор сайта langformula.ru и книг по английскому языку.

Друзья! Меня часто спрашивают, но я не занимаюсь репетиторством. Если вам нужен учитель, рекомендую . Здесь вы найдете преподавателя, носителя языка или не носителя, на любой случай и карман Я сам прошел там более 100 занятий, рекомендую попробовать и вам!

Архитектура компилятора: компоненты

Это главные функциональные компоненты транслятора, генерирующего машинный код (если выходной программой является программа на С или виртуальная машина, то потребуется не так много этапов):

  • Входная программа (поток знаков) поступает в сканер (лексический анализатор), который преобразует ее в поток токенов.
  • Парсер (синтаксический анализатор) строит из них абстрактное синтаксическое дерево.
  • Семантический анализатор раскладывает семантическую информацию и проверяет узлы дерева на ошибки. В результате строится семантический граф – абстрактное синтаксическое дерево с дополнительными свойствами и установленными ссылками.
  • Генератор промежуточного кода строит граф потока (кортежи группируются в основные блоки).
  • Машинонезависимый оптимизатор кода проводит как локальную (внутри базового блока), так и глобальную (по всем блокам) оптимизацию, в основном оставаясь в рамках подпрограмм. Сокращает избыточный код и упрощает вычисления. В результате получается модифицированный граф потока.
  • Генератор целевого кода связывает базовые блоки в прямолинейный код с передачей управления, создавая объектный файл на ассемблере с виртуальными регистрами (возможно, неэффективными).
  • Машинозависимый оптимизатор-компоновщик распределяет память между регистрами и производит планирование команд. Осуществляет преобразование программы на ассемблере в настоящий ассемблер с хорошим использованием конвейерной обработки.

Кроме того, используются подсистемы обнаружения ошибок и менеджер таблиц символов.

Транслятор языка программирования

Англо-русский переводчик

  1. 5
  2. 4
  3. 3
  4. 2
  5. 1

(505 голосов, в среднем: 4.6/5)

Англо-русский переводчик для переводов отдельных слов, фраз и коротких тестов.
Для англо-русского перевода введите в верхнее окно редактирования текст. Затем
нажмите на зеленую кнопку «Перевести». В окне ниже вы получите готовый перевод.

АзербайджанскийАлбанскийАмхарскийАнглийскийАрабскийАрмянскийАфрикаансБаскскийБелорусскийБенгальскийБирманскийБолгарскийБоснийскийВаллийскийВенгерскийВьетнамскийГавайскийГалисийскийГолландскийГреческийГрузинскийГуджаратиДатскийЗулуИвритИгбоИдишИндонезийскийИрландскийИсландскийИспанскийИтальянскийЙорубаКазахскийКаннадаКаталанскийКиргизскийКитайскийКитайский традКорейскийКорсиканскийКреольскийКурдскийКхмерскийКхосаЛаосскийЛатинскийЛатышскийЛитовскийЛюксембургскийМакедонскийМалагасийскийМалайскийМалаяламМальтийскийМаориМаратхиМонгольскийНемецкийНепальскийНорвежскийПанджабиПерсидскийПольскийПортугальскийПуштуРумынскийРусскийСамоанскийСебуанскийСербскийСесотоСингальскийСиндхиСловацкийСловенскийСомалийскийСуахилиСуданскийТаджикскийТайскийТамильскийТелугуТурецкийУзбекскийУкраинскийУрдуТагальскийФинскийФранцузскийФризскийХаусаХиндиХмонгХорватскийЧеваЧешскийШведскийШонаШотландскийЭсперантоЭстонскийЯванскийЯпонский
АзербайджанскийАлбанскийАмхарскийАнглийскийАрабскийАрмянскийАфрикаансБаскскийБелорусскийБенгальскийБирманскийБолгарскийБоснийскийВаллийскийВенгерскийВьетнамскийГавайскийГалисийскийГолландскийГреческийГрузинскийГуджаратиДатскийЗулуИвритИгбоИдишИндонезийскийИрландскийИсландскийИспанскийИтальянскийЙорубаКазахскийКаннадаКаталанскийКиргизскийКитайскийКитайский традКорейскийКорсиканскийКреольскийКурдскийКхмерскийКхосаЛаосскийЛатинскийЛатышскийЛитовскийЛюксембургскийМакедонскийМалагасийскийМалайскийМалаяламМальтийскийМаориМаратхиМонгольскийНемецкийНепальскийНорвежскийПанджабиПерсидскийПольскийПортугальскийПуштуРумынскийРусскийСамоанскийСебуанскийСербскийСесотоСингальскийСиндхиСловацкийСловенскийСомалийскийСуахилиСуданскийТаджикскийТайскийТамильскийТелугуТурецкийУзбекскийУкраинскийУрдуТагальскийФинскийФранцузскийФризскийХаусаХиндиХмонгХорватскийЧеваЧешскийШведскийШонаШотландскийЭсперантоЭстонскийЯванскийЯпонский
Перевести

Русско-английский переводчик

Важно Edit

Компилятор Edit

Компилятор (англ. compiler — составитель, собиратель) — читает всю программу целиком, делает ее перевод и создает законченный вариант программы на машинном языке, то есть бинарный файл, содержащий перечень машинных команд. Бинарный файл может быть исполняемым, библиотечным, объектным, он выполняется операционной системой без участия компилятора.

Интерпретатор Edit

Интерпретатор (англ. interpreter — истолкователь, переводчик) — переводит программу построчно (по одному оператору) в машинный код (команды процессора, ОС, иной среды), выполняет переведенный оператор (строку программы), а затем переходит к следующей строке программного текста. Интерпретатор не формирует исполняемых файлов, он сам выполняет все действия, записанные в тексте исходной программы.

Препроцессор Edit

Препроцессор — это транслятор с одного языка программирования в другой без создания исполняемого файла или выполнения программы. Препроцессоры удобны для расширения возможностей языка и удобства программирования путем использования на этапе написания более удобного для человека диалекта языка программирования и ее перевода препроцессором на текст стандартного языка программирования, который можно откомпилировать стандартным компилятором.

Эмулятор Edit

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

Различия Edit

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

К эмулирующим языкам относятся языки для таких платформ, как JVM, .Net, Mono, в которых во время трансляции программы производится её компиляция в специальный байт-код,а исполнение полученного байт-кода производится на целевой машине с помощью простого и быстрого интерпретатора (виртуальной машины).

Онлайн-переводчики

Google Tranlslate

Есть очень много шуток, баек и смешных картинок о ляпах, которые выдают онлайн-переводчики. Действительно, прогнав через Гугл Переводчик даже несложный текст, на выходе вы получите что-то далекое от русского или английского языка. Однако общий смысл будет понятен, если текст без профессионального уклона.

Транслятор языка программированияГугл знает, что фильм “Some Like it Hot” у нас называется не “Некоторые любят погорячее”, а “В джазе только девушки”.

К примеру, через Гугл Транслейт часто общаются покупатели онлайн-магазинов со службой поддержки или продавцом. Последний вариант особенно популярен при покупках в “АлиЭкспрессе”, где, как известно, можно писать пожелания и претензии напрямую продавцу. Вроде как понимают друг друга Но все же, если вы пользуетесь переводчиком для общения с продавцом в онлайн-магазине, старайтесь писать коротко и ясно, обходясь без витиеватых растеканий мыслью. Чем сложнее предложение, тем менее точен перевод.

Любопытная функция Google Translate – озвучка текста. Если онлайн-словари позволяют прослушать звучание одного слова, то здесь можно озвучить целый текст. Проговаривает его программа, разумеется, но качество довольно неплохое. Вот только интонация совсем неживая.

В турпоездке нужно быть осмотрительнее с этим приложением.

Отдельного упоминания заслуживает приложение для мобильных устройств. В нем есть две очень забавные, хоть и малополезные функции: перевод голоса и перевод фото.

В первом случае вы говорите что-нибудь в микрофон и – о чудо! – программа говорит то же самое, но на другом языке! Как в фантастических фильмах! Когда я узнал об этой функции, я долго игрался, диктуя разные фразы по-русски и слушая их по-английски, немецки, испански, итальянски.

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

Другая забавная функция – перевод с помощью фото. Вы наводите камеру на иностранный текст, предварительно выбрав язык, и – о чудо! – прямо на экране он тут же превращается в русский! Вернее, в абракадабру из русских слов, потому что этот перевод “на лету” ну очень неточный. Он подходит разве что для перевода вывесок типа “Опасно” или “Выход здесь”. Однако в критических случаях штука бывает полезной, я таким способом переводил японские надписи на холодильнике.

Вот подробный видообзор этого чуда техники.

Яндекс.Переводчик

В общем-то, Яндекс.Переводчик ничем особенным от Google Translate не отличается. В нем тоже доступен перевод с\на десятки языков, для некоторых языков есть озвучка. Главное отличие в том, что у Яндекс.Переводчика два режима: перевод текстов и перевод веб-страниц.

Перевод текстов работает, как в Гугле с той лишь разницей, что если переводить одно слово, то появится не перевод, а короткая словарная статья, как в Лингво, но с минимумом информации. А вот в режиме перевода веб-страниц нужно вводить не текст, а ссылку на страницу – в окне появляется ее переведенная версия. Можно настроить просмотр в двух окнах, получаются своего рода параллельные тексты. Очень плохого качества, разумеется, но смысл уловить можно.

Транслятор языка программированияПеревод описания книги с Googreads. Машинному переводу еще далеко до совершенства.

У Яндекс.Переводчика тоже есть мобильная версия. Это простое и удобное приложение сайты не переводит, но обладает достаточным для мобильного приложения функционалом: перевод слов, текста, набор голосом (хорошо распознает). Есть даже перевод с фото – распознает текст на снимке и переводит его прямо на фотографии. Почти как мобильный Гугл Переводчик, только не на лету.

Примечания

  1. ↑ ГОСТ 19781-83 // Вычислительная техника. Терминология: Справочное пособие. Выпуск 1 / Рецензент канд. техн. наук Ю. П. Селиванов. — М.: Издательство стандартов, 1989. — 168 с. — 55 000 экз. — ISBN 5-7050-0155-X.
  2. Першиков В. И., Савинков В. М. Толковый словарь по информатике / Рецензенты: канд. физ.-мат. наук А. С. Марков и д-р физ.-мат. наук И. В. Поттосин. — М.: Финансы и статистика, 1991. — 543 с. — 50 000 экз. — ISBN 5-279-00367-0.
  3. СТ ИСО 2382/7-77 // Вычислительная техника. Терминология. Указ. соч.
  4. Толковый словарь по вычислительным системам = Dictionary of Computing / Под ред. В. Иллингуорта и др.: Пер. с англ. А. К. Белоцкого и др.; Под ред. Е. К. Масловского. — М.: Машиностроение, 1990. — 560 с. — 70 000 (доп,) экз. — ISBN 5-217-00617-X (СССР), ISBN 0-19-853913-4 (Великобритания).
  5. Органик Э. Организация системы Интел 432 = A Programmer’s View of the Intel 432 System / Пер. с англ. — М.: Мир, 1987. — С. 20, 31. — 446 с. — 59 000 экз.
  6. Роберт У. Себеста. 1.7. Методы реализации // Основные концепции языков программирования = Concepts of Programming Languages / Пер. с англ. — 5-е изд. — М.: Вильямс, 2001. — С. 45‑52. — 672 с. — 5000 экз. — ISBN 5-8459-0192-8 (рус.), ISBN 0-201-75295-6 (англ.).

Какие бывают онлайн-словари?

Прежде чем перейти к обзору, нужно уточнить, что онлайн-словари бывают разных видов. Вообще, классификация словарей – довольно непростая штука, дело не ограничивается только толковыми и двуязычными, но в нашем случае речь пойдет именно об этих двух категориях.

  • Двуязычные словари (билингвальные) – это привычные нам словари с иностранным словом слева и переводом на русский справа или наоборот. Английские слова часто снабжены озвучкой. Переводов обычно несколько, они снабжены комментариями, примерами. Говоря о бумажных словарях, обычно отличают их по направленности, например англо-русский (с английского на русский) и русско-английский (наоборот), но в случае с онлайн-словарями такого разделения нет, потому что все они позволяют свободно переключаться между направлениями. Многие онлайн-словари имеют большую базу из нескольких языков, поэтому правильнее их было бы назвать многоязычными.
  • Толковые словари английского языка (англо-английские, монолингвальные) – это словари, в которых английскому слову дается объяснение на английском же языке. Помимо значений слова, обычно приводятся примеры из речи, озвучка.

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

Я думаю, что это полезно для тех, кто профессионально работает с языком (переводчики, ученые-лингвисты), а для учащихся, особенно для начинающих, это необязательно, только лишний раз отвлекает внимание. Зачем учащийся смотрит в словарь? Чтобы быстренько найти значение слова, произношение и пример

Для этого вполне годится двуязычный словарь.

Этапы трансляции

Трансляция состоит из этапов анализа и синтеза:

Исходный код → Анализатор → Концептуальное представление → Генератор (синтезатор) → Целевой код.

Это обусловлено такими причинами:

  • Любой другой способ не подходит. Пословный перевод просто не работает.
  • Хорошее инженерное решение: если нужно написать трансляторы для M исходных языков и N целевых, потребуется написать только M + N простых программ (полукомпиляторов), а не M × N комплексных (полных трансляторов).

Транслятор языка программирования

Тем не менее на практике концептуальное представление очень редко бывает достаточно выразительным и мощным, чтобы охватить все мыслимые исходные и целевые языки. Хотя некоторые и смогли к этому приблизиться.

Реальные компиляторы проходят через множество этапов. При создании собственного компилятора не нужно повторять всю тяжелую работу, которую люди уже проделали при создании представлений и генераторов. Можно транслировать свой язык прямо в JavaScript или C и воспользоваться существующими JavaScript-движками и компиляторами языка C, чтобы сделать все остальное. Также можно использовать существующие промежуточные представления и виртуальные машины.

Блоки транслятора Edit

Лексический блок Edit

На этом этапе выполняется лексический анализ, когда последовательность входных символов на исходном языке преобразуется в последовательность лексем. Лексема – наименьшая цепочка исходного языка, имеющая заранее определенный смысл. Лексема состоит из двух частей:

• класс – указывает на характер информации в лексеме;

• значение – собственно значение лексемы.

Синтаксический блок Edit

На данном этапе выполняется синтаксический анализ, когдацепочка лексем преобразуется в цепочку атомов. Атом – элементарная операция; последовательность атомов отражает порядок выполнения операций. Атом состоит из двух частей:

• класс – вид операции;

• значение – набор указателей на операнды операции.

Семантический блок Edit

Например, происходит привязка идентификаторов к декларациям, типам, проверке совместимости, определению типов выражений и т. д.

Генератор кода Edit

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

Блок оптимизации Edit

Блок оптимизации не является обязательным. На этом этапе выполняется применение различных методов преобразования кода. Ускорение работы программ, уменьшение количества операций ввода вывода. Оптимизация может быть на разных уровнях и этапах, например, над промежуточным кодом или над конечным машинным кодом.