The History of Apple’s Pascal “Syntax” Poster, 1979-80

A republished account of how Jef Raskin’s technical document was filtered by Jobs through an artist to make something iconic (but a little less useful)

The History of Apple’s Pascal “Syntax” Poster, 1979-80 –

Be sure to read also the comment under the article, from the marketing person in charge of the project.

Via this fediverse conversation which includes a higher resolution image, and which starts off with a Japanese-language poster on the F-Basic386 language:


Looking at poster, not having a APPLE II, PASCAL has no floating point numbers.
Did any Pascals have floating point numbers? I find trading sets for floating point
numbers was a wrong move, as sets are to abstract too have any real use, and
may need context addessable memory. The set of cows named Daisy in the UK, is a lot of cows.

Look again, Pascal always had floating point and sets , in the Standards, and in UCSD Pascal they are present. As in all major Pascal implementations, from Turbo Pascal to Object pascal (Delphi, FPC).

And you are also wrong about sets being too abstract, they are of real use for a Pascal programmer and help make programs readable.

The poster may look nice but is not of ‘real’ value. It is quite incomplete.

Here’s the diagram on unsigned numbers in EBNF (oh, the irony):

<unsigned number> ::= <unsigned integer> ["." <unsigned integer>] 
                      ["E" ["+"|"-"] <unsigned integer>]

and this is how numbers become signed (numerical unsigned constants are unsigned numbers):

<constant> ::= (("+"|"-") (<identifier>|<unsigned number>)) |
               <unsigned constant>

Meaning, Pascal allows for




but notably not for


which must be written as


(I actually remember this! :slight_smile: )

The origin of the Pascal syntax diagram is, of course, the set of diagrams in Appendix D of the Pascal User Manual and Report, Kathleen Jensen and Niklaus Wirth, Springer-Verlag, 1974. Except for the lurid colors, the Apple chart appears to follow those diagrams quite closely.

Wirth probably got the idea from “A syntactical chart of ALGOL 60,” Warren Taylol, Lloyd Turner, Richard Waychoff, Communications of the ACM, vol 4 #9, September 1961, p.393. As far as I know, that’s the only issue of that journal that has a centerfold – the chart. The authors came up with the idea of a syntax chart during their development of the initial ALGOL compiler for the Burroughs B5000, ca. 1960. For a more usable PDF of the chart than the CACM article, see


I was thinking about Pascal sets when watching this video about how a Python program that initially took a month of processing to get a solution was optimized by several people down to 300µs.

One of the first things to go was the use of sets in Python, which is very abstract and not at all efficient.

In contrast, on a 60 bit machine where Pascal was first implemented a set of enums with less than 60 distinct values takes up a single word and all interesting operations can be done in a single clock.

In this case a set of letters can be represented easily in a 32 bit word and the fast version did by hand in C what Pascal would have done for you automatically.

I think C had the best soution for 7 bit chars with the character macros like isalpha().
With C you could define a similar set for what ever you needed to parse.
EBNF still needs to revised as it can’t handle where you need too look at the symbol
table like FORTRAN. is FOO() a function or an array? With meta II I plan add functions that access the symbol table, but there is no ‘formal’ way to express it.

This is the nice thing with the hierarchical Burroughs chart linked by @Paul_Kimpel : you can read it either top-down or bottom-up (beginning with terminal symbols). Reading it bottom-up, you soon discover that subscripts for arrays and switches use brackets (“[…]”) and parameter lists for functions parantheses (“(…)”).
It doesn’t solve the fundamental problem (semantics annotation in syntax), but it does show what a (well organized) chart can do for us.

1 Like

Well if they had [ ] at the time Algol and Fortran may have been slightly different.