Алгол

Реферат на тему: algol. скачать бесплатно

How To Program In Algol Programming Language For MainFrame Computers

To make sure that we are on the same page, we are going to use ALGOL 68.

Program Structure

The first thing that you need to learn is the program structure. Each of the ALGOL 68 programs starts with “begin” and then finishes with “end”.

The syntax would read like below.

begin            Insert code here end

Apart from that, an ALGOL 68 program can do the following:

  • Symbols can be written in boldface type so that they are distinguishable from keywords
  • Carriage returns and space can be used to improve readability
  • Comments can be represented by four symbols: comment, co, #, and ¢.

Data and Decelerations

ALGOL 68 uses modes instead of “type” to detonate the data type. For example, there is Boolean, character, real, and integer. Just like modern programming languages, these variables need to be declared before they can be used.

begin
real a,b,c,d,
bool nit
int x,y,z,employee
end

Statements

Next, we come to statements. In ALGOL 68, every statement yields value. This is because ALGOL is an expressive language where the value is shown on the right-hand side of the assignment.

Apart from that, it supports if statements, for statements, case statements, while statements, and goto statements. If you ever programmed before, you will find all of these statements familiar to you.

if x> 5then print (“impressive”) else print (“nope”)fi 

We also have else-if which is represented as the elif keyword. It can be used as below.

if word = “abc”

            then print(“new born”)            elif word = “pizza”              then print (“teen”)            elif word = “money”              then print (“adult”)              else print (“alien”)fi

You can run conditions based on the if statement. Moreover, you can also use loops to do an operation multiple times.

Let’s see a for loop example.

for k from 1 by 1 to j+2do print (new line) od; 

In contrast, the while- do loop works as below.

while x<y V a<0            do x:= x+ 1;                 y = y+ 1;     print((i,j))            od;

Modes in Algol 68

There are multiple modes that are part of the ALGOL 68 programming languages. These modes are simply data types and can be divided into primitive modes, array modes, structured modes, united modes, reference-to, and procedure modes.

These data types enable you to handle the different data in your ALGOL 68. As a programmer, you need to decide beforehand what type of data type you want to use, depending on your approach.

What’s Next?

This is just the beginning when it comes to programming in ALGOL programming language for mainframe computers. With the above knowledge, you can get started with the language itself.

So, what program are you going to build for the mainframe using ALGOL 68? Comment below and let us know.

About the Author

ByteScout Team of Writers

ByteScout has a team of professional writers proficient in different technical topics. We select the best writers to cover interesting and trending topics for our readers. We love developers and we hope our articles help you learn about programming and programmers.
 

AUTOMATE WITH PDF.CO API PLATFORM

Хронология символов ALGOL

АЛГОЛы были задуманы в то время, когда наборы персонажей были разнообразными и быстро эволюционировали; Кроме того, ALGOLs были определены так, чтобы требовались только прописные буквы.

1960: IFIP. Язык и отчет Algol 60 включали несколько математических символов, которые доступны на современных компьютерах и операционных системах, но, к сожалению, в то время не поддерживались в большинстве систем. Например: ×, ÷, ≤, ≥, ≠, ¬, ∨, ∧, ⊂, ≡, ␣ и.

1961 сентябрь: ASCII — набор символов ASCII, а затем на ранней стадии разработки имел добавленный символ \ (Back slash) в поддержку булевых операторов ALGOL / \ и \ /.

1964: ГОСТ. Советский стандарт 1964 года ГОСТ 10859 разрешил кодирование 4-битных, 5-битных, 6-битных и 7-битных символов в ALGOL.

История

ALGOL был совместно разработан комитетом европейских и американских компьютерщиков на встрече в 1958 году в Швейцарском федеральном технологическом институте в Иче (ETH ich; cf. ALGOL 58). В ней были указаны три различных синтакса: эталонный синтакс, синтакс публикации и синтакс реализации. Различные синтаксы позволяли ему использовать различные имена ключей и конукции для десятичных точек (запятые против периодов) для разных языков.

