У меня есть опыт в отношении фраз компилятора, и я заинтересован в языках программирования & Поле компиляторов, и я надеюсь, что кто-нибудь даст мне некоторое объяснение, что такое хороший подход к написанию нового компилятора с нуля для нового языка программирования? (Я имею в виду ШАГИ).Каков хороший подход для создания нового компилятора?
ответ
Первый шаг - прочитать Dragon Book.
Он предлагает хорошее введение ко всему полю здания компилятора, но также идет достаточно подробно, чтобы фактически создать собственный.
Что касается следующих шагов, я предлагаю следовать главам книги. Он не написан как учебник, но тем не менее предлагает много практических советов, которые делают его идеальным центром для ваших собственных идей и исследований.
Я бы посмотрел на интеграцию вашего langauge/front end с картой компилятора GNU.
Таким образом, вы только (ТОЛЬКО!) Должны написать синтаксический анализатор и переводчик в формате переносного объекта gcc. Вы получаете бесплатно оптимизатор, создание кода объекта для чипа выбора, компоновщика и т. Д.
Другой альтернативой было бы нацелить Java JVM, виртуальная машина хорошо документирована, а набор команд JVM намного более устойчив, чем машинный код x86.
Зависит от того, что вы хотите сделать. Если вы действительно хотите знать, как все работает с нуля, GCC - очень запутанный способ. –
Пожалуйста, не используйте Книгу Дракона, она старая и в основном устаревшая (и использует странные имена для большей части материала).
Для книг я бы рекомендовал книгу тигра Apple или компилятор Cooper's Engineering. Я настоятельно рекомендую вам использовать структуры, как llvm, поэтому вам не придется повторно реализовать кучу материала для генерации кода и т.д.
Вот учебник для создания вашего языка с LLVM: http://llvm.org/docs/tutorial/
Мне удалось написать компилятор без какой-либо конкретной книги (хотя в прошлом я читал некоторые книги компиляторов, просто не в полной мере).
Первое, что вам нужно сделать, это сыграть с любыми инструментами типа «Компилятор компилятора» (flex, bison, antlr, javacc) и заставить вашу грамматику работать. Граммары в основном просты, но всегда есть ничтожные биты, которые мешают и разрушают все. Особенно такие вещи, как выражения, приоритет и т. Д.
Некоторые из более старых более простых языков проще по какой-либо причине. Это делает парсеры «Just Work». Рассмотрим вариант Паскаля, который может обрабатываться исключительно рекурсивно.
Я упоминаю об этом, потому что без вашей грамматики у вас нет языка. Если вы не можете правильно разобрать и lex, вы не получите ничего очень быстрого. И просмотр дюжины строк кода примера на вашем новом языке превращается в множество токенов, а узлы синтаксиса на самом деле действительно потрясающие. В «вау, это действительно работает». Это буквально почти «все работает» или «ничего из этого не работает», особенно в начале. Как только он на самом деле работает, вы чувствуете, что сможете реально его снять.
И в какой-то степени это верно, потому что как только вы получите эту часть, вам нужно получить свое основное время выполнения. После того, как вы скомпилируете «a = 1 + 1», основная часть новой работы стоит за вашим, и теперь вам просто нужно реализовать остальных операторов.В основном это упражнение по управлению таблицами и ссылками поиска, а также представление о том, где вы находитесь в любой момент в процессе.
Вы можете работать самостоятельно, используя новый синтаксис, инновационную среду выполнения и т. Д. Но если у вас есть время, возможно, лучше всего сделать язык, который уже был выполнен, просто чтобы понять и реализовать все этапы , и подумайте, если бы вы писали язык, который действительно хотите, как бы вы делали то, что делаете с этим существующим, иначе.
Есть много механиков для написания компилятора и только что успешно завершение этого процесса даст вам больше уверенности, когда вы захотите вернуться и сделать это снова с помощью своего собственного нового языка.
- 1. Каков подход для создания повторяющихся нейронных сетей?
- 2. Каков наилучший подход для создания таблиц агрегации?
- 3. Что такое хороший подход для создания приложения календаря/события (просмотр)?
- 4. подход для создания функциональности для добавления нового сотрудника
- 5. Что бы вы использовали для создания нового компилятора для .NET?
- 6. Класс пользователя, хороший подход?
- 7. Каков подход для создания разных AntiForgeryToken для каждого пользователя
- 8. Каков наилучший подход для создания iphone-клиента для приложения rails?
- 9. Каков наилучший подход для создания приложений для Android?
- 10. Хороший подход/дизайн для unittest django application
- 11. Каков наилучший способ создания нового .NET-проекта?
- 12. Каков хороший способ создания отчетов о доступности для веб-приложения?
- 13. Каков наилучший подход для создания настраиваемого контроллера панели вкладок?
- 14. Каков наилучший подход для создания визуально привлекательных приложений Windows?
- 15. Каков наилучший подход для создания общей информационной модели?
- 16. Каков наилучший подход для создания динамических запросов LINQ?
- 17. Каков наилучший подход для создания всплывающих окон MDI в WPF?
- 18. Каков наилучший подход для создания привязки во время выполнения?
- 19. Каков хороший подход к решению этой задачи программирования?
- 20. Каков наилучший подход для ANTLR4?
- 21. Каков наилучший подход для фильтрации?
- 22. Каков наилучший способ создания нового поля для UserAuth?
- 23. Хороший подход для схемы токена веб-API?
- 24. Хороший подход для обнаружения линий в изображении?
- 25. Хороший исходный код для компонентов компилятора
- 26. Подход Eclipse против Netbeans для компилятора GWT
- 27. Тип машинописного нового компилятора
- 28. Dynamic sql - Это хороший подход?
- 29. Метод, включающий SQLConnection - хороший подход?
- 30. Замок в свойствах, хороший подход?
Пожалуйста, ребята, вы должны * на самом деле * прекратить цитирование книги драконов ... Это одна из худших книг компилятора. Вы можете привести Аппеля, Купера и т. Д. Но * пожалуйста * не Книга Дракона. – tonfa
«Современная реализация компилятора» (Appel) очень плохо написана, а «Engineering Compiler» (Cooper) не очень подходит для новичков. –
Это не может быть хуже, чем тайная Книга Дракона. Я лично не нашел книгу Тигра плохо написанной, хотя я никогда ее не читал с прикрытия, я нашел, что у нее много хороших идей. – tonfa