However the version of ICL 1900 BCPL we have appears not to be that version, notably the code generated seems not to be that described by Bernard Sufrin.
The ICL 1900 compiler contains a few BCPL extensions, notably the true/false branches of a TEST statement can be written as IFSO and IFNOT and in in either order. It has been suggested that this is a dialect of BCPL introduced at Oxford.
No byte access operator %, no subfield operators SLCT and OF.
The Essex compiler introduced many extensions to BCPL, including the SELECTOR (spelled SLCT by some other compilers) and :: (spelled OF by some other compilers) operators.
The Essex compiler included the "op:=" assigning operators.
Essex BCPL also introduced an EXTERNAL declaration as an alternative to the standard BCPL GLOBAL vector.
Compiled versions of the Essex BCPL compiler are available on GitHub. The source may have been recovered, but I know of no available copy.
let Start() be [st OUTPUT ← CreateOutput(0) // yes, that's a backarrow INPUT ← FindInput(0) ... ]stExample of DECUS BCPL.
Xerox BCPL used = for assignments instead of :=, the equality operator was eq.
Like ICL 1900 BCPL the true/false branches of a test command could be written ifso and ifnot, in either order.
Xerox BCPL had a complicated extension for structure and subfield access, using the right-lump (>>), left-lump (<<) and heffalump (=>) operators.
let a, b, c = 0 // sic let v = vec 100 a := v[20] // sicDocumentation for code generator M
All questions to john@AtlanTech.com