ALGOL использовался в основном учеными-исследователями в США и Европе. Его использованию в коммерческих приложениях мешало отсутствие в его описании стандартных средств ввода/вывода и отсутствие интереса к языку со стороны крупных компьютерных вендоров, отличных от Burro s Corporation. ALGOL 60, однако, стал стандартом для публикации algorithms и оказал глубокое влияние на будущее развитие языка.

Семейное древо династий языков программирования Algol, Fortrun и COHARI

Джон Бэкус разработал метод нормальной формы Бэкуса для описания языков программирования специально для ALGOL 58. Он был пересмотрен и расширен Петером Науром для ALGOL 60, а в Donald Knuth’s переименована в форму Backus — Naur.

Питер Наур: «Будучи редактором ALGOL Bulletin I был втянут в международные дискуссии языка и был выбран в члены европейской языковой дизайнерской группы в ноябре 1959 года. В этом качестве я был редактором доклада ALGOL 60, подготовленного в результате встречи ALGOL 60 в Париже в январе 1960 года «.

На совещании в Париже (с 1 по 16 января) присутствовали следующие лица:

  • . В, Петер Наур, Х.Рутисхаузер, Х.Самельсон, Бернард Вокез, Хаан ван Вийнгаарден и Майкл Вудгер (из Европы) , Йен Грин, Чарльз Ке, Джон Маккарти, Алан Дж. Перлис, и Джозеф Генри Кстейн (из США).

Алан Перлис дал видное описание встречи: «Встречи были экс-, бесконечными и изнурительными. Один стал агватированным, когда хорошие идеи были отвергнуты вместе с плохими другими. Тем не менее, делигенция в течение всего периода. Химия 13 была превосходной «.

ALGOL 60 вдохновил многие языки, которые следовали за ним. Хур заметил: «Вот язык настолько опередил свое время, что это было не только усовершенствование своих преддатчиков, но и почти всех его преемников». Язык программирования Scheme, вариант Lisp, принявший блочную структуру и лексическую область ALGOL, также принял формулировку «Пересмотренный отчет о схеме Algorithmic языка» для своих стандартов в HOMAGE AL.

ALGOL и исследование языка программирования

Как отметил Питер Ланьо, ALGOL был первым языком, который сочетал бесшовно непроницаемые эффекты с (call-by-name) lambda calculus. Пожалуй, самая элегантная формализация языка обусловлена Джоном К. Рейнольдсом, и он лучше всего демонстрирует свою синтактическую и семантическую чистоту. Идеализированный ALGOL Рейнольдса также выдвинул дологическую аргументацию относительно пригодности локальных эффектов в контексте языков call-by-name, в отличие от глобальных эффектов, используемых языками call-by-value, такими как ML. Концептуальная интегральность языка сделала его одним из основных объектов семантических исследований, наряду с программированием вычислительных функций (PCF) и PCML.

Хронология IAL

На сегодняшний день было по меньшей мере 70 дополнений, удлинений, vations и суббалангов Algol 60.

Диалекты Burro s включали специальные диалекты Bootstro, такие как ESPOL и NEWP. Последний до сих пор используется для системного программного обеспечения Unisys MCP.

History[]

An earlier Algol 58, also called IAL, was defined by IFIP (International Federation for Information Processing), but this language was so heavily reworked during 1960 that the new language Algol 60 was essentially a new language. Algol 58 didn’t have blocks.

Algol 60 was popular both for algorithm publishing, and by implementations of which none was really compatible to any other implementation. Many Algol 60 derived languages occured for a long time.

In 1967 Dahl and Nygaard published the last grand Algol 60, called Simula 67. It contained classes that was later copied by Stroustrup into C++.

In 1968 IFIP published a new language called Algol 68. The new language was nothing like any earlier Algol and was heavily criticised for being an entirely new language with no abstractions inherited from Algol 60, and for being very hard to implement. Thereby the Algol 60 chain was essentially broken, but some superficial traits from Algol 60 were borrowed over to the language BCPL and it’s extremely successful successor C.

References

The ELLA and A68toC source is available from:

https://cs.nyu.edu/courses/spring02/G22.3130-001/ella/

Algol 68-R included with the GEORGE 3 Emulator on the BCS Software Preservation and Machine Emulation pages.

