Введение

Синтаксический/семантический язык (S/SL) — это исполняемый язык высокого уровня для создания рекурсивных нисходящих парсеров, семантических анализаторов и генераторов кода, разработанный Джеймсом Корди, Риком Холтом и Дэвидом Вортманом в Университете Торонто в 1980 году. S/SL — это небольшой язык программирования, поддерживающий эффективную рекурсию и определяющий имена и значения токенов ввода, вывода и ошибок, семантические механизмы (интерфейсы классов, методы которых фактически являются переходами к подпрограммам на языке-хосте, но обеспечивают хорошую абстракцию в псевдокоде) и псевдокодную программу, определяющую синтаксис входного языка на основе потока принимаемых программой токенов. В язык входят конструкции для чередования, управления потоком выполнения и просмотра следующего символа. Процессор S/SL компилирует этот псевдокод в таблицу (байт-код), которая интерпретируется исполнителем таблиц S/SL (интерпретатором). Псевдокод обрабатывает входной язык в стиле рекурсивного спуска LL(1), но расширения позволяют относительно легко обрабатывать любой язык LR(k). S/SL разработан для обеспечения эффективного восстановления и исправления синтаксических ошибок. Он мощнее и прозрачнее, чем Yacc, но может работать медленнее. "Семантические механизмы" S/SL расширяют его возможности на все фазы компиляции, и он использовался для реализации всех фаз компиляции, включая сканеры, парсеры, семантические анализаторы, генераторы кода и интерпретаторы виртуальных машин в многопроходных языковых процессорах. S/SL использовался для создания коммерческих компиляторов для языков PL/I, Euclid, Turing, Ada и COBOL, а также интерпретаторов, процессоров команд и специализированных языков различных типов. Он является основной технологией, используемой в компиляторе IBM ILE/400 COBOL, а агент передачи почты ZMailer использует S/SL для определения как языка обработки почтовых маршрутов, так и для проверки адресов электронной почты RFC 822.