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

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

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

3
Разбор произвольных контекстно-свободных грамматик, в основном коротких фрагментов
Я хочу разобрать определенные пользователем доменные языки. Эти языки обычно близки к математическим обозначениям (я не разбираю естественный язык). Пользователи определяют свои DSL в нотации BNF, например так: expr ::= LiteralInteger | ( expr ) | expr + expr | expr * expr Подобные входные данные 1 + ( 2 …

6
Почему компиляторы создают ассемблерный код?
Ассемблер конвертирует язык ассемблера в машинный язык. Зачем компилятору конвертировать язык высокого уровня в ассемблер? Разве он не может напрямую преобразовать язык высокого уровня в машинный код?

2
Почему статическое одиночное назначение предпочтительнее стиля передачи продолжения во многих используемых в отрасли компиляторах?
Согласно странице Википедии о статическом одиночном назначении (SSA) , SSA используется крупными и известными проектами, такими как LLVM, GCC, MSVC, Mono, Dalvik, SpiderMonkey и V8, в то время как страница с проектами использует стиль прохождения продолжения. (CPS) немного не хватает в сравнении. У меня есть представление, что CPS предпочитают компиляторы …

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

1
Вывод типа с типами продукта
Я работаю над компилятором для конкатенативного языка и хотел бы добавить поддержку вывода типов. Я понимаю Хиндли-Милнера, но я изучаю теорию типов по ходу дела, поэтому не знаю, как ее адаптировать. Является ли следующая система надежной и достоверной? Термин - это литерал, композиция терминов, цитата из термина или примитив. e::=x∣∣ee∣∣[e]∣∣…e::=x|ee|[e]|… …


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

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

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

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

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

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

3
Как эта грамматика 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), я попытался построить его таблицу синтаксического анализа, но я получаю несколько продукций …

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

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.