One result of the textual bias of compiling systems has been too great an emphasis on syntax.
The syntax of a language is only there to provide a representation for programs for an underlying
machine. The bones of a language are the operations of that underlying machine; the syntax is
cosmetic. Too often gross complexity is introduced in the syntax and explained in terms of it,
but only an elementary machine lies behind the facade. Though the syntaxes ot languages vary
greatly, in many cases the algorithmic constructions behind them are very similar. Procedures,
conditional statements, loops, subscripted arrays and variables are common to most languages.
If one is manipulating or proving properties of programs it is these essential constructions with
which one is concerned, rather than the details of the text representing them. Of course, the
manipulation has to be in terms of some representation, but the linear text string of letters is
unlikely to be the appropriate one. A representation which reveals the structure is appropriate.
[...]
For the definition of an abstract machine, the atomic program constructions and the ways of
combining them to produce more elaborate pieces of program have to be specified. Giving a
definition of these structures is the same as giving a semantics of the machine.
J. M. Foster, Royal Signals and Radar Establishment,
"The algebraic specification of a target machine: Ten15"