Лекции по построению компилятора на Pascal
Все это будет рассмотрено в будущих главах. Когда мы закончим, вы будете иметь все
инструменты, необходимые для разработки и создания своего собственного языка и
компиляторов для его трансляции.
Я не могу спроектировать эти языки для вас, но я могу дать некоторые комментарии и
рекомендации. Я уже высказал некоторые из них в прошлых главах. Вы видели, например,
какие управляющие структуры я предпочитаю.
Эти конструкции будут частью создаваемых мной языков. К этому моменту я представляю
три языка, два из которых вы увидите в очередных главах:
TINY - минимальный, но пригодный для использования язык уровня Tiny Basic или Tiny C.
Он не будет очень практичным, но будет достаточно мощным, чтобы позволить вам писать и
запускать настоящие программы которые делают что-нибудь заслуживающее внимание.
KISS - язык, который я создаю для своего собственного использования. KISS предназначен
быть языком системного программирования. Он не будет иметь строгого контроля типов или
причудливых структур данных, но он будет поддерживать большинство вещей, которые я
хочу делать с языком более высокого уровня (HOL), за исключением возможно написания
компиляторов.
Я также играл в течение нескольких лет с идеей HOL-подобного ассемблера со
структурными управляющими конструкциями и HOL-подобными операциями присваивания.
Это фактически было стимулом для моего первоначального углубления в джунгли теории
компиляции. Этот язык возможно никогда не будет создан просто потому, что я узнал, что
проще реализовать язык типа KISS, который использует только подмножество инструкций
ЦПУ. Как вы знаете, ассемблер может быть предельно причудливым и нерегулярным, и
язык, который отображается в него один к одному, может быть настоящим вызовом. Однако
я всегда чувствовал, что синтаксис, используемый в стандартных ассемблерах тупой...
почему
##### MOVE.L A,B
лучше или проще для трансляции, чем
##### B=A?
Я думаю, было бы интересным упражнением разработка "компилятора" который дал бы
программисту полный доступ и к контролю над полным набором инструкций ЦПУ, и
позволил бы вам генерировать программы настолько же эффективные как язык ассемблер
без болезненного изучения набора мнемоник. Это может быть сделано? Я не знаю.
Настоящим вопросом может быть вопрос "будет ли полученный язык проще, чем
ассемблер?" Если нет, то в нем нет никакого смысла. Я думаю, что это может быть сделано,
но я полностью еще не уверен в том, как должен выглядеть синтаксис.
Возможно у вас есть некоторые комментарии] или предложения об этом. Буду рад услышать
их.
Вы возможно не будете удивлены узнав, что уже работал в большинстве тех областей,
которые мы рассмотрим. Я имею несколько хороших новостей: дела никогда не будут
намного более сложными, чем они были до этого. Возможно построить завершенный,
работающий компилятор для реального языка используя только те самые методы которые вы
изучили до этого. И это поднимет некоторые интересные вопросы.
ПОЧЕМУ ЭТО ТАК ПРОСТО?
Перед осуществлением этой серии я всегда думал, что компиляторы были просто
естественно сложными компьютерными программами... предельно вызывающими. Однако
то, что мы здесь делали обычно оказывалось совершенно простым, иногда даже
тривиальным.
Некоторое время я думал, что это было просто потому, что я еще не залез в глубь темы. Я
только охватил простые части. Я легко признаюсь вам что даже когда я начинал эту серию я