http://sw.ccs.bcs.org/CCs/g3/index.html

Kevlin Henney. Procedural Programming: It’s Back? It Never Went Away. From the 2018 ACCU Conference.

This talk has a good 10-minute account of Algol 68 from about 12 minutes in.

Published in the

Algol Bulletin

, archived online at:

http://archive.computerhistory.org/resources/text/algol/algol_bulletin/A31/P111.HTM

The original report can be found here, scanned to PDF (without OCR):

http://web.eah-jena.de/~kleine/history/languages/Algol68-Report.pdf

http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2016/p0305r0.html

Peck, J.E.L., ed. (1970),

Proceedings of the IFIP working conference on ALGOL 68 Implementation

, Munich: North-Holland, ISBN 0-7204-2045-8. Available online at:

http://www.softwarepreservation.org/projects/ALGOL/paper/ALGOL_68-Implementation.pdf

Revised Report on the Algorithmic Language Algol 68

. Edited by van Wijngaarden, et al. Springer-Verlag (1976). An HTML version is available at:

https://jmvdveer.home.xs4all.nl/en.post.algol-68-revised-report.html

The Software Preservation Society pages on Algol 68

http://www.softwarepreservation.org/projects/ALGOL/algol68impl/

Bjarne Stroustrup.

The Design and Evolution of C++

. Addison Wesley (1994).

Bjarne Stroustrup.

The C++ Programming Language

, 4th Edition. Addison Wesley (2013). Sec. 1.2.2.

Algol 68 Genie. Marcel van der Veer.

https://jmvdveer.home.xs4all.nl/en.algol-68-genie.html

IFIP Working Group 2.1:

https://en.wikipedia.org/wiki/IFIP_Working_Group_2.1

ALGOL 68-R:

https://en.wikipedia.org/wiki/ALGOL_68-R

AlLGOL 68:

https://en.wikipedia.org/wiki/ALGOL_68


Daniel James

Daniel James has carried on programming in a variety of languages ever since that first brush with Algol 68 in 1974, and the sparkle has never quite worn off. He sometimes wonders how his life would have turned out if the friend who introduced him to computing had been a FORTRAN user, as all good scientists were supposed to be.

Понадобилось много считать — засели за ЭВМ

Баллистика — это тот узел, куда стягиваются практически все характеристики изделия (так в советское время маскировали слова «ракета» и «космический аппарат») — весовые, энергетические, многочисленные параметры системы управления — и где должны были быть надежно определены его тактико-технические данные: дальность полета (параметры орбиты), «полезный» груз, рассеивание у цели. Простое перечисление характеристик, которые надо учесть, показывает, что баллистические расчеты очень трудоемкие. Поэтому с решением баллистических задач, задач управления динамикой полетов в Советском Союзе связано начало применения вычислительной техники и развитие нового научного направления — программирования, а также разработка средств описания способов решения задачи — различных алгоритмических языков. Ранее вычислительная техника нашла применение для выполнения расчетов ядерщиков.

Структурированный язык Паскаль — 1973 г.

Язык программирования Паскаль был разработан профессором кафедры вычислительной техники Швейцарского Федерального института технологии
Николасом Виртом в 1968 году как альтернатива существующим и все усложняющимся языкам программирования, таким, как PL/1, Algol, Fortran.
Интенсивное развитие Паскаля привело к появлению уже в 1973 году его стандарта в виде пересмотренного сообщения,
а число трансляторов с этого языка в 1979 году перевалило за 80.

В  начале 80-х годов Паскаль еще более упрочил свои позиции с появлением трансляторов MS-Pascal и Turbo-Pascal для ПЭВМ.
С этого времени Паскаль становится одним из наиболее важных и широко используемых языков программирования.
Существенно то, что язык давно вышел за рамки академического и узко профессионального интереса
и используется в большинстве университетов высокоразвитых стран не только как рабочий инструмент пользователя.

Важнейшей особенностью Паскаля является воплощенная идея структурного программирования.
Другой существенной особенностью является концепция структуры данных как одного из фундаментальных понятий.

Всё о Паскале

Basic types

Data types in Algol 68 are called

s. The

