Введение

Язык программирования PL/0 — это язык программирования, разработанный Никлаусом Виртом как учебный язык, похожий на, но значительно более простой, чем Pascal, язык программирования общего назначения. Он служит примером построения компилятора. Впервые он был представлен в книге Никлауса Вирта «Алгоритмы + структуры данных = программы» в 1976 году. Язык обладает весьма ограниченным набором конструкций: в нём отсутствуют числа с плавающей точкой, очень мало базовых арифметических операций и нет управляющих конструкций, кроме блоков "if" и "while". Несмотря на то, что эти ограничения делают написание реальных приложений на этом языке нецелесообразным, они позволяют компилятору оставаться компактным и простым.

Использование в образовании

В основной статье о компиляторах отмечается вклад PL/0 в то, что этот язык представил несколько влиятельных концепций (постепенное уточнение, рекурсивный спуск, EBNF, P-код, T-диаграммы) и способствовал их распространению, обучая студентов использованию этих концепций. На протяжении последних трех десятилетий большинство университетских курсов по разработке компиляторов, использующих PL/0, строго придерживались методов, предложенных Виртом (см. ссылки ниже). Однако несколько лет назад некоторые курсы отошли от подхода Вирта, заменив классический метод рекурсивного спуска на (тем не менее классический) подход, характерный для Unix, с использованием lex и yacc. Лишь недавно появилась реализация (PL/0 Language Tools), которая, следуя этому пути, объединила современные концепции, такие как объектно-ориентированное программирование и шаблоны проектирования, с современным скриптовым языком (Python), позволяя студентам изучать исходный код реализации в современном стиле программирования.

Конструкция компилятора

В декабре 1976 года Вирт написал небольшую брошюру о построении компиляторов, содержащую полный исходный код компилятора PL/0. Правила синтаксиса, представленные выше, были взяты из первого издания книги Вирта Compilerbau. В более поздних изданиях этой книги (под влиянием его дальнейших исследований) Вирт изменил синтаксис PL/0, переведя написание ключевых слов, таких как const и procedure, в верхний регистр. Это изменение приблизило PL/0 к Modula 2. В то же время, друг и соратник Вирта К. А. Р. Хоар работал над своей влиятельной концепцией Communicating Sequential Processes, в которой восклицательный знак ! и вопросительный знак ? использовались для обозначения примитивов обмена данными. Вирт добавил оба этих символа в язык PL/0, но не описал их семантику в книге.