Описание тега compiler-theory

A compiler is a computer program (or set of programs) that transforms source code written in a programming language (the source language) into another computer language (the target language, often having a binary form known as object code). The most common reason for wanting to transform source code is to create an executable program.
3 ответа

Как распознать переменные, которые не влияют на вывод программы?

Иногда значение переменной, доступ к которой осуществляется в потоке управления программы, может никак не повлиять на ее вывод. Например: global var_1 global var_2 start program hello(var_3, var_4) if (var_2 < 0) then save-log-to-disk (var_1, var…
12 июн '14 в 12:46
3 ответа

Однозначная грамматика для арифметического выражения с Unary + и -

Я только начал самостоятельно изучать книгу Dragon Design of Compiler Design. Я работаю над проблемой, которая говорит, чтобы разработать грамматику для выражения, содержащего двоичные +,-,*,/ и унарные +, - Я придумал E -> E+T | E-T | T T -> …
14 июл '11 в 17:13
3 ответа

Проверка типов данных / структур в парсере

Я пишу парсер рекурсивного спуска, и я не знаю, как все проверить. Я даже не уверен, должен ли я делать это на этапе синтаксического анализа. Я имею в виду, что я мог бы иметь некоторый синтаксис, а именно: int x = 5 int x = 5 И это будет правильно,…
3 ответа

How to make a Side-by-Side Compiler for .NET

Сценарий Никхила Котари #, возможно, является одной из самых удивительных концепций, которые я видел на арене JavaScript в течение достаточно долгого времени. Этот вопрос не о JavaScript, а о компиляции языка во время выполнения.NET. Меня довольно …
16 сен '08 в 18:10
6 ответов

Мог ли C++ не избавиться от идиомы pimpl?

Как я понимаю, pimpl идиома существует только потому, что C++ заставляет вас помещать все закрытые члены класса в заголовок. Если бы заголовок содержал только открытый интерфейс, теоретически, любое изменение в реализации класса не требовало бы пере…
0 ответов

Затраты времени на создание и запуск NFA против DFA для данного регулярного выражения

Я прохожу прошлые экзамены и постоянно сталкиваюсь с вопросами, на которые я не могу найти ответ в учебниках или в Google, поэтому любая помощь будет высоко ценится. Вопрос, с которым у меня сейчас проблемы, заключается в следующем: Учитывая регуляр…
1 ответ

Найти эквивалентную грамматику LR для одного и того же числа грамматик "a" и "b"?

Я не могу найти эквивалентную грамматику LR для: S → aSbS | bSaS | ε которые я думаю, распознают строки с тем же числом "а", что и "б". Что бы обойти это? Можно ли найти и грамматику LR для этого? Заранее спасибо! РЕДАКТИРОВАТЬ: Я нашел то, что я сч…
30 май '17 в 19:11
1 ответ

Компиляторы: зарегистрируйте распределение против сложных ветвлений / переходов

Я заинтересовался оптимизаторами и их работой, особенно в отношении распределения регистров. У меня есть некоторый опыт в написании высокоуровневых интерпретаторов, которые не удосужились сгенерировать эффективный машинный код, поэтому части, вращаю…
14 май '15 в 04:28
1 ответ

Как лямбда-выражения переводятся в байт-код Java

Я пытаюсь создать пример с использованием лямбда-выражения в Java, и я использую официальный JDK8. Мой пример был успешно выполнен. Но когда я пытаюсь проверить, как компилятор переводит лямбда-выражение в байт-код, это вызывает у меня некоторую пут…
17 апр '14 в 12:34
6 ответов

Возможно ли иметь компилятор, который предсказывал бы каждую возможную "специфическую для ситуации" ошибку времени выполнения?

Под "конкретной ситуацией" я подразумеваю, что он использует некоторые данные, к которым у него будет доступ, например, текущую настройку базы данных, версию некоторой ОС и т. Д. Представьте, что компилятор проверит базу данных, которую вы в данный …
04 окт '09 в 05:02
5 ответов

Как компиляторы обнаруживают переполнение чисел при компиляции?

Компилятор работает с исходным кодом в виде строк, например, в C++, например, когда он поощряет такие выражения unsigned char x = 150; он знает из пределов типа, что unsigned char должно быть в диапазоне между 0 а также 255, Мой вопрос пока номер 15…
01 июн '11 в 23:07
1 ответ

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

Я смотрю на семестровый проект в компиляторах, который также может превратиться в мою дипломную работу. У меня нет большого опыта в этой области (я написал небольшой "переводчик" для Паскаля как часть моей работы бакалавра) - я больше увлекался маши…
21 окт '10 в 21:37
2 ответа

Алгоритм встраивания

Кто-нибудь знает какие-либо документы, обсуждающие алгоритмы встраивания? И тесно связаны, отношения родитель-дочерний граф к графу вызовов. Фон: у меня есть компилятор, написанный на Ocaml который активно использует функции, в основном в результате…
1 ответ

Значение доминант в реверс-инжиниринге

Наткнулся на этот вопрос: объяснить роль доминант в реверс-инжиниринге Java-кода. Все, что я могу придумать, это то, что вам нужно уметь вычислять доминаторы в контрольном графике, чтобы увидеть, можно ли его привести: Работайте над доминаторами Опр…
2 ответа

Вопросы по реализации глобального распределителя регистров для крошечного компилятора c

Наступающим летом я надеюсь начать писать магистерскую диссертацию, и я был довольно занят поиском темы диссертации. Теперь у меня есть пул предметов, которые меня интересуют, и больше всего меня поразила реализация глобального распределителя регист…
5 ответов

Как компиляторы C реализуют функции, которые возвращают большие структуры?

Возвращаемое значение функции обычно хранится в стеке или в регистре. Но для большой структуры это должно быть в стеке. Сколько копирования должно происходить в реальном компиляторе для этого кода? Или это оптимизировано? Например: struct Data { uns…
28 янв '10 в 15:42
2 ответа

C++ странный неоднозначный вызов перегруженной функции

Прежде всего, этот вопрос носит чисто теоретический характер. Я не ищу решение (я его уже знаю), я просто ищу объяснение. Следующий код не компилируется: struct foo {}; void a(foo) {} namespace foobar { void a(foo) {} void b(foo f) {a(f);} } int mai…
12 апр '13 в 10:31
1 ответ

Насколько легко найти строку, которая приводит к конфликту в парсере SLR(1) по сравнению с LR (1)

Известно, что парсеры SLR(1) обычно имеют меньше состояний, чем LR(1). Но легче или труднее из-за этого найти строку, которая приводит к конфликту в парсере SLR(1) по сравнению с LR (1) и почему? Заранее спасибо.
1 ответ

Как получить контекстно-свободную грамматику и соответствующий ей КПК?

Я не могу понять, как я могу решить это упражнение. Мне нужно сделать контекстно-свободную грамматику, которая может проверить следующие входные данные: L={w € (0,1,2)* | w= 2^n 0^(m+1) 1^(m+n) with n>=0, m>0} Как я могу создать соответствующи…
1 ответ

Замена всех вызовов функций их определением в коде C/C++

Интересно, есть ли какая-нибудь теория / инструмент, доступный для замены части кода, содержащей вызовы функций, на код, где все вызовы функций были заменены их соответствующим кодом. лайк main() { fun(); } fun() { int i; fun2(); } fun2() { int j; }…