s provided as standard are mostly unsurprising (see Table 1).

Signed Integer. Single machine word.
Single-precision floating point number.
Complex number.
Binary value, packed Booleans.
Packed characters (provided for efficiency on architectures that are not byte-addressable, such as the ICL1900)
All of the above modes may be prefixed with LONG or LONG LONG to get double or higher precision, depending on the implementation.
Character. Implementation defined representation.
Boolean value
Table 1

Additional

s are defined in terms of these simple types. A

declaration associates an identifier with a

as an alias for the full definition.

Юношеское увлечение стало специальностью на всю жизнь

1960 год для меня ознаменован тремя событиями. В мире — опубликовано «Сообщение об алгоритмическом языке Алгол 60», в стране — выпущена первая заводская серия из четырех вычислительных машин М-20, одна из которых попала к нам в ОКБ, во мне — созрело решение посвятить себя впредь уже не баллистике, а программированию. Надо сказать, что в это время работы под управлением С. П. Королева по подготовке полета Юрия Гагарина шли полным ходом и сектор баллистики и я принимали в этих работах самое непосредственное участие. Однако к тому моменту в секторе выросло немало способных инженеров, на них можно было положиться. А отличительной чертой Королева было умение найти для каждого сотрудника место работы, на котором тот мог принести наибольшую пользу. Подчас кадровые перемещения, казавшиеся неожиданными, приносили удивительный эффект. Так произошло и со мной. Сергей Павлович, вероятно, не мог не заметить, насколько я был поглощен и увлечен проблемами использования вычислительной техники. Поэтому одобрил мой переход из отдела динамики на заведование вычислительным центром, насчитывавшим примерно 300 человек и включавшим в себя и группу программирования, созданном в ОКБ в конце пятидесятых годов.

Transput

Transput is the word used in the Algol 68 reports to refer to both input and output.

One of the big shortcomings that was recognized in Algol 60 was its lack of any standardized i/o system. The designers of Algol 68 addressed this lack by introducing a standard system for both formatted and formatless output. We have already seen the procedure

, which accepts any simple argument and outputs it in a standard way. This tends not to be very pretty as, for example, numbers are output in their maximum width and precision. This output can be tamed somewhat using built-in functions

,

, and

that convert numbers to strings with specified width and precision.

There is also a system for formatted output that gives the programmer complete control over the format of the output by means of a format designator. This is similar to the format string of C’s

, but is a special Algol68

type, delimited by

characters, and can be evaluated at compile-time for efficiency. A

consists of one or more ‘pictures’, separated by commas, each of which describes the layout of a single item.

Formatless input and output are achieved using the functions

and

. We have already seen the

function, which is equivalent to

but always uses the default standard output channel called

(similar to

in C), there is also a

function that is equivalent to

using

. Formatted i/o uses

and

(and

and

).

These three produce identical output on

:

  put( stand out, (i, blank, r, newline ));
  print(( i, blank, r, newline ));
  printf(( $gx,gl$, i, r ))

If

is an integer with the value 42 and

is a

with the value 22/7 then this would produce three identical lines of:

  +42 +3.14285714285714e  +0

In the

and

cases, the list of items to be printed are enclosed in brackets because they are conceptually an array of values to be output. These include blank and newline, which are

functions that are called to manipulate the output stream.

In the

case, the argument list begins with a

containing two pictures using

tags meaning that the values should be printed in the same default format as is used for formatless output, and

and

tags that supply the blank and newline.

Printing values without formatting is not the point of formatted output, of course, and one might more typically see something like

  printf(( $4z-dx,+3d.5dl$, i, r ))

The format string contains two pictures. The first depicts an integer with 4 digits that will be printed as blanks if they are all leading zeros (four

tags) followed by one digit that will always be visible (a

tag) and a space (

tag), with a sign character that will be a blank if the value is positive immediately to the left of the first non-zero digit (

tag) and then a blank (

tag). The second picture depicts a real number with a sign always shown (

tag), and with three digits (three

tags) before and five digits after (five

tags) a decimal point (

tag), and then a newline (

tag).

With the values of

and

above, this would produce:

  42 +003.14286

