Подтвердить что ты не робот

Концепции, необходимые для создания IDE/компилятора

Когда дело доходит до создания IDE (например, SharpDevelop) или анализатора компилятора/языка, какие темы информатики мне нужно знать? Я не ожидаю полного списка углубленных уроков, а всего лишь список тем, которые принесли бы мне пользу в улучшении.

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

Спасибо

4b9b3361

Ответ 1

IDE, компилятор и отладчик - это три разных зверя.

Вот быстрый и слегка случайный выбор некоторых ссылок, которые я нашел интересными или вдохновляющими, когда вы думаете о создании инструментов моделирования для языков моделирования, которые находятся как можно ближе к IDE:

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

Ответ 2

Для реализации компилятора/языка вам потребуется фундаментальное понимание:

  • BNF и EBNF - Контекстно-свободные грамматики (правила синтаксиса)
  • Лексические аналитические методы и инструменты (Lex/Bison)
  • Методы анализа (например, рекурсивный допуск, LL, LR)

Ответ 3

Написание компиляторов и интерпретаторов: подход к разработке программного обеспечения [Мягкая обложка] Рональд Мак → это отличная книга, с которой можно начать. Он ведет вас через весь процесс построения компилятора и идеи с помощью отладчика и многое другое. В конце книги у вас будет хорошее представление о том, что делать, чтобы разветвляться самостоятельно.

Кроме того, вы можете захотеть взглянуть на языковые версии Patters, изданные PragProg.com.

Ответ 4

Если вы пишете компилятор, хороший курс по информатике в Теории языкового перевода или что-то подобное очень существенно. MIT Open Courseware предлагает "Computer Language Engineering" класс по этим строкам. Это должно научить вас концепции, которую упоминает mmattax и обеспечивает хорошее начало.

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

Ответ 5

Хорошо, чтобы разработать компилятор, вам нужно понять следующие темы

  • конечная автоматизация (DFA)
  • контекстно-свободная грамматика (вам нужно определить грамматику перед началом кодирования, это синяя печать вашего языка/компилятора)

после выполнения теоретической части вам необходимо разработать следующие компоненты для компилятора

  • Лексический анализатор (проверьте токены для вас)
  • Parser (подтвердите предложения вашего языка)
  • Схема перевода (конвертируйте код (высокий уровень) в 3 адресных кода (код машинного языка))
  • Виртуальная машина (код Generation/product actual out of your code)

Примечание: входной сигнал каждого компонента вводится в следующий компонент, а вход Lexical Analyzer - ваш фактический код и в основном компилятор разрабатывается с использованием формального метода (процедурный шаблон проектирования)

Ответ 6

Извините, но ответ "Вся компьютерная наука и годы практического опыта".

Слишком большой предмет для обычных смертных и затмений, intellij, netbeans и Visual... очень хорошо освещает этот предмет.

Посмотрите на что-то меньшее и более достижимое, как плагин eclipse для чего-то, что вас интересует.