Практическое погружение в метакомпиляторы
Практически у каждого из наших читателей с образованием в ИТ был курс теории трансляции или компиляторов. Помните, как в рамках этого курса у доски расписывали порождение строк формальными грамматиками, заданными в EBNF? Как изучали нисходящий и восходящий разборы, упражнялись с генераторами парсеров вроде YACC (BISON)?
Казалось очень необычным, что программа по описанию грамматики может породить достаточно сложный парсер и даже примитивный транслятор входного языка. Удивительно, но идеям метакомпиляторов, т.е. программ, которые создают по формальному описанию компиляторы, уже много лет. Например, метакомпилятор META II был описан в 1964 году, только представьте, как давно это было, и какими были тогда компьютеры!
Еще более удивительно, что META II или его ближайшие потомки могут быть полезны нам и сегодня — например, для прототипирования или быстрой разработки предметно-ориентированных языков. В статье «Tutorial: Metacompilers Part 1» можно в интерактивной форме познакомиться с META II и его внутренним устройством. К концу прочтения материала читатель разработает компилятор META II с расширениями на нём самом.
Несмотря на свою простоту, эта компактная система — чудо инженерной мысли. Код метакомпилятора, записанный на специализированном низкоуровневом языке, невероятно компактен и переносим между системами, но позволяет строить довольно нетривиальные трансляторы за минуты!
Идеи META, конечно, никуда не пропали. Например, они живы в OMeta, современном объектно-ориентированном метакомпиляторе.
#digest
Post #181
1.71K