Listing 2 shows some examples of formatted output.

An expression-oriented, block-structured, procedural language

Algol 68 is an ‘expression-oriented’ language in that almost every statement – what the Revised Report calls a

unit

(the original report used the term ‘unitary clause’) – delivers a value, and so can be treated as an expression. Every expression can also legally be used as a statement. If a

unit

has no value to deliver, it returns the special type

. If an expression that yields a value but doesn’t do anything with it, such as

  41+1

appears as a statement on its own, the compiler is likely to offer a warning that the result is to be discarded, but the code is legal.

Declarations aren’t classed as

unit

s, and aren’t expressions. A sequence consisting of

unit

s or declarations and

unit

s separated by semicolons is called a

series

(originally ‘serial clause’) and has the value of its last

unit

. Note that the semicolon is a separator, not a terminator: there shouldn’t be one after the last

unit

in a

series

.

Algol 68 is a block-structured language in that a program is composed from nested lexical blocks. Each new block introduces a lexical scope that limits the lifetime and visibility of constructs declared within that scope. Each new scope inherits from any containing scope. A block – and everything it contains – is syntactically a

unit

whose value is the value of the last statement in the block.

A

block

may simply be one or more statements enclosed between

and

, or may be a conditional such as

or

, or a loop.

Algol 68 is a procedural language in that its programs are built-up from procedures. A

procedure

in Algol 68 may be a function that returns a result, or may be a pure procedure that returns no result, in which case its return type is specified as

. The body of a procedure is a

unit

.

As is the case in Algol 60 and some other languages (such as Pascal), but not C or C++ (at least until lambda functions were introduced in C++11) procedures in Algol 68 do not have to be declared at the outermost lexical scope but can be declared within a program block, even a block of another procedure.

Algol 68 also supports user-defined operators, which are defined identically to procedures except that operators can have only one or two arguments. The user can set the priority (from 1 to 9) of an operator symbol, and can define new operator symbols. Operators can be overloaded, however, while procedures cannot.

“Языки” ALGOL

Семейство языков программирования ALGOL было формально определено в так называемом эталонном языке, в то время как язык публикации использовался для публикации кода, а аппаратный язык представлял код как написанный для конкретной платформы, который, следовательно, может быть скомпилирован и выполнен. Одна из основных областей, в которых эти языки различаются – это представление ключевых слов, которые в АЛГОЛе не являются зарезервированными словами, поэтому требуется средство, например, для различия  как утверждения и  как идентификатора, такого как имя функции или переменной (признаем, что это не очень хорошая идея). Такие конвенции, как подчеркивание или символ подчеркивания, использовались в языке ссылок, но поскольку он предназначен в основном для использования писателями компиляторов, а не программистами, мы будем удобно игнорировать его.

Сегодня язык публикации и аппаратный язык часто взаимозаменяемы, но так было не всегда. Обычным способом публикации кода АЛГОЛ было использование прописных букв для ключевых слов и строчных букв для идентификаторов. Этой традиции придерживаются в более поздних реализациях, таких как Algol 68 Genie, и именно так мы будем показывать код здесь. Однако в ранние времена было невозможно использовать эту традицию для аппаратного языка, поскольку большинство считывателей карт мейнфреймов и линейных принтеров не поддерживали нижний регистр.

Большинство ранних пользователей АЛГОЛ поставляли свои программы на мейнфрейм в виде стопки перфокарт, как эта одна содержит одну строку кода ALGOL 60.

Для аппаратного языка было принято решение окружать ключевые слова одинарными кавычками. Так, например, утверждение  превращается в . В результате одинарные кавычки уже нельзя было использовать нормально, поэтому открывающие и закрывающие кавычки превратились в  и . Это не улучшило читабельность, поэтому, например, для печати текстовой строки вам может понадобиться такое причудливое выражение, как . Мимоходом вы заметили, что  не заключено в одинарные кавычки, что, вероятно, покажется вам удивительным.

