Вопросы с тегом «compilers»

15
Вывод типа с типами продукта

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

15
Зачем разделять лексинг и разбор?

Можно проанализировать документ, используя один проход из конечного автомата. Какая польза от двух проходов, т.е. иметь лексер для преобразования текста в токены и иметь анализатор для проверки правил производства на этих токенах? Почему бы не иметь один проход, который применяет правила...

14
Какое свойство минусов позволяет устранить хвостовую рекурсию по модулю минусов?

Я знаком с идеей базового исключения хвостовой рекурсии, когда функции, которые возвращают прямой результат вызова для себя, могут быть переписаны как итерационные циклы. foo(...): # ... return foo(...) Я также понимаю, что в особом случае функция все еще может быть переписана, если рекурсивный...

13
Должно ли дерево абстрактного синтаксиса быть деревом?

Должен ли вывод синтаксического анализатора быть деревом или это также может быть общий граф? Кроме того, существует ли какой-либо существующий или вероятный язык, который использует общее представление графов вместо деревьев для своего...

13
Почему использование лексера / парсера для двоичных данных так неправильно?

Я часто работаю с лексером / парсерами , в отличие от комбинатора парсеров, и вижу людей, которые никогда не посещали уроки по синтаксическому анализу, спрашивают о парсинге двоичных данных. Обычно данные не только двоичные, но и контекстно-зависимые. Это в основном приводит к тому, что токен...

13
Удаление левой рекурсии в грамматике при сохранении левой ассоциации оператора

У меня проблема с этим упражнением: Пусть G будет следующей неоднозначной грамматикой для λ-исчисления: E → v | λv.E | EE | (E) где E - единственный нетерминальный символ, λv.E представляет абстракцию относительно переменной v в E, а EE представляет приложение. Определите LL (1) грамматику G ′ так,...

12
Как эта грамматика LL (1)?

Это вопрос из Книги Дракона. Это грамматика: S→AaAb∣BbBaS→AaAb∣BbBaS \to AaAb \mid BbBa A→εA→εA \to \varepsilon B→εB→εB \to \varepsilon Вопрос состоит в том, как показать, что это LL (1), но не SLR (1). Чтобы доказать, что это LL (1), я попытался построить его таблицу синтаксического анализа, но я...

12
Есть ли способ различить грамматику LL (k) и LR (k)?

Я недавно изучал проектирование компиляторов. Я узнал о двух типах грамматики: один - это грамматика LL, а другой - грамматика LR. Мы также знаем, что каждая грамматика LL - это LR, то есть грамматика LL - это правильное подмножество грамматики LR. Первый используется при синтаксическом анализе...

12
Как «вырубка леса» удаляет «деревья» из программы?

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

11
Предлагая уточнения типов

На работе мне было поручено вывести некоторую информацию о типах динамического языка. Я переписываю последовательности операторов во вложенные letвыражения, например так: return x; Z => x var x; Z => let x = undefined in Z x = y; Z => let x = y in Z if x then T else F; Z => if x then {...

11
Подход «CPS» нанес большой вред производительности в SML / NJ; желательные рассуждения

В комментарии к Learning F #: Какие книги, использующие другие языки программирования, можно перевести на F # для изучения функциональных концепций? Макарий заявил: Обратите внимание, что подход «CPS» нанес большой вред производительности в SML / NJ. Его модель физической оценки нарушает слишком...

10
Начало работы с анализом программ

Я ищу ресурсы для начала работы с анализом программы . Единственная книга, которую я нашел по этой теме, это книга Нильсона и Нильсона . Кроме этого, кажется, что есть только книги по «компиляторам», где «программный анализ» будет главой или чем-то в этом роде. Знают ли люди о каких-либо других...

10
Теоретическое минимальное количество регистров для современного компьютера?

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

10
Парсер рекурсивного спуска с возвратом для грамматики

Может кто-то просветить меня, почему парсер рекурсивного спуска с возвратом, который пробует продукцию и (в этом порядке), не распознает язык, образованный грамматикой .S→aSaS→aSaS \rightarrow aSaS→aaS→aaS \rightarrow aaS→aSa | aaS→aSa | aaS \rightarrow aSa\ |\ aa Похоже, он разбирает только слова...

10
Учитывая строку и CFG, какие символы могут следовать за строкой (в предложениях форм CFG)?

Пусть множество терминального и N множества нетерминальных символов некоторой контекстно-свободная грамматика G .ΣΣ\SigmaNNNGGG Скажем , у меня есть строка такое , что х у ∈ S ( G ) , где х , у ∈ ( Е ∪ N ) * и S ( G ) являются сентенциальные формы G .a ∈(Σ∪N)+a∈(Σ∪N)+a \in (\Sigma \cup N)^+х аy∈ S(...

10
Скомпилируйте язык программирования с самим собой

Я студент информатики. Я хочу создать свой собственный язык программирования (базовый язык с несколькими инструкциями). Я знаю, как сделать синтаксический анализатор, я уже сделал это в Perl. В статье я прочитал кое-что о компиляторе, компилятор сделан сам по себе. Например, компилятор C написан на...

9
Что является необдуманным примером того, что статическая проверка типов слишком консервативна?

В « Концепциях языков программирования» Джон Митчелл пишет, что статическая проверка типов обязательно является консервативной (чрезмерно строгой) из-за проблемы остановки. Он приводит в качестве примера: if (complicated-expression-that-could-run-forever) then (expression-with-type-error) else...

9
Т-диаграмма кросс-компилятора

Я изучаю Bootstrapping из Red Dragon Book Compilers и нашел T-диаграмму для кросс-компилятора довольно запутанной. Я не могу понять, что подразумевается под «Запустить compiler1 через compiler2». Может ли кто-нибудь дать лучшее объяснение, аналогию или пример, связанный с каким-то реальным...

9
Эквивалентность анализа потока данных, абстрактной интерпретации и вывода типа?

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