От ассемблера к C-компилятору

я разработал небольшой RISC в Verilog. Какие шаги я должен предпринять, чтобы создать компилятор c, использующий мой язык ассемблера? Или можно изменить обычный компилятор, такой как gcc, потому что я не хочу делать такие вещи, как компоновщик,...

Спасибо


person user3392008    schedule 07.03.2014    source источник
comment
Порт GCC и порт binutils — нетривиальная задача. Ваш набор инструкций подобен существующему процессору, который уже поддерживается?   -  person Rup    schedule 07.03.2014
comment
Был участником в течение дня, и первый вопрос, пожалуйста, создайте/измените компилятор C. Если бы и ответили, то это была бы плата дней работы минимум!   -  person Ed Heal    schedule 07.03.2014
comment
Думаю, вам лучше попробовать адаптировать LLVM/clang. Вам придется исследовать скрипты компоновщика и т. д., хотите вы этого или нет.   -  person Brett Hale    schedule 07.03.2014
comment
@EdHeal, будучи участником в течение дня, не обязательно означает, что он начал программировать в течение дня. ;)   -  person Devolus    schedule 07.03.2014
comment
@Devolus - я не это имел в виду. Когда врываешься в новую группу не прощупаешь немного?   -  person Ed Heal    schedule 07.03.2014
comment
Никогда не было причин быть членом, я всегда находил ответы, кроме сегодняшнего дня...   -  person user3392008    schedule 07.03.2014
comment
@EdHeal, когда я решил присоединиться к SO, я тоже использовал его уже несколько месяцев. Таким образом, на самом деле нет связи между датой присоединения и опытом работы с сайтом SO. Хотя соглашусь, что в 90% случаев так и кажется. :)   -  person Devolus    schedule 07.03.2014
comment
@Rup, это хорошее предложение! У меня был квазиуспешный перевод простых инструкций RISC (например, 8-битного ASM AVR с avr-gcc или MIPS) в байт-код VM собственной разработки.   -  person Morten Jensen    schedule 08.03.2014


Ответы (1)


Для этого вам нужно использовать немодифицированный C лексер + синтаксический анализатор (часто называемый внешним интерфейсом) и модифицированный компонент генерации кода (внутренний конец).

pycparser Эли Бендерски можно использовать в качестве внешнего интерфейса, а мини-компилятор Atul C можно использовать в качестве источника вдохновения для серверная часть, генерирующая код: http://people.cs.uchicago.edu/~varmaa/mini_c/

С помощью pycparser Эли Бендерски все, что вам нужно сделать, это преобразовать AST в граф потока управления (CFG) и сгенерировать оттуда код. Легче начать с поддержки подмножества C, чем полного шебанга.

Два инструмента написаны на Python, но вы не упомянули какие-либо настройки языка реализации :)

Я обнаружил, что большинство компиляторов с открытым исходным кодом (за исключением clang, кажется) слишком тесно связаны, чтобы легко модифицировать серверную часть. В Clang и особенно в GCC не так просто погрузиться, нигде НЕ так просто, как в двух вышеперечисленных. И поскольку синтаксический анализатор Эли выполняет полный C99 (он анализирует все, что я ему бросил), он кажется хорошим интерфейсом для дальнейшей разработки. Примеры проекта Github демонстрируют большинство функций проекта и его легко начать. Пример, который преобразует C в буквальный английский, заслуживает внимания, но может потребоваться некоторое время, чтобы полностью разобраться. В основном он обрабатывает любое выражение C, поэтому является хорошим справочником по работе с различными узлами AST.

Я также рекомендовал вышеперечисленные инструменты в своем ответе на этот вопрос: код

person Morten Jensen    schedule 07.03.2014