Atlas Autocode ( AA ) [1] [2] — язык программирования , разработанный около 1963 года в Манчестерском университете . Вариант языка ALGOL , разработанный Тони Брукером и Дерриком Моррисом для компьютера Atlas . Первоначальные компиляторы AA и AB были написаны Джеффом Ролом и Тони Брукером с использованием компилятора Brooker-Morris Compiler , с более поздней реализацией non-CC (ABC), написанной вручную Джеффом Ролом. [3]
Слово Autocode было в основном ранним термином для языка программирования . Различные автокоды могли сильно различаться.
AA был структурированным блочным языком, который включал явно типизированные переменные , подпрограммы и функции. Он опускал некоторые возможности ALGOL, такие как передача параметров по имени , что в ALGOL 60 означает передачу адреса памяти короткой подпрограммы ( thunk ) для пересчета параметра каждый раз, когда он упоминается.
Компилятор AA мог генерировать проверку диапазона для доступа к массиву и позволял массиву иметь измерения, которые определялись во время выполнения , т. е. массив мог быть объявлен как , где и были вычисляемыми значениями.integer array Thing (i:j)
i
j
Высокоуровневые процедуры AA могут включать машинный код , чтобы сделать внутренний цикл более эффективным или выполнить некоторую операцию, которую в противном случае было бы трудно выполнить. [1]
AA включила complex
тип данных [1] для представления комплексных чисел , отчасти из-за давления со стороны электротехнического отдела, поскольку комплексные числа используются для представления поведения переменного тока . Мнимая единица квадратный корень из -1 была представлена как i
, которая рассматривалась как фиксированная комплексная константа = i .
Тип complex
данных был исключен, когда Atlas Autocode позже развился в язык Edinburgh IMP . IMP был расширением AA и использовался для написания операционной системы Edinburgh Multiple Access System (EMAS) .
Помимо того, что AA известен как прародитель IMP и EMAS, он также известен тем, что обладал многими функциями оригинального Compiler Compiler . Вариант компилятора AA включал поддержку времени выполнения для рекурсивного спускового анализатора сверху вниз . Стиль анализатора, используемый в Compiler Compiler, непрерывно использовался в Эдинбурге с 60-х годов почти до 2000 года.
Другие автокоды были разработаны для компьютера Titan , прототипа Atlas 2 в Кембридже и Ferranti Mercury.
Синтаксис Atlas Autocode был во многом похож на ALGOL, хотя на него повлияло устройство вывода, имевшееся в распоряжении автора, Friden Flexowriter . Таким образом, он допускал символы типа ½
for .5
и верхний индекс 2
for в степени 2. Flexowriter поддерживал перечеркивание, и, таким образом, AA делал то же самое: до трех символов могли быть перечеркнуты как один символ. Например, набор символов не имел ↑
символа, поэтому возведение в степень было перечеркиванием |
и *
. Вышеупомянутое подчеркивание зарезервированных слов (ключевых слов) также могло быть выполнено с помощью перечеркивания. Язык подробно описан в справочном руководстве Atlas Autocode. [1]
Другие символы Flexowriter, которые нашли применение в AA, были: α
в числах с плавающей точкой, например , 3.56α-7
для современного 3.56e-7
; β
для обозначения второй половины 48-битного слова памяти Atlas ; π
для математической константы пи .
Когда AA был портирован на компьютер English Electric KDF9 , набор символов был изменен на International Organization for Standardization (ISO). Этот компилятор был восстановлен со старой бумажной ленты Эдинбургским проектом компьютерной истории и доступен онлайн, как и высококачественное сканирование оригинальной Эдинбургской версии руководства Atlas Autocode. [2]
Ключевые слова в AA можно было отличить от остального текста, подчеркнув их, что было реализовано с помощью перечеркивания в Flexowriter (сравните с жирным шрифтом в ALGOL). Также было два режима правки . Во-первых, был режим «uppercasedelimiters», в котором все заглавные буквы (вне строк) обрабатывались как подчеркнутые строчные. Во-вторых, в некоторых версиях (но не в оригинальной версии Atlas) можно было перечеркивать ключевые слова, помещая %
перед ними знак «», например, ключевое слово endofprogramme
можно было набрать как %end %of %programme
или %endofprogramme
. Это значительно сокращало набор текста, поскольку требовался только один символ, а не перечеркивание всего ключевого слова. Как и в ALGOL, в языке не было зарезервированных слов , поскольку ключевые слова определялись подчеркиванием (или перечеркиванием), а не распознаванием зарезервированных последовательностей символов. В операторе есть как ключевое слово, так и переменная с именем .if token=if then result = token
if
if
Как и в ALGOL, AA допускал пробелы в именах переменных, например integer previous value
. Пробелы не имели значения и удалялись перед синтаксическим анализом на тривиальном этапе предварительного лексического анализа, называемом « реконструкцией строки ». В приведенном выше примере компилятор увидел бы « ». Пробелы были возможны частично из-за того, что ключевые слова различались другими способами, а частично потому, что исходный текст обрабатывался безсканирующим синтаксическим анализом , без отдельной фазы лексического анализа, что позволяло лексическому синтаксису быть контекстно-зависимым.iftoken=ifthenresult=token
Синтаксис выражений позволяет опускать оператор умножения, например, 3a
рассматривался как 3*a
, и a(i+j)
рассматривался так, как a*(i+j)
будто a
не является массивом. В неоднозначных случаях бралось максимально длинное возможное имя ( maximum munch ), например, ab
не рассматривался как a*b
, независимо от того, были ли объявлены a
и .b