oc5 stands for "oh-comma-five" (0,5)

It's an alternative "front-half" of oc1, the actual frontend of the
opal compiler.

As almost every piece of software oc5 is provided "as is", absolutely
"without warranty", etc., in the hope that it may be useful. And it's 
still under construction.

How to use

1. Make sure the proper frontend oc1, oc5 and the script myoc1 are in your
search path. (In my installation myoc1 and oc5 reside in ~/bin) 

2. Instead of calling "ocs" to compile Opal sources you can call now
"ocs ocs=expocs EXP_OC1=myoc1". 

Setting these variables is more comfortable using "ProjectDefs". ("ocs
info" shows the location of that file, if it's properly set using the
environment variable OCSPROJECT.)

Why to use

oc5 just has a different opinion about Opal signatures and it might be
worth to ensure that your sources are considered correct by both
algorithms. 

Since the actual work is finally done by oc1, it's currently of no use
for you, if a source is accepted by oc5 but rejected by oc1. On the
other hand errors and warnings (and even crashes) of oc5 can be safely
ignored. (In fact, oc1 finally overwrites the diagnostic ouput files
OCS/*.diag.)

What does oc5

oc5 scans and parses a source almost like oc1 and then checks the
signature by a different algorithm. The signature of a source file,
be it a SIGNATURE or an IMPLEMENTATION, refers to those parts following
the keywords SORT, FUN or IMPORT, including the "induced signature" of
TYPE or DATA. 

oc5 reads the same interOpal files, OCS/*.sign.inter, that also oc1
reads and creates.

What does oc5 not

oc5 does not write interOpal files. Apart from parsing it ignores
definition equations, specifications, laws and pragmas completely.

What are the difference between oc1 and oc5

1. selective imports (proper origin)
2. complete imports (smaller name spaces)
3. either instantiated or uninstantiated imports
4. (fewer, only decared) names inherited from the SIGNATURE part
(5. nested tuples, wild cards, ALLBUT-imports)

In contrast to oc1, oc5 disallows re-export of names, but does not 
require selectively imported names to be closed. 

1. selective imports

Example:

IMPORT Seq ONLY length nat

The above Import is correct for oc1, but oc5 warns about a "void
listing of 'nat'". To correct this you have to write:

IMPORT Seq ONLY length
       Nat ONLY nat

Unfortunately oc1 requires the import "nat", because it's a part (the
result type) of the name "length". oc5 would be happy without "nat" as
long as you don't use "nat" explicitely. (Currently oc5 does not check the
usage of names within expressions. Usage can be checked using the browser's
"Generate Importlist", though only usefully for an IMPLEMENTATION)

2. complete imports

Complete imports stand for different name spaces in oc1 and oc5.

...