Это потому, что формальное определение АЛГОЛа не включало операторов ввода/вывода, оставляя его реализацию на усмотрение пользователя в виде функции для конкретного оборудования. Последовавшее за этим отсутствие переносимости было еще одной часто упоминаемой причиной отсутствия успеха АЛГОЛа, за исключением того, что он оказал большое влияние на будущие языки. Еще кое-что, что появилось в эталонном языке, но было изменено в аппаратном, чтобы справиться с ограниченным набором символов 60-х годов, были такие символы, как   и  используемые в условных выражениях. Необычные символы использовались и для других целей, но мы не будем в них углубляться. Интересно, что несмотря на то, что все эти необычные символы доступны на современных платформах, они по-прежнему не используются в Algol 68 Genie, и, возможно, в других современных аппаратных языках – вероятно потому, что их нелегко набирать.

Переходим к вам

Надеемся, что мы вдохновили вас попробовать свои силы в программировании на АЛГОЛ 68, и если это так, то есть несколько способов перейти к этому. И вот один из лучших способов начать, прежде чем писать свой собственный код с нуля – это, конечно же, взять несколько работающих программ и каким-либо образом их модифицировать. Отличным источником программ на ALGOL 68 является Rosetta Code, где вы найдете список на пяти страницах, с примерно 200 программами на странице.

Все программы Rosetta Code, похоже, только текстовые, но по мере изучения вы должны поэкспериментировать с добавлением графических элементов в свой код. Algol 68 Genie может работать с библиотекой GNU libplot, и в документации, которую вы можете найти по адресу, есть все подробности. На самом деле, поскольку ALGOL 68 поддерживает комплексные числа – и да, мы понимаем, что, приложив немного больше усилий, можно легко выполнять сложную арифметику в языках, поддерживающих только вещественные числа – одна из идей для первой программы на ALGOL 68, которую вы пишете с нуля, – это реализовать код для рисования множества Мандельброта. Это не такое распространенное упражнение по кодингу, каким оно было когда-то, но это не умаляет того удивительного зрелища, откроющегося перед вами при запуске собственного кода. Интересно также отметить, что множество Мандельброта было открыто только в 1978 году – через 10 лет после появления ALGOL 68.

Procedures

Algol 68 procedures take a number of parameters, possibly zero, and return a result or VOID. A procedure is defined like so:

  PROC twice as much = (INT i) INT: i+i

This defines a procedure named

which takes a single integer parameter by value, and returns an integer result. The body of this procedure is a single statement and so doesn’t need to be enclosed in a block, but most procedures do.

In this definition, the procedure denotation

is assigned to the identifier

, which therefore has the mode

. As with data quantities, though, the procedure body could be assigned to a procedure variable identifier

  PROC operation := (INT i) INT: i+i

We could then, elsewhere in the program, change the value of that procedure:

  operation := (INT foo) INT: 3*foo+7

Listing 2 shows another example of a function denotation being used as a lambda.

# Print a table of values #

# print a table of values of f(angle) #
# for angle from start to stop (degrees) #

PROC print trig =
  ( REAL start, REAL stop,
    PROC (REAL) REAL f ) VOID:
BEGIN
  REAL val := start;
  
  printf( $" Deg |"$ );
  FOR i FROM 0 TO 9 DO printf(( $z-d.dx,b(l,x)$,
    i/10, i=9 )) OD;
  printf( $5"-" "+" 71"-"l$ );
  
  FOR col FROM 0 WHILE val < stop
  DO
    IF col MOD 10 = 0 
    THEN 
      printf(( $zd.d" | "$, val ))
    FI;
    
    printf(( $+d.3d,b(l,x)$, f((val*pi)/180),
      col MOD  10 = 9 ));
    val +:= 1
  OD
END;

# Print a table of sin(x) using the built-in 
  sin function #
print(( newline, "Printing sin x", newline ));
print trig( 0, 90, sin );

# Print a table of sin^2(x)+cos^2(x) using a lambda #
print(( newline, "Printing sin^2 x + cos x",
  newline ));
print trig( 0, 90, (REAL n) REAL: sin(n)^2+cos(n))
			
Listing 2

The procedure body that we assign in this way is effectively a lambda function. No special syntax is needed for lambda, the functionality is a natural consequence of the design of the language.

Понравилась статья? Поделиться с друзьями:
Умный ребенок
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: