home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
ftp.barnyard.co.uk
/
2015.02.ftp.barnyard.co.uk.tar
/
ftp.barnyard.co.uk
/
cpm
/
DRI-archive
/
roche
/
COMALANG.TXT
< prev
next >
Wrap
Internet Message Format
|
2009-12-11
|
10KB
From: "Arobase, Salle multimΘdia" <arobase1.rochef...@wanadoo.fr>
Newsgroups: comp.os.cpm
Subject: Re: Attn French Lurker: Compis Comal
Date: Sat, 10 Nov 2001 17:52:31 +0100
Organization: Wanadoo, l'internet avec France Telecom
Lines: 198
Message-ID: <9sjlmb$b49$1@wanadoo.fr>
References: <3be8ed62$1@grendel.df.lth.se>
NNTP-Posting-Host: apoitiers-102-2-1-70.abo.wanadoo.fr
X-Trace: wanadoo.fr 1005410827 11401 193.253.213.70 (10 Nov 2001 16:47:07 GMT)
X-Complaints-To: abuse@wanadoo.fr
NNTP-Posting-Date: 10 Nov 2001 16:47:07 GMT
X-Priority: 3
X-MSMail-Priority: Normal
X-Newsreader: Microsoft Outlook Express 6.00.2600.0000
X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2600.0000
COMALANG.TXT
------------
COMAL - THE PROGRAMMING LANGUAGE
by David Stidolph
A little over 10 years ago, Borge Christensen, a professor in
Denmark, couldn't find a computer language that he liked enough
to teach. BASIC was fine for the students -- it was interactive
and they could start learning quickly because they got to see
their program execute as soon as they typed RUN. Unfortunately,
the student programs looked like spaghetti, and it took longer
to figure out how they worked than it took to write them.
Pascal, on the other hand, was a teachers dream. Programs were
readable and precise. The long variable names and procedures
and functions made checking the programs easy when compared to
BASIC. The problem with Pascal, however, was that the students
had to learn how to run the compiler before they could run a
single line of code. The students also found it harder to
experiment with Pascal than with BASIC. Every variable had to be
declared and a student would never know about errors until the
program was compiled.
Rather than choosing one or the other, Borge decided to develop
a language that would include the best features of both BASIC
and Pascal. This language was called COMAL (COMmon Algorithmic
Language). His idea was so successful that it has become the
official programing language of schools in five European
countries. A COMAL Standard was developed (called the COMAL
Kernal), and meetings are held annually to maintain
compatibility between the various implementations.
Technically, COMAL is a three pass, run-time compiler. It
combines the features of a compiler and an interpreter,
providing an easy-to-learn language that is also easy-to-use.
Explaining the three passes will help describe the language.
Pass One - Entering Program Lines
---------------------------------
The first pass occurs when a program line is entered. The
line's syntax is immediately checked. If there is any problem,
an error message is printed below the line and the cursor is
placed on the problem. For example, look at the following:
100 hypotenuse=sqr(sidea^2+sideb^2(
The open parentheses at the end of the line should be a close
parentheses. COMAL realizes this and displays the message --
")" expected, not "(" -- beneath the line as soon as RETURN is
pressed. The cursor is placed on the open parentheses at the
end of the line. To correct the error, press the ) key. The
line on the screen is now correct. Press the RETURN key and the
line is entered into the program. Also, the error message is
removed and the text it erased is restored. The command:
LIST 100
displays the following line:
0100 hypotenuse:=SQR(sidea^2+sideb^2)
Notice that COMAL distinguishes between := for assignment and =
for comparison, but doesn't require you to type them
differently. SQR is capitalized to show that it is a built in
keyword of COMAL. Variables and commands can be entered in
either upper or lower case. Consider the following line: 100
balance=12376.35 This line is valid in both COMAL and BASIC.
However, in BASIC, the line is stored in its ASCII form, and
only the first two characters of the variable name are
significant (balance would be the same variable as bad, bank,
bankrupt and backpay). Then, each time the line is executed,
BASIC must convert the number to floating point format and
search through memory for the variable ba.
In COMAL, the variable name can be up to 78 characters long
(each character is significant). To save programming space and
increase execution speed, the name is stored in a table and a
token is used at each occurrence in the program. When the
program is executing, COMAL knows precisely where to find the
variable. In addition, the number is stored in its floating
point form, allowing faster execution.
Pass Two - Program Structure Check
----------------------------------
When you type RUN and press RETURN, COMAL checks the entire
program for structural errors and resolves all addressing
(noting where procedures are located, where to branch for
IF..THEN..ELSE, FOR..NEXT loops, etc). This scan of the program
is not noticeable (usually less than a second). For example, if
a REPEAT loop was ended with ENDWHILE instead of UNTIL, COMAL
would give the following error message (xxxx is the problem line
number):
at xxxx: "UNTIL" expected, not "ENDWHILE"
BASIC cannot find a structural error until it executes the line.
In COMAL each line of the program is checked as it is entered
and the whole program is checked before a single line is
executed. This program scan greatly improves program
reliability and allows COMAL programs to run much faster than
BASIC.
Pass Three - Running the Program
--------------------------------
The last pass is when the program is actually executed.
Although the program has been checked thoroughly for errors and
all necessary jump addresses have already been calculated, the
possibility of error still exists. Look at the following
program:
0010 PAGE // Clears screen and homes the cursor
0020 INPUT "How many apples?": total'apples
0030 INPUT "How many people?": total'people
0040 PRINT total'apples/total'people;
0050 PRINT "apples per person"
This simple program seems correct, but what if the user typed in
a zero for total'people (a division by zero error) or typed a
name instead of a number? In most languages, the program would
halt. In fact, COMAL would halt in this case as well. There is
a way, however, to trap errors. To "user proof" program lines,
place them inside a TRAP..HANDLER structure. This may sound
complicated, but actually the idea is simple. Look at this
re-worked example program (indentation is provided by the LIST
command, you do not have to type the spaces):
0010 PAGE // Clears screen and homes the cursor
0012 LOOP
0015 TRAP
0020 INPUT "How many apples?": total'apples
0030 INPUT "How many people?": total'people
0040 PRINT total'apples/total'people;
0050 PRINT "apples per person"
0060 EXIT // No errors encountered, leave loop
0070 HANDLER
0080 PRINT "Numbers only, and at least one."
0090 PRINT "Please try again..."
0100 ENDTRAP
0110 ENDLOOP
Now, if an error occurs during execution of lines between the
TRAP and the HANDLER (lines 20 through 60), the program would
jump into the HANDLER section (lines 80 - 90). If both input
requests get proper replies, the EXIT command jumps out of the
LOOP (and out of the TRAP as well). Since lines were inserted
between 10 and 20, the RENUM command can be used to make all the
line numbers nice and even. COMAL only uses line numbers only
for editing programs and can even list a program without line
numbers.
Portability of COMAL and Beyond
-------------------------------
Thanks to the early development of a standard, a programmer can
write a COMAL program that will run virtually unchanged on PC
compatibles, Commodore 64, CP/M, and soon on the Apple II. With
COMAL, one language can be taught for several different
machines. COMAL provides a universal language to bridge the
gap. Once you have mastered a given language, what do you do? No
one language is perfect for all tasks. Each has its own
advantages and disadvantages.
The purpose of COMAL is to teach programming skills with a
minimum of "harassment". When you learn COMAL, you have learned
the standard programming techniques of Pascal, Modula II, Ada
and other structured languages. Many of the concepts that you
learn in BASIC, LOGO, Forth, are actually undesirable and later
must be "unlearned".
Other Features
--------------
COMAL has many other advantages -- a full screen editor,
strings and string arrays of any length (up to the limit of
memory) with no garbage collection, fast string searches (up to
80 times faster than BASIC), print using, cursor control,
procedures and functions with parameter passing and recursion,
local/global variables, user defined string functions, and easy
file access and control. COMAL also allows you to LIST
procedures or entire programs to disk and later merge them into
other programs. No more re-typing the same routine each time
you need it in a program.
EOF