100% found this document useful (3 votes)
17 views68 pages

Understanding Programming Languages 1st Edition Cliff B. Jones - Read The Ebook Online or Download It To Own The Complete Version

The document promotes a collection of ebooks on programming languages available for download at textbookfull.com, including titles by various authors. It emphasizes the importance of understanding programming languages deeply and provides insights into language design and semantics. The book aims to equip readers with skills to analyze and describe programming languages effectively.

Uploaded by

mfnnhamssa
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
100% found this document useful (3 votes)
17 views68 pages

Understanding Programming Languages 1st Edition Cliff B. Jones - Read The Ebook Online or Download It To Own The Complete Version

The document promotes a collection of ebooks on programming languages available for download at textbookfull.com, including titles by various authors. It emphasizes the importance of understanding programming languages deeply and provides insights into language design and semantics. The book aims to equip readers with skills to analyze and describe programming languages effectively.

Uploaded by

mfnnhamssa
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 68

Explore the full ebook collection and download it now at textbookfull.

com

Understanding Programming Languages 1st Edition


Cliff B. Jones

https://textbookfull.com/product/understanding-programming-
languages-1st-edition-cliff-b-jones/

OR CLICK HERE

DOWLOAD EBOOK

Browse and Get More Ebook Downloads Instantly at https://textbookfull.com


Click here to visit textbookfull.com and download textbook now
Your digital treasures (PDF, ePub, MOBI) await
Download instantly and pick your perfect format...

Read anywhere, anytime, on any device!

Programming Languages and Systems 1st Edition Nobuko


Yoshida

https://textbookfull.com/product/programming-languages-and-
systems-1st-edition-nobuko-yoshida/

textbookfull.com

Foundations of Programming Languages Second Edition Lee

https://textbookfull.com/product/foundations-of-programming-languages-
second-edition-lee/

textbookfull.com

Concepts of programming languages Twelfth Edition Sebesta

https://textbookfull.com/product/concepts-of-programming-languages-
twelfth-edition-sebesta/

textbookfull.com

Concepts of programming languages 11th Edition Sebesta

https://textbookfull.com/product/concepts-of-programming-
languages-11th-edition-sebesta/

textbookfull.com
Programming Languages and Systems Amal Ahmed

https://textbookfull.com/product/programming-languages-and-systems-
amal-ahmed/

textbookfull.com

Foundations of Programming Languages Kent D. Lee

https://textbookfull.com/product/foundations-of-programming-languages-
kent-d-lee/

textbookfull.com

Programming Interviews for Dummies 1st Edition Eric T.


Jones

https://textbookfull.com/product/programming-interviews-for-
dummies-1st-edition-eric-t-jones/

textbookfull.com

Practical Foundations For Programming Languages 2nd


Edition Robert Harper

https://textbookfull.com/product/practical-foundations-for-
programming-languages-2nd-edition-robert-harper/

textbookfull.com

Domain Specific Languages in R Advanced Statistical


Programming 1st Edition Thomas Mailund

https://textbookfull.com/product/domain-specific-languages-in-r-
advanced-statistical-programming-1st-edition-thomas-mailund/

textbookfull.com
Cliff B. Jones

Understanding
Programming
Languages
Understanding Programming Languages
Cliff B. Jones

Understanding Programming
Languages
Cliff B. Jones
School of Computing
Newcastle University
Newcastle upon Tyne, UK

ISBN 978-3-030-59256-1 ISBN 978-3-030-59257-8 (eBook)


https://doi.org/10.1007/978-3-030-59257-8

© Springer Nature Switzerland AG 2020


This work is subject to copyright. All rights are reserved by the Publisher, whether the whole or part of
the material is concerned, specifically the rights of translation, reprinting, reuse of illustrations, recitation,
broadcasting, reproduction on microfilms or in any other physical way, and transmission or information
storage and retrieval, electronic adaptation, computer software, or by similar or dissimilar methodology
now known or hereafter developed.
The use of general descriptive names, registered names, trademarks, service marks, etc. in this publication
does not imply, even in the absence of a specific statement, that such names are exempt from the relevant
protective laws and regulations and therefore free for general use.
The publisher, the authors, and the editors are safe to assume that the advice and information in this book
are believed to be true and accurate at the date of publication. Neither the publisher nor the authors or
the editors give a warranty, expressed or implied, with respect to the material contained herein or for any
errors or omissions that may have been made. The publisher remains neutral with regard to jurisdictional
claims in published maps and institutional affiliations.

This Springer imprint is published by the registered company Springer Nature Switzerland AG
The registered company address is: Gewerbestrasse 11, 6330 Cham, Switzerland
Preface

The principal objective of this book is to teach a skill; to equip the reader with a way
to understand programming languages at a deep level.
There exist far more programming languages than it makes sense even to attempt
to enumerate. Very few of these languages can be considered to be free from issues
that complicate –rather than ease– communication of ideas.
Designing a language is a non-trivial task and building tools to process the lan-
guage requires a significant investment of time and resources. The formalism de-
scribed in this book makes it possible to experiment with features of a programming
language far more cheaply than by building a compiler. This makes it possible to
think through combinations of language features and avoid unwanted interactions
that can confuse users of the language. In general, engineers work long and hard on
designs before they commit to create a physical artefact; software engineers need to
embrace formal methods in order to avoid wasted effort.
The principal communication mode that humans use to make computers perform
useful functions is to write programs — normally in “high-level” programming lan-
guages. The actual instruction sets of computers are low-level and constructing pro-
grams at that level is tedious and unintuitive (I say this from personal experience
having even punched such instructions directly into binary cards). Furthermore these
instruction sets vary widely so another bonus from programming in a language like
Java is that the effort can migrate smoothly to computer architectures that did not
even exist when the program was written.
General-purpose programming languages such as Java are referred to simply as
“High-Level Languages” (HLLs). Languages for specific purposes are called “Do-
main Specific” (DSLs). HLLs facilitate expression of a programmer’s intentions by
abstracting away from details of particular machine architectures: iteration can be
expressed in an HLL by an intuitive construct — entry and return from common
code can be achieved by procedure calls or method invocation. Compilers for HLLs
also free a programmer from worrying about when to use fast registers versus slower
store accesses.
Designing an HLL is a challenging engineering task: the bigger the gap between
its abstraction level and the target hardware architecture, the harder the task for the

v
vi Preface

compiler designers. A large gap can also result in programmers complaining that
they cannot get the same efficiency writing in the HLL as if they were to descend to
the machine level.
An amazing number of HLLs have been devised. There are many concepts that
recur in different languages but often deep similarities are disguised by arbitrary
syntactic differences. Sadly, combinations of known concepts with novel ideas often
interact badly and create hidden traps for users of the languages (both writers and
readers).
Fortunately, there is a less expensive way of sorting out the meaning of a pro-
gramming language than writing a compiler. This book is about describing the
meaning (semantics) of programming languages. A major objective is to teach the
skill of writing semantic descriptions because this provides a way to think out and
make choices about the semantic features of a programming language in a cost-
effective way. In one sense a compiler (or an interpreter) offers a complete formal
description of the semantics of its source language. But it is not something that
can be used as a basis for reasoning about the source language; nor can it serve
as a definition of a programming language itself since this must allow a range of
implementations. Writing a formal semantics of a language can yield a far shorter
description and one about which it is possible to reason. To think that it is a sensible
engineering process to go from a collection of sample programs directly to coding a
compiler would be naive in the extreme. What a formal semantic description offers
is a way to think out, record and analyse design choices in a language; such a de-
scription can also be the basis of a systematic development process for subsequent
compilers. To record a description of the semantics of a language requires a notation
— a “meta-language”. The meta-language used in this book is simple and is covered
in easy steps throughout the early chapters.
The practical approach adopted throughout this book is to consider a list of issues
that arise in extant programming languages. Although there are over 60 such issues
mentioned in this book, there is no claim that the list is exhaustive; the issues are
chosen to throw up the challenges that their description represents. This identifies a
far smaller list of techniques that must be mastered in order to write formal semantic
descriptions. It is these techniques that are the main takeaway of the current book.
Largely in industry (mainly in IBM), I have worked on formal semantic descrip-
tions since the 1960s1 and have taught the subject in two UK universities. The payoff
of being able to write formal abstract descriptions of programming languages is that
this skill has a far longer half-life than programming languages that come and go:
one can write a description of any language that one wants to understand; a lan-
guage designer can experiment with combinations of ideas and eliminate “feature
interactions” at far less cost and time than would be the case with writing a compiler.
The skill that this book aims to communicate will equip the reader with a way
to understand programming languages at a deep level. If the reader then wants to
1 This included working with the early operational semantic descriptions of PL/I and writing the
later denotational description of that language. PL/I is a huge language and, not surprisingly, con-
tains many examples of what might be regarded as poor design decisions. These are often taken as
cautionary tales in the book but other languages such as Ada or CHILL are not significantly better.
Preface vii

design a programming language (DSL or HLL), the skill can be put to use in creating
a language with little risk of having hidden feature interactions that will complicate
writing a compiler and/or confuse subsequent users of the language.
In fact, having mastered the skill of writing a formal semantic description, the
reader should be able to sketch the state and environment of a formal model for
most languages in a few pages. Communicating this practical skill is the main aim
of this book; it seeks neither to explore theoretical details nor to teach readers how
to build compilers.

Using this book

The reader is assumed to know at least one (imperative) HLL and to be aware of
discrete maths notations such as those for logic and set theory — [MS13], for ex-
ample, covers significantly more than is expected of the reader. On the whole, the
current book is intended to be self-contained with respect to notation.
The material in this book has been used in final-year undergraduate teaching for
over a decade; it has evolved and the current text is an almost complete rewrite.
Apart from a course environment, it is hoped that the book will influence design-
ers of programming languages. As indicated in Chapter 1, current languages offer
many unfortunate feature interactions which make their use in building major com-
puter systems both troublesome and unreliable. Programming languages offer the
essential means of expression for programmers — as such they should be as clean
and free from hidden traps as possible. The repeated message throughout this book
is that it is far cheaper and more efficient to think out issues of language design be-
fore beginning to construct compilers or interpreters that might lock in incompletely
thought-out design ideas.
Most chapters in the book offer projects, which vary widely in their challenge.
They are not to be thought of as offering simple finger exercises — some of them
ask for complete descriptions of languages — the projects are there to suggest what
a reader might want to think about at that stage of study.
Some sections are starred as not being essential to the main argument; most chap-
ters include a section of “further material”. Both can be omitted on first reading.

Writing style

“The current author” normally eschews the first person (singular or plural) in tech-
nical writing; clearly, I have not followed this constraint in this preface. Some of the
sections that close each chapter and occasional footnotes also use the first person
singular when a particular observation warrants such employment.
viii Preface

Acknowledgements

I have had the pleasure of working with many colleagues and friends on the subject
of programming language semantics. Rather than list them here, their names will
crop up throughout the book. I have gained inspiration from students who have fol-
lowed my courses at both Newcastle University and the University of Manchester.
I’m extremely grateful to Jamie Charsley for his insertion of indexing commands.
I owe a debt to Troy Astarte, Andrzej Blikle, Tom Helyer, Adrian Johnson and Jim
Woodcock, who kindly offered comments on various drafts of this book. (All re-
maining errors are of course my responsibility.) My collaboration with Springer
–especially with Ronan Nugent– has been a pleasure. I have received many grants
from EPSRC over the years — specifically, the “Strata” Platform Grant helped sup-
port recent work on this book.
Contents

1 Programming languages and their description . . . . . . . . . . . . . . . . . . . . . 1


1.1 Digital computers and programming languages . . . . . . . . . . . . . . . . . . 1
1.2 The importance of HLLs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2
1.3 Translators, etc. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
1.4 Insights from natural languages . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
1.5 Approaches to describing semantics . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
1.6 A meta-language . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
1.7 Further material . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14

2 Delimiting a language . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
2.1 Concrete syntax . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
2.2 Abstract syntax . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
2.3 Further material . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31

3 Operational semantics . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
3.1 Operational semantics . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
3.2 Structural Operational Semantics . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38
3.3 Further material . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45

4 Constraining types . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51
4.1 Static vs. dynamic error detection . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52
4.2 Context conditions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53
4.3 Semantic objects . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57
4.4 Further material . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62

5 Block structure . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65
5.1 Blocks . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65
5.2 Abstract locations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68
5.3 Procedures . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73
5.4 Parameter passing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76
5.5 Further material . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80

ix
x Contents

6 Further issues in sequential languages . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83


6.1 Own variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83
6.2 Objects and methods . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84
6.3 Pascal variant records . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 85
6.4 Heap variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87
6.5 Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 89
6.6 Further material . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 93

7 Other semantic approaches . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 95


7.1 Denotational semantics . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 96
7.2 Further material . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 99
7.3 The axiomatic approach . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 101
7.4 Further material . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 113
7.5 Roles for semantic approaches . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 116

8 Shared-variable concurrency . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 119


8.1 Interference . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 119
8.2 Small-step semantics . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 121
8.3 Granularity . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 122
8.4 Rely/Guarantee reasoning [*] . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 124
8.5 Concurrent Separation Logic [*] . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 126
8.6 Further material . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 128

9 Concurrent OOLs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 131


9.1 Objects for concurrency . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 132
9.2 Expressions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 137
9.3 Simple statements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 138
9.4 Creating objects . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 140
9.5 Method activation and synchronisation . . . . . . . . . . . . . . . . . . . . . . . . . 141
9.6 Reviewing COOL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 149
9.7 Further material . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 151

10 Exceptional ordering [*] . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 153


10.1 Abnormal exit model . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 154
10.2 Continuations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 156
10.3 Relating the approaches . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 156
10.4 Further material . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 157

11 Conclusions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 159
11.1 Review of challenges . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 159
11.2 Capabilities of formal description methods . . . . . . . . . . . . . . . . . . . . . 160
11.3 Envoi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 162
Contents xi

A Simple language . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 163


A.1 Concrete syntax . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 164
A.2 Abstract syntax . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 165
A.3 Semantics . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 166

B Typed language . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 169


B.1 Abstract syntax . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 170
B.2 Context conditions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 171
B.3 Semantics . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 173

C Blocks language . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 175


C.1 Auxiliary objects . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 176
C.2 Programs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 177
C.3 Statements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 177
C.4 Simple statements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 178
C.5 Compound statements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 179
C.6 Blocks . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 180
C.7 Call statements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 181
C.8 Expressions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 183

D COOL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 185
D.1 Auxiliary objects . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 186
D.2 Expressions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 187
D.3 Statements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 188
D.4 Methods . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 190
D.5 Classes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 195
D.6 Programs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 198

E VDM notation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 201


E.1 Logical operators . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 201
E.2 Set notation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 202
E.3 List (sequence) notation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 203
E.4 Map notation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 204
E.5 Record notation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 205
E.6 Function notation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 205

F Notes on influential people . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 207

References . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 211

Index . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 225
Chapter 1
Programming languages and their description

This chapter sets the scene for the rest of the book. Sections 1.1–1.3 outline the
problems presented by programming languages and their related tools; Section 1.4
points out that there is material from the study of natural languages that is relevant
to the problems of describing artificial languages such as those used to program
computers; an overview of a range of techniques for recording the meaning of pro-
gramming languages is given in Section 1.5 and Section 1.6 introduces the specific
notation used throughout this book. In common with most of the following chap-
ters, this one closes with a section (1.7) that contains further material — in particular
such sections point to related reading.

1.1 Digital computers and programming languages

Consider the phrase “high-level languages for programming general-purpose com-


puters”; starting at the end:
• The focus in this book is on digital –rather than analogue– computers. The quali-
fication of “general-purpose” indicates that the behaviour of the computer is con-
trolled by a stored program. The crucial idea that machines can be devised that
are in some sense universal is credited to Alan Turing’s famous paper [Tur36]
on a technical issue in logic but few people would choose to program a “Turing
machine”.
• An essential question underlying this book is what is meant by “programming”.
A position can be taken that a program for device x should extend what can be
expressed in terms of the basic repertoire of x. Thus an early computer that had
no support for, say, floating-point numbers had to be programmed to simulate
such calculations; even modern computers1 do not normally offer instructions
1 Many modern machine architectures follow the idea of the “Reduced Instruction Set Computer”
(RISC); design and programming at the RISC level often requires re-building concepts that were
in the instruction sets of earlier machine architectures.

© Springer Nature Switzerland AG 2020 1


C. B. Jones, Understanding Programming Languages,
https://doi.org/10.1007/978-3-030-59257-8_1
2 1 Programming languages and their description

that compute, say factorial, so this is programmed in terms of multiplication etc.;


similarly many sorting algorithms can be realised as programs.
• Even leaving aside the arcane language of Turing machines, programming at the
level of machine code is tedious and error-prone (see Section 1.2). The reason
for designing “high-level” languages (HLLs) is to get above this finicky way of
expressing programs and make it easier and more productive for programmers to
express their ideas.
Thus high-level languages for programming general-purpose computers are a
means of generating (via a compiler) a series of instructions that can be executed
on a digital computer and that realise concepts that are not directly available as
expressions of the language.

1.2 The importance of HLLs

Picking up the point about the productivity of programmers from the preceding sec-
tion, there was a panel discussion2 on Programming Languages and their Semantics
at a conference in Pittsburgh in May 2004 to which Vaughan Pratt put the intriguing
question of how much money the panelists thought that high-level programming lan-
guages had saved the world. Pratt was aware of the difficulty of the question because
he added a subsidiary query as to whether an answer to the main question would
qualify for a Nobel Prize in economics. Without hoping –even with time to reflect–
to provide a number, considering Pratt’s question is illuminating. There are almost
certainly millions of people in the world for whom programming forms a significant
part of their job. Programmers tend to be well paid. A good programmer today can
create –using a high-level programming language such as Java– systems that were
unthinkable when programs could only be communicated in machine code. A good
programming language can, moreover, ensure that many mistakes made by even an
average-level programmer are easily detected and corrected. To these powerful sav-
ings, ease of program migration can be added: avoiding the need to write versions of
essentially the same program for different machine instruction sets must itself have
saved huge wastage of time and money.
It is also important to appreciate the distribution of costs around programs: even
back in the days of mainframes, the majority of programs cost more to develop than
their lifetime machine usage costs. Since that period, decades of tracking Moore’s
Law [Moo65] have dramatically reduced the cost of executing programs. With mod-
ern interactive applications, and factoring in the human cost of user time, the actual
machine time costs are close to irrelevant. The productivity of programmers and
their ability to create systems that are useful to the end user are the paramount con-
cerns.
2 The panelists were John McCarthy, John Reynolds, Dana Scott and the current author.
1.2 The importance of HLLs 3

The mere fact that there are thousands3 of programming languages is an indica-
tion that their design is a subject of interest. The additional observation that there is
no one clear “best buy” suggests that designing a high-level programming language
is non-trivial. One tension in design is between offering access to the power of the
underlying machine facilities so that programs can be made to be efficient versus
providing abstractions that make it easier to create programs. The problems of writ-
ing programs are also likely to be exceeded by the costs of their maintenance, where
the intentions of the original programmer must be understood if the person changing
the program is to do so safely.
A good programming language offers several aids to the programmers who use
it to express their ideas:
• data structuring
• common forms of control can be built into a language (with only the compiler
having to fiddle with the specific machine-level instruction sequences that realise
the higher-level expressions)
• protecting programmers from mistakes
It is worth expanding on the issue of how programming languages provide ab-
stractions. Most computers have a small number of registers, in which all basic
computations are performed and instructions can only access one additional storage
cell. A calculation involving several values must –at the machine level– involve a
series of instructions and might require the storage of intermediate results. A first
level of abstraction allows programmers to write arbitrary expressions that have to
be translated into strings of machine operations.
Clear layers of abstraction can be seen with regard to data representation. The
storage of a computer can most easily be viewed as a sequence of small contain-
ers (bits, bytes or words).4 From its inception, the FORTRAN language supported
declaring arrays of multiple dimensions whose elements could be addressed in a
style familiar to mathematicians (e.g. A[I, J ∗ 3]). Such operands have to be trans-
lated into sequences of machine instructions that compute the machine address
in the sequence of addressable storage cells of the machine. The APL language
pushed arrays to extremes and even PL/I provides ways of manipulating slices of n-
dimensional arrays — such sub-arrays can then be manipulated as if they had been
declared to be arrays of lesser dimensions.
Array elements are all of one type. Both the COBOL and Pascal languages of-
fer ways of defining inhomogeneous records5 that facilitate grouping data elements
whose types differ from each other. Furthermore the whole inhomogeneous object
can be used (e.g. as parameters or in input/output) as a single data item or its com-
ponents can be addressed separately.
3 As early as 1969, Jean Sammet’s book [Sam69] recognised 500 programming languages; a web
site that claimed to be listing all known languages got to 8,512 in 2010 then gave up.
4 Of course, computer architectures normally include registers and might themselves provide ab-

straction such as “virtual memory” (supported by “paging”). Some of these features are discussed
when issues relating to code generation are considered in subsequent chapters.
5 Some languages, including PL/I, use the term “structures” rather than records.
4 1 Programming languages and their description

List processing facilitates the creation of arbitrary graphs of data by allowing the
manipulation of something like machine addresses as data. Early languages such as
IPL-V, Lisp and Scheme had to develop a lot of techniques for garbage collection
before list processing could be adopted into more mainstream languages.
The concept of objects is a major contribution to the abstractions, as offered in
object-oriented languages such as Simula, Smalltalk and Java. Object orientation is
discussed in Section 6.2 and its role in taming concurrent computation is the main
topic of Chapter 9.
A similar story of programming languages developing abstraction mechanisms
above the raw conditional jumps of machine level programming could be developed:
conditional if constructs, compound statement lists, for and while looping constructs
and –above all– recursion make it possible to present complicated programs as a
structured and readable text. Tony Hoare reported [Hoa81, p.76] that he could not
express his innovative Quicksort [Hoa61] algorithm until he learned the ALGOL 60
programming language.6 This almost certainly contributed to his judgement on AL-
GOL 60 in [Hoa74b]:
Here is a language so far ahead of its time, that it was not only an improvement on its
predecessors, but also on nearly all its successors. Of particular interest are its introduction
of all the main program structuring concepts, the simplicity and clarity of its description,
rarely equalled and never surpassed.

A final, but crucial, area where programming language designers have sought
to offer abstractions is that of concurrency.7 Most computers offer rather low-level
primitives such as a compare-and-swap instruction; programming even at the level
of Dijkstra’s semaphores [Dij62, Dij68a] is extremely error-prone. The whole sub-
ject of concurrency in programming languages is still in evolution and its modelling
occupies several chapters later in this book. References to histories of the evolution
of programming languages are given in Section 1.7.
Here, the concern is with the problem of knowing how to record the meaning –or
semantics– of useful abstractions such as those sketched above. Semantic descrip-
tion is a non-trivial problem and occupies Chapters 3–10 of this book. The payoff
for mastering these techniques is large and can have effects far beyond the language
design team. It is just not realistic to expect anyone to be able to design a program-
ming language that will overcome the challenges listed above by sketching sample
programs and then proceeding to compiler writing. In fact, such a procedure is a
denial of everything known about engineering. The ability to record the meaning of
a language at an abstract level means that designers can think out, document and
refine their ideas far less expensively than by coding processors. Furthermore, the
6 Although initially designed as a publication language (and the vast majority of algorithms pub-
lished in the Algorithms section of Communications of the ACM were written in ALGOL 60) the
language contributed so many fundamental concepts to programming language design that it has
had enormous influence (see [AJ18, §1.4]).
7 In contrast, so-called “weak” (or “relaxed”) memory is a hardware feature which might in-

flict considerable damage on software development because it is hard to find apposite abstrac-
tions [ŠVZN+ 13, LV16].
1.3 Translators, etc. 5

far bigger bonus is that users of better thought-through languages will become more
productive and stumble into far fewer unexpected “feature interactions”.
Before techniques for describing semantics and the case for formalism are dis-
cussed in Section 1.5, it is worth considering the software tools that process pro-
gramming languages.

1.3 Translators, etc.

Given that a programmer elects to write a program in a high-level language –say


L – and that the hardware on which the program is to run only obeys instructions in
its particular machine language,8 some tool is required to bridge the gap. Two key
tools are translators and interpreters.
Perhaps the more obvious tool is to write an interpreter program in machine
language. Such an interpreter would read in the program written in L and simulate
its behaviour step by step. This can be done, but pure interpreters tend to run rather
slowly. The alternative is to write a program (again in machine language) that can
translate any program of L into a sequence of machine instructions that have the
effect of the original program. The obvious name for such a program is a translator
but the commonly used term is to refer to “compilers” for L .9
In practice, the description above is a simplification to make the distinctions
clear.10 Rather than producing pure machine code, a compiler can translate to the
language of a virtual machine which is in turn interpreted on actual hardware. This
idea has significant advantages in reducing the task of supporting multiple lan-
guages. Furthermore, compilers or interpreters can at least partially be written in
high-level programming languages; this process is referred to as “bootstrapping”.
It is worth reinforcing the point about translation by considering just a few
examples. The focus in this book is on imperative programming languages.11 In
general-purpose languages, the key imperative statement is the assignment. (Other
8 Grace Hopper said [Hop81]:

In the early years of programming languages, the most frequent phrase that we heard was
that the only way to program a computer was in octal.

9 The origin of this word is explained in [Bey09] as deriving from the first attempts to automate
program construction by collecting (compiling) a group of subroutines. It is surprising that this is
the term that continues to be more commonly used for what is clearly a process of translation.
10 In a detailed study [vdH19] of the ALGOL 60 implementation by Dijkstra and his colleagues,

Gauthier van den Hove makes clear that, even early in the history of language processing, the
question of compiling and interpreting was seen less as a dichotomy and more as a spectrum.
11 Functional languages such as Miranda [Tur85] and Haskell [Hut16] make it easier to reason

about programs as though they were mathematical functions. Early implementations of functional
languages tended to perform considerably more slowly than imperative languages but this gap has
reduced and some serious applications are now written in functional languages. Logic languages
such as Prolog [SS86] make a further step both in expressiveness and in their challenge to offer
performance. (In fact, Prolog still has imperative features.) The techniques presented in this book
6 1 Programming languages and their description

imperative languages might move the arm of a robot, project an image or update a
database.) Most of the statement types actually only orchestrate the order in which
updates to variables are made by assignments.
As outlined above, straightforward expression evaluation has to be implemented
by loads, stores and single-address operations of the machine. But a compiler will
often try to optimise expression evaluation. For example “common sub-expressions”
might be evaluated only once. Even in early FORTRAN compilers, expressions
that occurred inside FOR loops but did not depend on variables whose values were
changed in the loop could be evaluated once before the loop. More subtly, expres-
sions such as those which compute array indexes in the loop could be subject to
strength reduction so that the effect of multiplication could be achieved by addi-
tion each time round a loop. Many of these optimisations are known as “source-
to-source” in the sense that there is an equivalent source program that represents
the optimised code. There are other optimisations such as those concerned with
maximising efficiency by minimising the number of loads and saves for registers
(especially index registers for address calculation) that cannot be expressed in the
source language. In either case, it is clearly essential that the “optimisations” do
not result in a program doing something different from the programmer’s legitimate
expectations. In other words, any optimisations must respect the semantics of the
given high-level language.
Similar points could be made about compiling control constructs. Most machines
provide a primitive (conditional) jump instruction. High-level languages offer far
more structured control constructs. The task of a compiler is to translate the latter
into the former in a way that results in efficient code. But, again, that low-level code
must respect the semantics of the programming language.
Three final points can be made about tools for executing high-level languages:

• The cost of building a translator for a high-level programming language is nor-


mally significant.12 Many arguments can be advanced against undertaking this
step too early in the design process for a new programming language. Clearly, if
some language deficiencies or irregularities can be resolved less expensively by
writing a formal semantics, this is a wise move. More worryingly, once a mis-
taken design choice is cemented in the code of a translator, the designer might be
far more reluctant to undertake the rework to correct the infelicity.
• The division of a compiler into lexical analysis, parsing, dictionary building, . . . ,
code generation provides useful analogies for the task of formal description of
languages — these are used in later chapters.
• There are also other important tools such as those that assist a programmer in
debugging programs written in some language L .
for describing the semantics of imperative languages would apply to both functional and logic
languages (see for example [AB87, And92]).
12 This can be reduced if translation to the language of an existing virtual machine is possible.
1.5 Approaches to describing semantics 7

1.4 Insights from natural languages

The languages that are spoken by human beings were not designed by committees13
— they just evolved and they continue to change. The evolution process is all too
obvious from the irregularities in most natural languages. The task of describing
such natural languages is therefore very challenging but, because they have been
around longer, it is precisely on natural languages that the first systematic studies
were undertaken. Charles Sanders Peirce (1839-1914) used the term Semiotics for
the study of languages. Peirce14 divided the study of languages into:

• syntax: concerning the structure of utterances in a language


• semantics: about the meaning of the language
• pragmatics: covering the intention of using the language
Heinz Zemanek applied the terminology to programming languages in [Zem66] but
work on formalising the syntax of programming languages goes back to the ALGOL
effort in the late 1950s.
As shown in Chapter 2, it is not difficult to write syntax rules for parts of natu-
ral languages but, because of their irregularity, a complete syntax is probably not a
realistic objective. It is far harder to give a semantics of a language (than to write
syntactic rules) and Section 1.5 expands on this topic, which then occupies the ma-
jority of the following chapters.
One way of appreciating the distinction between syntax and semantics is to con-
sider some questions that arise with programming languages:
• Ways to fix the nesting of expressions (e.g. 2 + 3 ∗ 4 vs. (2 + 3) ∗ 4) is a syntactic
question.
• Another syntactic question is how to fix to which test the else clause in
if a = b then if c = d then x: = 1 else x: = 2
applies.
• Choosing which of the many possibilities of parameter passing modes is to be
included in a language is a semantic question.
• Deciding whether to under-determine the results expected by a program is cer-
tainly a semantic decision and the role of non-determinism in programming lan-
guages is particularly important in the context of concurrency (see Chapter 8).

1.5 Approaches to describing semantics

Some general points about semantics can be made concrete by looking at a few
specific programs. The following program (in a syntax close to that of ALGOL 60):
13 Of course, there are a small number of exceptions such as Volapük and Esperanto.
14 Pronounced “Purse”.
8 1 Programming languages and their description

begin integer n, fn;


...
begin integer t;
t : = 0;
fn : = 1;
while t 6= n do
t : = t + 1;
fn : = fn ∗ t;
od
end
end
computes the factorial of the (integer) value of the variable n and places the result
in variable fn. A formal justification of this fact is contained in Section 7.3 but it is
apparent that such a claim can only be based on an understanding of the meaning of
the statements of the language in which the program is written. Thus it is clear that
one role for a semantic description of a language –say L – is to be able to reason
about the claim that a program written in language L meets its specification. (This
notion is examined in detail in Chapter 7.)
But, if it were the case that a programmer presented an argument –possibly even
a formal proof– that a program met its specification and then a purported compiler
for L introduced errors in the sense that the machine code created by the compiler
was not in accord with the semantics of L , the programmer would have every right
to be aggrieved. So it is clear that a key role for a semantic description of a language
is to remove this risk: any compiler or interpreter for L must realise the semantics
of L . (A formal statement of this notion is given in Section 3.3.)
Thus the semantics should mediate the bridge between programmers using L
and implementers of language L so that the former group expect and the latter
group deliver the same meaning. Faced with the large challenge of getting a com-
puter to behave in an intended way, the semantics provides a “division of concerns”:
programs should be written on the assumption of the recorded semantics and pro-
cessors for the language should reflect that semantics.
There are also other interesting questions. Consider the following alternative pro-
gram:
begin integer n, fn;
..
.
fn : = 1;
while n 6= 0 do
fn : = fn ∗ n;
n : = n − 1;
od
end
This also has the effect of placing in fn the factorial of the initial value of n. If
the earlier program included n : = 0 after the while loop, the two programs might
1.5 Approaches to describing semantics 9

be considered to be equivalent in some sense. Making such notions of equivalence


precise is another semantic issue. (These issues of what it means for programs to
be equivalent become clearer with larger programs such as those for sorting: many
sorting algorithms have been devised (see [Knu73]) but two such programs can be
unrecognisably different from each other.)
It is time to discuss different approaches to recording the semantics of program-
ming languages. If one knows one natural language, another language might be
explained by translating it into the known language (although nuances and beauty
might be lost in translation). So an option for giving the semantics of language L
is to record a translation into a known language. This is, of course, exactly what
a compiler does but unfortunately machine code is not an attractive lingua Franca
for recording semantics. The problem with machine code as a vehicle for explaining
semantics to a human being is that its own semantics might be opaque. Of more con-
cern –and a clearer criteria– is that machine code is not tractable in the sense that
there is no natural way of reasoning about texts in machine language. An approach
that was originally called mathematical semantics, but is now commonly referred
to as denotational semantics, defines semantics by mapping into mathematically
tractable objects. This approach is described in Section 7.1 and commonly uses
mathematical functions from states to states as denotations.
Denotational semantics is mathematically elegant but requires some fairly so-
phisticated mathematical concepts in order to describe programming languages of
the sort that are used to build real applications. Taking a cue from the class of lan-
guage tools that are known as interpreters points to a more direct approach to pro-
viding the semantics of a programming language. A so-called operational semantics
provides a way of taking a program and a starting state and computing its final state.
Again, it could be said that this is exactly what an interpreter written in machine
code does but the key to a clear operational semantics is to write an abstract in-
terpreter in a limited meta-language. Such meta-languages should themselves be
tractable so that it is straightforward to reason about the description. The majority
of chapters in this book employ operational methods of semantic description and
Section 1.6 describes the meta-language used throughout this book.
The notion of a state is central to both denotational and operational semantics.
The two approaches share the need to choose states that are as abstract as possi-
ble; both can therefore be viewed as offering model-oriented language descriptions.
In contrast, it is possible to consider property-oriented approaches to semantics.
One obvious way to convey information about the meaning of complex features
of a programming language is to describe their meaning by relating them to sim-
pler constructs in the same language. Early attempts to use this idea formally in-
clude [Bek64] and it can be seen in less formal descriptions in, for example, the
way that [BBG+ 63] describes the for statement of ALGOL 60. This approach can
be compared to the way in which a mono-lingual dictionary defines the more arcane
words in terms of a limited subset of the vocabulary of a natural language. There is
of course an inherent circularity about this approach in that a reader must be able
to understand some expressions in a language but it is certainly possible to explain
less familiar features such as “call by name” in ALGOL 60 by their translation to
10 1 Programming languages and their description

simpler subsets of a language. Notice that equivalences provide semantic knowledge


without any notion of the state of a computation having to be described
A more radical –and now more widely used– approach that can be viewed as giv-
ing a property-oriented semantics is to provide ways of of reasoning about programs
in a language L . The idea of adding assertions to programs has a surprisingly long
history (see Section 7.3.1) but the really important step was made by Tony Hoare
who introduced an approach known as axiomatic semantics. Essentially, this ap-
proach provides rules of inference that facilitate proofs about programs and their
specifications. Section 7.3 goes into some detail on such axiomatic approaches.
The tasks of reasoning about programs in a language L and justifying the cor-
rectness of a translator for L are distinguished above. It can be argued that one or
another approach to semantics is better suited to the different tasks (this topic is re-
viewed in Section 7.5). But it should be clear that, if more than one approach is used,
they must be shown to be coherent in the sense that they fix the same semantics.
The bulk of this book uses operational semantic descriptions because the aim
is to equip the reader with the ability to describe useful programming languages.
(Chapter 7 reviews the other potential approaches.)
The above division of approaches to giving semantics can even be discerned
when looking at informal descriptions of programming languages that are contained
in most textbooks, although it is also true that most modern textbooks put heavy re-
liance on examples that the reader has to somehow “morph” to solve their actual
problem.15 What then is the case for promoting formality in descriptions of pro-
gramming languages? Although main-line programming languages (and –today–
their indispensable libraries) are orders of magnitude larger than the formal meta-
language described in Section 1.6, the desirability of them being as tractable as
practical carries over to programming languages. For example, programmers are
unlikely to use language constructs safely if a phrase in a language has unexpect-
edly different meanings depending on the context in which the phrase is embedded.
A clear test of a language being tractable is the ease of writing out formal rules of
inference for the language.
Furthermore, if users can be given a clear mental model of the state of a pro-
gramming language, they can understand the meaning of each construct by seeing
how it affects that state. With both considerations (properties and models of a lan-
guage), one way of testing clarity is to be able to record the ideas formally. As with
any piece of knowledge, such a record makes it available for review and subsequent
study. A compiler or interpreter for language L is itself “formal” — but its con-
struction costs far more than does a formal language description and a compiler is
certainly not tractable in the sense that it would be convenient to reason from the
compiler about programs in L .16
15 This “use case” approach applies to many physical objects and their manuals fail to give the user
any picture of the internal state of the object with which they are trying to interact.
16 A more subtle facet of the question of relying on a compiler comes from the thorny issue of

non-determinism: most HLLs actually permit a range of results (e.g. because of concurrency or
to leave implementors some flexibility): even if a user is interested in the result of a program on
1.6 A meta-language 11

As indicated in Section 1.2, a premature leap from example programs for a new
language to beginning to write a compiler for the language does not constitute sound
engineering. A process of experimenting with language choices within a formal
model can iron out many potential consistencies more quickly and far less expen-
sively. The formal model can also serve as the starting point for a systematic design
process for compilers once the language has been thought out.
Chapter 11 lists a number of formal descriptions of extant programming lan-
guages. One possibility opened up by making these descriptions formal is to pro-
vide tools that use them. There is quite good support for reasoning about program
correctness from various forms of property-oriented semantics, although this nor-
mally applies to restricted subsets of major languages such as SPARK-Ada. There
are far more tools based on formal ideas that check specific properties of programs
in languages (e.g. possible dereferencing of null pointers, deadlock detection).
Having listed the technical criteria of being able to reason about programs written
in L and acting as a base for compilers for L , there remains a bigger objective. The
main aim of this book is to ensure that formal models are more widely used in the
design of future programming languages. It is to be regretted that most of the current
main-line programming languages have semantic traps that surprise programmers
and/or complicate the task of providing compilers for the language. Such anomalies
can be detected early by writing formal semantic descriptions before tackling the
far more costly job of programming a compiler.
What then is the impediment to writing, for example, an operational semantics
of a language? Section 1.6 introduces a meta-language that should not prove dif-
ficult for any programmer to understand. With that one meta-language, he or she
can describe any (imperative) programming language. Chapter 3 covers the basic
method of writing an operational semantics and subsequent chapters consider new
challenges and eight known techniques for coping with them. Experience of teach-
ing these methods over the years suggests that the real hurdle is learning to employ
the right degree of abstraction in tackling language descriptions. That can proba-
bly only be learned by looking at examples, and Chapters 3–9 provide many such
examples.

1.6 A meta-language

The term object language can be used to refer to the language whose syntactic and
semantic description is to be undertaken17 and the script letter L is used when
making a general point rather than discussing a specific object language such as
FORTRAN or Java. In contrast, languages that are used in the description of an
object language are referred to as meta-languages.

a single input item, knowing that the result is as required in one implementation of L does not
guarantee that the program will give the same result on a different correct implementation of L .
17 The qualification “object” indicates that it is the object of study; this is not to be confused with

“object code”, which is what a translator generates when it compiles a source program.
12 1 Programming languages and their description

A meta-language is itself a formal language. To serve the purpose of describing


a range of programming languages:
• A useful meta-language must be capable of describing a large class of object
languages — it must be “rich enough” for its intended task.
• A meta-language should be far smaller than most programming languages.
• Crucially, any meta-language should be tractable in the sense that there are clear
rules for reasoning about its expressions.
The meta-language used in this book is derived from (but is a subset of) the
notation used in the Vienna Development Method (VDM). A brief outline of the
origins of VDM is given in Section 3.3.
The reader is assumed to be familiar with set notation;18 Figure 1.1 indicates
the symbols used as logical operators in VDM. Fortunately, textbooks use fairly
uniform set notation and the only points worth mentioning from Figure 1.1 are:
• rather than use a special symbol (φ ), VDM uses { } for the empty set because it
is just a special case of an enumerated set with no elements;
• the type of all finite subsets of some type X is written X-set;
• the set of all (finite or infinite) subsets is written (conventionally) as P(X);
• the name of the set of natural numbers is N = {0, 1, · · ·}, the set of all integers
Z = {· · · , −1, 0, 1, · · ·} and the set of Boolean values B = {true, false}.

T-set all finite subsets of T


{t1 , t2 , . . . , tn } set enumeration
{} empty set
B {true, false}
N {0, · · ·}
Z {· · · , −1, 0, · · ·}
{x ∈ S | p(x)} set comprehension
{i, · · · , j} subset of integers (from i to j inclusive)
t∈S set membership
t∈
/S ¬ (t ∈ S)
S1 ⊆ S2 set containment (subset of)
S1 ⊂ S2 strict set containment
S1 ∩ S 2 set intersection
S1 ∪ S 2 set union
S1 − S 2 set difference
card S cardinality (size) of a set
P(X) power set

Fig. 1.1 Set notation

Notation for VDM sequences is introduced in Section 2.2 (see Figure 2.2) and
maps in Section 3.1 (Figure 3.1) when they are needed.
18 Many useful textbooks exist on the notations of discrete mathematics including [Gro09].
1.6 A meta-language 13

A call for abstraction pervades work on modelling computer systems in general


and in giving the semantics to programming languages in particular: as such, “ab-
straction” is a Leitmotiv of this book. For example, if the order of a collection of
objects has no influence on the semantics of a language, it is far better to employ a
set than a sequence. It might be possible to express the semantics in terms of a se-
quence but the description will have to cope with messy details; far more tellingly,
any reader of the formal description is left to determine whether the order does in
fact influence the semantics by reading every line of the description. In contrast, as
soon as a reader sees that something is modelled as a set, it is abundantly clear that
the order of its elements can have no semantic effect.

B {true, false}
¬E negation (not)
E 1 ∧ E2 conjunction (and)
E1 , E2 are conjuncts
E1 ∨ E2 disjunction (or)
E1 , E2 are disjuncts
E 1 ⇒ E2 implication
E1 antecedent, E2 consequent
E1 ⇔ E2 equivalence
∀x ∈ S · E universal quantification
∃x ∈ S · E existential quantification

Fig. 1.2 Logic symbols

The symbols used for logic (technically, first-order predicate calculus) vary be-
tween textbooks and Figure 1.2 indicates the symbols used in this book.
It is common to set out proof rules that define valid deductions about the logical
operators. Examples that are assumed below include a definition of implication:
¬ E1 ∨ E2
⇒ -I
E1 ⇒ E2
equivalence as bi-implication:
E1 ⇒ E2
E ⇒ E1
⇔ 2
E1 ⇔ E2
What can be thought of as a definition of disjunction in terms of conjunction is
characterised by the bi-directional rule:
¬ (¬ E1 ∧ ¬ E2 )
de-Morgan-1
E1 ∨ E2
is one of de Morgan’s laws; another is:
¬ (E1 ∨ E2 )
de-Morgan-2
¬ E1 ∧ ¬ E2
14 1 Programming languages and their description

There is, however, an interesting extension in VDM to conventional logic in that a


Logic of Partial Functions (LPF) is used. The reader should have no difficulty with
an innocent reading of the propositional connectives listed in Figure 1.2 but LPF
offers a principled extension to cope with the situation where operands can be “un-
defined”. An obvious example is the proposition 5/0 = 0 which –since division by
zero means that the arithmetic term (5/0) fails to denote a number– is taken as “fail-
ing to denote a truth value”. Far more useful examples of partial expressions arise
in both specifications and reasoning about such documents and attention is drawn
to examples in later chapters — but it is important that the obvious interpretation of
such logical expressions works; more detail is given in Section 1.7.3.

1.7 Further material

1.7.1 Further reading

An excellent source of material on the history of programming languages them-


selves is the series of conferences on History of Programming Languages [Wex81,
BG96, RH07] — the first of these is a real gem. The PL/I language is mentioned
several times throughout the current book and some of these mentions indicate the
ways in which the interactions between language design decisions can result in con-
fusion. George Radin’s [Rad81] account of the creation of PL/I throws some light
on how committee compromises can complicate a language. However, the use of
PL/I to illustrate excesses in language design comes more from the current author’s
familiarity with PL/I than as a claim that it is the language that suffers the worst
interaction of language features.
Another way to read the words of the masters is to access the Turing Award
talks — printed versions include [Knu74a, Hoa74b, Sco77, Bac78, Wir85, Mil93,
Ive07]; further wise words are in [Hoa81, Wir67]; specific language discussions
include: [Knu67], [PJ03] and [Hut16].
An extremely useful book on concepts in programming languages is [Sco00] and
it could be useful to read Michael Scott’s book alongside the current text. Another
book that covers a range of languages and provides useful historical background
is [Seb16]. References on approaches to the formal description of programming
languages are given in the closing sections of later chapters of the current book.
There are actually two aspects of VDM itself: it offers a formal development
approach for any form of program and it has specific support for the denotational
description of programming language semantics. The current book uses only the
simplest common features of these two aspects. A general book on VDM is [Jon90]
and the ISO standard for VDM is described and referenced in [PL92]. The semantics
of full VDM is complicated by the fact that it was designed to write denotational
semantic descriptions (see Chapter 7); the subset used here for operational semantics
should be clear.
1.7 Further material 15

1.7.2 Classes of languages

This book tackles the semantics of imperative languages such as ALGOL and Java.
Descriptions of functional and logic programming languages (e.g. Scheme [ASS85],
Prolog [SS86]) would use the same ideas but it is worth saying a few words about
the differences. Rather than design algorithmic solutions to solve problems, it would
be attractive to write logical assertions and have a program find solutions. Even
in the restricted world of mathematics or logic19 this is impossible in general, but
Prolog-style logic programming moves in this direction. Unfortunately, in order to
circumvent the problems of massive search spaces, imperative features have been
included in Prolog itself [SS86].
An intermediate approach between fully imperative and logic languages is the
class of functional programming languages. In the extreme, such languages avoid
all imperative constructs such as assignment. This makes it possible to reason
about functional programs as though they are mathematical functions. Among other
things, this avoids the need for a Hoare-style logic. Most functional languages actu-
ally offer some limited ability to “change the world”.

1.7.3 Logic of Partial Functions

As indicated above, the logic used in the VDM meta-language is an extension of


standard first-order predicate calculus (see for example [MS13]). The need for a
Logic of Partial Functions (LPF) comes from the frequency with which reasonable
expressions in specifications involve terms that can fail to denote a value.
Writing the specific expression 5/0 = 0 would be bizarre but the following is
more reasonable:20
i > 0 ∧ j 6= 0 ⇒ i/j ≤ j
where the troublesome i/0 is one instance of i/j.
Far more useful examples arise in both specifications and reasoning about such
documents and attention is drawn to examples in later chapters, but it is important
that the obvious interpretation of such logical expressions works — for example,
while the antecedent of the preceding implication does not guard the consequent in
classical logic, the implication in LPF has the desired effect.
For example, the head (first element) of an empty list is undefined and applying
a mapping (finite function) to an element not in its domain fails to denote a value.
LPF offers obvious extensions to the normal meanings of propositional operators
as in Figure 1.3 where an operand that fails to denote a truth value is marked as an
asterisk.
19 It is by no means obvious how to develop or validate specifications of systems that interface to
the physical world. Some work in this area is described in [JHJ07, JGK+ 15, BHJ20].
20 Such an expression is better written with type constraints and these are used below but do not

cover all cases.


16 1 Programming languages and their description

The reason that the reader should have no difficulty with these extended meanings
is that key properties such as the symmetry of conjunction and disjunction hold:
E1 ∨ E2
∨ -sym
E2 ∨ E1

E1 ∧ E2
∧-sym
E2 ∧ E1
In fact, the key difference with conventional propositional logic is that the so-called
“law of the excluded middle” (P ∨ ¬ P) only holds in LPF where it is established
that P denotes a truth value.

a b ¬a a∧b a∨b a ⇒ b a ⇔ b
true true false true true true true
∗ true ∗ ∗ true true ∗
false true true false true true false
true ∗ ∗ true ∗ ∗
∗ ∗ ∗ ∗ ∗ ∗
false ∗ false ∗ true ∗
true false false true false false
∗ false false ∗ ∗ ∗
false false false false true true

Fig. 1.3 LPF extensions of propositional operators

Quantifiers are in no way mysterious. Over finite sets, they are just convenient
abbreviations:
(∃i ∈ {1, · · · , 3} · p(i)) ⇔ (p(1) ∨ p(2) ∨ p(3))
(∀i ∈ {1, · · · , 3} · p(i)) ⇔ (p(1) ∧ p(2) ∧ p(3))
Even the infinite cases should present no difficulty:
∀i ∈ N · ∃j ∈ N · i < j
With all of the quantifiers, the scope is assumed to extend as far as possible to
the right; parentheses are not required for this case but they can be used to define
different grouping.
This leaves only the end cases with the empty range for the bound variable to
note:
∃i ∈ { } · p(i) ⇔ false
∀i ∈ { } · p(i) ⇔ true
which are obviously related from the quantifier versions of de Morgan’s laws:
¬ (∃x · p(x))
de-Morgan-3
∀x · ¬ p(x)
1.7 Further material 17

¬ (∀x · p(x))
de-Morgan-4
∃x · ¬ p(x)
There are other logics that attempt to handle terms that fail to denote a value
and a comparison is given in [CJ91]. Details of the specific LPF used in VDM
are addressed in [BCJ84, JM94]. Kleene (in [Kle52]) attributes the propositional
operator definitions in Figure 1.3 to [Łuk20]. Other papers that address the issue of
undefinedness include [Kol76, Bla86, KTB88, Bli88].
Chapter 2
Delimiting a language

The body of this book addresses the task of describing –or designing– the semantics
of programming languages. This chapter prepares the way for that task by introduc-
ing the division between syntax and semantics. A tiny language is introduced which,
because it has few surprises, can be used to explain the description method. As more
complicated language features are considered in later chapters of this book, they are
treated independently as far as is possible (e.g. input/output is modelled in Sec-
tion 4.3.1 and a similar extension could be made to the concurrent object-oriented
language in Chapter 9).
For an extant language,1 it is necessary to delimit the set of allowed programs
before their meaning can be discussed: Section 2.1 outlines “concrete syntax” no-
tations for fixing the textual strings of an object language (such strings include var-
ious marks that make it possible to parse the strings); Section 2.2 addresses a way
of defining the “abstract syntax” of programs without the symbols needed to facili-
tate parsing. This chapter also covers most of the VDM notation used in the current
book. The topic of semantics is first tackled in Chapter 3 and runs throughout the
remainder of this book.

2.1 Concrete syntax

Any interesting language allows an unbounded number of different “utterances”. It


is therefore not possible to enumerate all of the allowable strings of characters in a
language.
It is not difficult to devise meta-languages with which to define the set of plausi-
ble programs of a language. Many of the notations used are close relatives of Backus
1 A Leitmotiv of the remaining chapters of this book is the value of using formal models in the
design of languages but this topic is postponed until the basic description tools have been covered
in the current chapter.

© Springer Nature Switzerland AG 2020 19


C. B. Jones, Understanding Programming Languages,
https://doi.org/10.1007/978-3-030-59257-8_2
Exploring the Variety of Random
Documents with Different Content
The genus and species were established
on a single, large, almost perfect
interclavicle of peculiar form. It may or may
not be distinct, but it can not be associated
definitely with any known genus, so that it
will be designated as Cope described it. It
exhibits on its outer or lateral borders
broad, smooth surfaces for the contact of
the overlapping margins of the lateral
plates. The form is subround, with a large Fig. 37.—So-called
excavation from the posterior margin on interclavicle of Eurythorax
each side. The narrowed portion left in the sublævis Cope.
(Sagenodus.) No. 75.
middle behind has a convex outline. Some (After Cope.)
delicate radiating grooves occur on the
exposed surface, but they are very shallow.
Measurements of Type.

mm.
Length of interclavicle 71.5
Greatest width 78
Width of lateral concavity 39
CHAPTER XXII.

THE MICROSAURIAN FAMILY


ICHTHYCANTHIDÆ, FROM THE
COAL MEASURES OF OHIO.
Family ICHTHYCANTHIDÆ new family.
This family is the most recently recognized group of the Linton
fauna. Its members, of which there are two known species, are
distinct from all other Coal Measures Amphibia in the possession of
an osseous tarsus (483, 484), with its associated reptile-like limb
bones. There are preserved fine scutellæ in a large patch near the
vertebral column. The vertebral spines are broad and heavy, with the
vertebral centra amphicœlous.

Genus ICHTHYCANTHUS Cope, 1877.


Cope, Proc. Am. Phil. Soc., p. 573, Feb. 3, 1877 (Pal. Bull. 24).
Baur, Beiträge zur Morphogenie des Carpus und Tarsus der Vertebraten, I
Theil, p. 16, 1888.
Cope, Trans. Am. Phil. Soc., XVI, p. 289, fig. 1, 1888.
Moodie, Science, n. s., XLI, No. 1044, p. 34, 1915.
Moodie, Am. Jour. Sci., XXXIX, pp. 509-512, fig. 2, May, 1915.

Type: Ichthycanthus ohiensis Cope.


The generic characters are derived from the characters presented
by the posterior dorsal and caudal vertebræ, with adjacent parts.
The posterior limbs are well developed, with distinct tibia and fibula,
osseous tarsus, and 5 digits. Ribs elongate, simple, curved.
Abdominal armature consisting of bristle-like rods in anteriorly
directed chevrons. Dorsal vertebræ not elongate, with simple neural
spines. Tail large, its vertebræ ossified, and furnished with slender
chevron bones which terminate in a hæmal spine. Neural spines
broad and directed backwards; the caudal series somewhat
resembling that of a fish. All the centra are amphicœlous.
This genus differs from all those with enlarged and sculptured
neural spines, and from those with abdominal scutes. It is equally
distinct from those without ribs, abdominal rods, or limbs. It is
possible that some of the species referred to Tuditanus, in which
these parts are unknown, may belong to it, or that it may be
established on a small species of Leptophractus, a genus known only
as yet from the skull. With our present imperfect knowledge of the
Linton forms it seems best to refer I. ohiensis and I. platypus to this
distinct genus, Ichthycanthus.

Ichthycanthus ohiensis Cope.


Cope, Proc. Am. Phil. Soc., 1877, p. 573 (Pal. Bull. 24).

Type: Specimen in the American Museum of Natural History.


Horizon and locality: Linton, Ohio, Coal Measures. Collected by
Dr. J. S. Newberry, in the summer of 1876.
The centra of the dorsal vertebræ are about as long as deep, and
their sides are deeply concave; there are 4 anterior to the pelvis
which are without ribs. The caudal vertebræ are robust, and 7, from
the first, support a small tubercle-like diapophysis. The chevron
bones are short and acuminate; the neural spines are a little shorter,
narrow, and truncate, and directed backwards at the same angle as
the chevron bones. They are much reduced on the eighteenth
caudal vertebra, where the chevron bones are considerably longer.
The abdominal rods are quite slender. The hind limb is quite
stout for this order. The femur is regularly expanded at both
extremities, but the distal is deeply and openly grooved,
distinguishing the condyles, while the proximal end is plane. There is
no trochanter visible. The ulna and radius are well separated, and
are three-fifths the length of the femur. There is a large fibular tarsal
bone of a subquadrate outline. In immediate contact with it is
probably the external digit with 5 phalanges or segments; the
ungual is simply conic. The femur is as long as 5 dorsal vertebræ.
The ribs have expanded, undivided heads, and extend to the
abdominal armature.
Measurements of the Type of Ichthycanthus ohiensis Cope.

mm.
Length of last 10 dorsal vertebræ 47
Length of first 23 caudal vertebræ 117
Length of a posterior rib 29
Length of a posterior dorsal vertebra 5
Length of twenty-second caudal vertebra 5
Length of femur 25
Proximal diameter of femur 8
Width of lower leg 9
Length of fibula 15
Length of tarsal bone 6
Length of digit 27

Ichthycanthus platypus Cope.


Cope, Proc. Am. Phil. Soc., pp. 574, 575, 1877.
Cope, Trans Am. Phil. Soc., XVI, p. 289, fig. 1, 1888.
Baur, Beiträge zur Morphogenie des Carpus und Tarsus der Vertebraten, I
Theil, p. 16, 1888.
Moodie, Science, n.s., XLI, No. 1044, p. 34, 1915.
Moodie, Am. Jour. Sci., XXXIX, pp. 509-512, fig. 2, 1915.
Type: Specimen No. 79540, and obverse, Department of Geology,
Columbia University. (Plate 23, fig. 1.)
Horizon and locality: Linton, Ohio, Coal Measures.
This amphibian is represented by the same portions of the
skeleton as the preceding species, furnishing a good basis for
comparison. It is very well preserved, displaying the characters,
especially of the hind foot, which is almost entirely represented.
Several features distinguish it from the I. ohiensis, one of which
is of more than usual value if correctly indicated by the fossil. There
are 10 vertebræ from the anterior end to the sacrum preserved in
place, and none of them supports a rib, nor are there any ribs visible
anywhere on the block of shale. I suspect that they exist on more
anterior vertebræ, or may have been displaced to a more anterior
position than they normally occupy. The abdominal chevrons are
more anterior in position than are those of the I. ohiensis. The hind
legs are longer than in that species; in this one the femur equals 7.5
vertebral centra in length. The external digit, on the other hand,
while bearing 5 phalanges, is distinctly shorter. The fibular tarsal is
of a transverse oval, not quadrate, form.
The dorsal centra are shorter and deeper than long; the neural
arches are elevated, with short but distinct zygapophyses, and a flat,
subquadrate, superiorly truncate, neural spine. They bear short,
vertically compressed diapophyses near the base of the arches. The
neural spines of the caudal vertebræ become rapidly more slender,
and also diminish in length, while the zygapophyses are continued to
the fifteenth vertebra. The chevron bones are slender, and inclose a
moderate hæmal opening.
MOODIE PLATE 24

1. Photograph of the type specimen of Pelion lyelli Wyman, from


the Ohio Coal Measures. Supposed to represent the
ancestral form of the Salientia. × 2. Original in American
Museum of Natural History.
2. Scales of Cercariomorphus parvisquamis Cope, a microsaur
from the Ohio Coal Measures. × 10. Original in American
Museum of Natural History.
3. Type specimen of Cercariomorphus parvisquamis Cope, from
the Ohio Coal Measures. Original in American Museum of
Natural History. × 0.75.
The femur is gradually expanded to the extremities. Proximally
there is a trochanteric ala, besides the obtuse head. Distally the
condyles are well distinguished, the external or fibular being
truncate. The fibula is less than three-fifths the length of the femur,
and is expanded at both extremities. Two proximal tarsals are
distinct; the one next the fibula is larger than the other and
transverse suboval in form. It has a median dividing ridge as though
composed of fibulare and intermedium coössified. The tibiale is
subtriangular. There are five distinct phalangeal tarsals. The toes
are, in the order of their lengths, beginning with the shortest, 1-2-5-
3-4. Their phalanges (including metatarsals) are, in the proper order,
commencing with the hallux, 3-3-4-5?-5, the distal end of the fourth
finger being lost. These bones are rather stout, and the unguals are
simply conic. The form of the foot is short and wide. The number of
the phalanges is nearly similar to that found in Amphibamus
grandiceps, excepting that in that species the fifth digit has but 4.
They are more numerous on most of the digits in Sauropleura
digitata. Cope (Trans. Am. Phil. Soc., XVI, 289, fig. 1, 1888)
contributed the following note on Ichthycanthus platypus:
"A reëxamination of the type specimen of this species from the Coal
Measures of Ohio, preserved in the Museum of Columbia College, New York,
enables me to refer this species to the Rachitomi. The neural spines are
distinct, showing that it belongs, probably, to the Eryopidæ. As the skull is
not preserved, I can not determine the genus positively, but refer it for the
present to Eryops. I append a figure of the posterior foot, which displays the
characters of the tarsus of this group for the first time. The number of tarsals
is as in a Theromorph reptile, except that two elements represent the cuboid
bone as in the reptile, Stereosternum tumidum Cope; giving five elements in
the distal tarsal row. There is but one centrale and no intermedium. Two
fragments of caudal vertebræ adhere to the specimen."

Measurements of Ichthycanthus platypus Cope.


mm.
Length of 10 dorsal vertebræ 45
Length of 15 caudal vertebræ 55
Length of centrum of a dorsal 3.8
Total elevation of a posterior dorsal 14
Length of femur 32 Length of first digit 10
Diameter of femur medially 4.5
Diameter of femur distally 8.3
Length of fibula 18
Diameter of fibula proximally 7
Width of sole at second row of tarsal bones 17
Length of foot to end of third digit 31
Length of third digit 22
Length of fifth digit 20
The writer has had the privilege of restudying this interesting
specimen and has already (484) described the foot and tarsus, as
follows:
The only known specimen of this anomalous amphibian is
incomplete, representing the posterior half of the skeleton, and an
abundance of ventral scutellæ or calcified myocommata. The block
of coal containing these interesting remains is from Linton, Ohio, and
is preserved in the geological collections of Columbia University, from
which institution Professor Grabau very courteously forwarded it for
study.
Ichthycanthus platypus was described by Cope from the Linton,
Ohio, Coal Measures, locating it doubtfully in the Permian genus
Eryops on account of the unusual condition of the tarsus and
reconsidering a former decision in favor of a Coal Measures genus
Ichthycanthus. In this disposition of the species into the Permian
genus he is followed by Hay (317); but Baur (28) regarded the form
as a member of the Coal Measures genus Ichthycanthus, after
commenting on the later definition by Cope. The type of the genus,
Ichthycanthus, to which Cope first allied the species under
consideration, is I. ohiensis, a supposed amphibian from the Coal
Measures of Linton, Ohio, founded on incomplete material.
The form combines in an unusual and remarkable degree
reptilian and amphibian characteristics. The leg bones, pelvis, and
tarsus are all strikingly reptilian, but the phalanges in the
arrangement of elements are so typically amphibian that if we had
no other means of diagnosis we would incline to locate this Coal
Measures species among the Amphibia. The leg (plate 23, fig. 1)
recalls in its structure that of another Coal Measures species,
Eosauravus copei Williston, which is, however, clearly a reptile. While
there is a general degree of similarity between the foot structure of
Eosauravus copei and Ichthycanthus platypus, yet there are very
great differences in the phalangeal formula and the arrangement of
the tarsal elements. These differences are clear and indicate a
separation of the two species into distinct classes. The phalangeal
formula in the Eosauravus, 2-3-4-5-4, is typically reptilian; while in
the Ichthycanthus, 2-2-3-3-3, it is amphibian. The tarsus of the
Ichthycanthus is amphibian in the presence of an intermedium, but
this is very small and the remaining tarsal structures have nothing
which might not be found in an early reptile. There may be a single
or even two centralia in the reptilian tarsus among the early forms.
The amphibian nature of the species having thus been
established, it remains to give a detailed account of its skeletal
anatomy, with comparative references to such other ancient forms
as are available. Little can be said of the vertebral column, since only
the molds of a few vertebræ remain, and these are so obscured by a
closely adherent pellicle of carbonaceous material that their form can
not be distinctly discerned. They are high, with relatively broad
neural spines. There are no ribs preserved. The pelvis is obscured,
but it is possible to determine the presence of an elongate ilium and
an ischium. The leg of the left side is the best preserved of all the
elements, and it is to this that our attention will be confined. The
opposite leg is not so complete, yet all the long bones and a part of
the tarsus are preserved with sufficient clearness to corroborate the
findings of the left side.
The femur, as has been stated, is reptilian in appearance. This is
due to the well-rounded articular surfaces, as though the
endochondrium were well developed, and to the large development
of the greater and lesser trochanters, which are quite prominent,
though these are distorted and depressed in fossilization. The bone
is stout and well built and its form suggests an active habit of life.
The tibia and fibula are separate, and do not otherwise have
sufficiently noteworthy characters to call for a special description in
this place, except to note an unusual anterior crest on the tibia. To
the lower ends of these bones articulate the first row of tarsal
elements, the tibiale, intermedium, and fibulare. The tarsus is
composed of 9 elements arranged in 3 rows. The proximal row is
composed of the tibiale, the intermedium, and the fibulare. On the
edge of the tibiale there lies a portion of one of the caudal vertebræ,
so that the form of this tarsal element is slightly obscured. The
intermedium is a small, rounded element lying between the larger
elements. The fibulare is rectangular and projects a considerable
distance out from the tibia, but articulates directly with the large
lateral distal tarsal. The centrale is triangular in form and is opposed
directly by the tibiale and tarsalia 1 to 3. The phalanges are robust
in appearance. The entire foot gives one the impression of a very
broad structure. The ungual phalanges were apparently bluntly
clawed.
CHAPTER XXIII.

SUPPOSED MICROSAURIAN
SPECIES OF UNCERTAIN
RELATIONSHIP.
The following three species are so unusual and so incompletely
known that they can not be considered with any of the above
families: Brachydectes newberryi Cope, Linton, Ohio; Amblyodon
problematicum Dawson, Nova Scotia; Proterpeton gurleyi Moodie,
Danville, Illinois.

Genus BRACHYDECTES Cope, 1868.


Cope, Proc. Phila. Acad. Nat. Sci., 1868, p. 214.
Cope, Trans. Am. Phil. Soc., 1868, p. 14.
Cope, Geol. Surv. Ohio, II, pt. II, p. 388, 1875, pl. xxvii, fig. 2.

Type: Brachydectes newberryi Cope.


Cope (Geol. Surv. Ohio, vol. II, pt. II, p. 388, 1875), says:
"This genus is indicated by two rami of a mandible and a portion of a
premaxillary only. These, when compared with those of Œstocephalus and
Tuditanus, from the same locality, and with others described by authors, are
so much stouter, i.e., shorter and more elevated, that they evidently belong
to a genus unlike either. The genus further differs from Œstocephalus in
having the teeth of equal size to the posterior part of the series; that is, to
the base of the elevated coronoid process. The teeth are elongate cylindrical
cones, with their acute tips turned a little posteriorly. The fractured ones
display a large pulp cavity. The three premaxillaries preserved are similar, but
without curvature at the tips. They do not exhibit striæ or any other
sculpture.
"So far as the remains known go, the genus is nearer Hylerpeton than
any other. According to Dawson, that genus is provided with a large canine-
like tooth, at the anterior extremity of the maxillary, on the inner row, which
is inserted into a distinct socket. No such tooth appears among those of this
genus. The latter does not give any indication of the very elevated coronoid
process of Brachydectes, though the external portion of the dentary bone in
that region being lost, little can be said about it."

Brachydectes newberryi Cope.


Cope, Proc. Phila. Acad. Nat. Sci., p. 214, 1868.
Cope, Trans. Am. Phil. Soc., 1868, p. 14.
Cope, Geol. Surv. Ohio, II, pt. II, p. 388, pl. xxvii, fig. 2, 1875.

Type: Specimen No. 8604 G, American Museum of Natural


History.
Horizon and locality: Linton Ohio, Coal Measures. Cope (Geol.
Surv. Ohio, vol. II, pt II, p. 388, 1875) says of this form:
"The species is represented by one nearly perfect ramus mandibuli, one
dentary bone and one premaxillary, probably not complete.
"The dentary bone appears to have been attached by suture to the
articular and angular, as its free margin has very much of the outline of that
suture in Amphiuma and lizards. The coronoid process would also seem to be
a part of the same bone as in Amphiuma and Menopema, and not composed
of the coronoid bone as in lizards. It rises immediately behind the last tooth,
and displays no suture.
"The lower portion of the dentary is prolonged into an acute angle. This is
separated by a deep and wide concavity from the superior posterior
prolongation, which is obtuse, and rises at once into the coronoid process.
Teeth on this dentary, seven; the same number is on the preserved ramus;
this number is suspected to be complete, or nearly so. The teeth terminate
at the obvious termination of each ramus, which is, it is true, slightly
obscured. These teeth are the longest in the Microsauria in relation to the
depth of the ramus, equaling the largest in Œstocephalus. They are
doubtless exposed, as are some of those of the last-named genus, by the
splitting away of the outer parapet of the dentary bone. As no traces of
alveoli have been thus rendered visible I suspect the dentition to have been
acrodont, as in some existing Batrachia.
"No external surface of the mandible remains, but there are no
impressions of sculpture on the matrix. A little external face of the
premaxillary displays none.
"The species is dedicated to Professor John S. Newberry, the able director
of the Geological Survey of Ohio, and discoverer of most of the Batrachia
herein described."
Measurements of the Type.

mm.
Length of ramus of mandible (imperfect) 22
Depth at last tooth 5
Length of exposed tooth 3.5
Length of dentary 16
Depth at coronoid process 7.5
Depth at first tooth 3

Genus PROTERPETON new genus.


Type: Proterpeton gurleyi Moodie.
Known from a single vertebra. Spine very high and heavy, the
neural canal large.

Proterpeton gurleyi new species.


Type: Specimen No. 13,296, Walker Museum, University of
Chicago.
Horizon and locality: Coal Measures near Danville, Illinois.
The vertebra, as preserved, is well characterized by the figure
(plate 22, fig. 2). The spine is high and heavy, the neural canal is
large, and the centrum reduced. The form is very unusual. It is
apparently from the cervical region, as there are no indications of
zygapophyses, transverse processes, or hæmal arches, although
they may have been abraded; apparently not, however. The type
specimen was discovered near Danville, Illinois, about the horizon of
the Danville coal, so that it is quite high in the Allegheny series of
the Pennsylvanian and of about the same horizon as the phalangeal
bone from Breeze, Illinois, which may be provisionally associated
with this form. There is no assurance that Proterpeton gurleyi is an
amphibian. The vertebra may have belonged to a fish.
Measurements of the Type of Proterpeton gurleyi Moodie.

mm.
Entire height of vertebra 24
Width at side of neural canal 21.5
Width of neural canal 13
Height of neural canal (crushed?) 6.5
Width of vertebral centrum anteroposteriorly 5.5
Height of neural spine from top of neural canal 9

Genus AMBLYODON Dawson, 1882.


Dawson, Phil. Trans. Roy. Soc. London, pt. 11, p. 644, pl. 40, figs. 57-61,
1882.

Type: Amblyodon problematicum Dawson.


This genus was described by Dawson in 1882 from very
imperfect remains. He says that it is "characterized by stout
cylindrical teeth, blunt at the apices; but otherwise imperfectly
known."

Amblyodon problematicum Dawson.


Dawson, Phil. Trans. Roy. Soc. London, pt. II, p. 644, pl. 40, figs. 57 to 61,
1882.

Type: Specimen No. 3061-10, Peter Redpath Museum, McGill


University.
Horizon and locality: Coal Measures of Nova Scotia.
A fragment of a jaw 1 cm. in length
has 10 cylindrical teeth, simple and
smooth, with large pulp cavities and
rounded regularly at the apices. With
these are 4 vertebræ of the usual type,
measuring together 1 cm. Fragments of
cranial bones also occur and are obscurely
pitted. There is also what seems to be the Fig. 38.—Skeletal elements
shaft of a limb bone and a few oval scales. of Amblyodon sp. from the
Coal Measures of Nova
A flat and somewhat rhombic bone, with a
Scotia.
style at one side, may possibly be a
thoracic plate or possibly a parasphenoid. a, tooth, × 25; b, section of
tooth, × 25; d, fragment of
The material is too scanty for any thoracic plate; f, shaft of
satisfactory description of this animal, but limb bone; e, rib.
it is provisionally named Amblyodon
problematicum.
CHAPTER XXIV.

THE TEMNOSPONDYLOUS
AMPHIBIA OF THE COAL MEASURES
OF NORTH AMERICA.
DEFINITION OF THE ORDER
TEMNOSPONDYLIA, ZITTEL. 1887.
Zittel, Handbuch der Paleontologie, Abth. 1, Bd. 3, p. 384, 1887.
Terrestrial or semi-aquatic vertebrata; skull bones pitted and grooved;
lateral-line canals present in well-developed form; pineal foramen sometimes
absent; sclerotic plates present; vertebræ rachitomous or embolomerous;
notochord partly persistent; one or two sacral vertebræ; tail present, long or
short; limbs and girdles well developed; limb bones well ossified and bones
of arm and leg separate; pectoral and pelvic girdles composed of the usual
stegocephalian elements; an osseous pubis present; a cleithrum present on
the scapula; carpus and tarsus ossified, carpals n and tarsals 12 in one form;
phalangeal formula, 2, 3, 3, 4, 2 for the hand and 2, 3, 3, 3, 2 for the foot;
fore and hind limbs pentadactyl in a few forms; venter covered with an
armature of osseous scutes, sometimes overlapping; skin of back bare or
armored with heavy plates; ribs heavy, double-headed, curved and
moderately long, or short; body short and heavy, as compared to skull about
2 to 1.

Range: Coal Measures to upper Permian.


Distribution: North America: Illinois, Kansas, Oklahoma, Texas,
and Pennsylvania; Europe: Germany, Bohemia; France; Asia: India.

Family CRICOTIDÆ Cope, 1884.


Cope, Am. Nat., XVIII, p. 38, 1884.
General form of the body elongate, with triangular skull and short, stout
limbs. Snout narrow, orbits large, elongated oval, situated near the middle of
the skull. External bones faintly sculptured, sensory canals conspicuous,
parietal foramen large. Teeth conical, of unequal size. Presacral vertebræ
composed of horseshoe-shaped pleurocentra and hypocentra, the former
alone supporting the neural arch. In the caudals the pleurocentra and
hypocentra form complete rings, and both elements take part in the support
of the neural arch, but the hæmal arch is borne exclusively by the
hypocentra. A close abdominal armor of imbricate scales, arranged in a
chevron pattern. Caudal vertebræ numerous. Chevrons coössified with the
intercentra.

Genus SPONDYLERPETON Moodie.


Moodie, Kans. Univ. Sci. Bull., vi. No. 2, p. 355, 1912.

Type: Spondylerpeton spinatum Moodie.


The genus is based on a specimen consisting of 9 imperfect
vertebræ, from the caudal region of a relatively large amphibian.
The present genus exceeds Diplospondylus from the Gaskohle of
Bohemia (251) by twice its size and is about two-thirds the size of
Cricotus heteroclitus Cope (98) from the Permian of Kansas. The
vertebræ are twice as high as wide, differing thus from Cricotus, in
which the vertebræ are nearly circular. A character which is of great
importance is the large size of the intercentrum, which almost equals
the pleurocentrum in size. It is similar to the pleurocentrum in
shape, except for the attached neurocentrum and chevron on
the latter. The present genus differs from Diplospondylus in the
greater length of the intercentrum and pleurocentrum, in the greater
size, in the larger proportions of the neurocentrum, and the greater
proportionate size of the intercentra.

Spondylerpeton spinatum Moodie.


Moodie, Kans. Univ. Sci. Bull., VI, No. 2, pp. 355-357, pl. 8, figs. 1 and 2;
pl. 9, fig. 1, 1912.
Type: Specimen No. 793 (26) and obverse, Yale University
Museum.
Horizon and locality: Mazon Creek, near Morris, Illinois.
The species is very imperfectly known. Sufficient is present,
however, to show its wide generic differences from other forms of
the Cricotidæ. These characters are of a phylogenetic nature and
indicate the more primitive nature of the present form, as we would
expect from its geological position. The sutures separating the four
vertebral elements are clearly apparent. The pleurocentral-
neurocentral suture is apparent in 4 vertebræ.
There is but a single
pleurocentrum preserved complete.
This shows the form of the attached
neurocentrum and chevron, which
corresponds to the hypocentrum
pleurale according to Fritsch. The
pleurocentrum is flattened laterally,
with a rather large canal for the
notochord. Its sides are marked with
4 longitudinal grooves. Surfaces for
the attachment of the ribs are not
present, and for this reason, as well
as the presence of chevrons, the
Fig. 39. The vertebræ of
vertebræ are supposed to be Spondylerpeton spinatum Moodie,
caudals. As such they represent an the only known temnospondyle
animal of some 3 or 4 feet in length. from the the Mazon Creek shales.
It was the giant of the Mazon Creek × 1. hy, hypocentrum; inc,
Amphibia. (Plate 4, figs. 1, 2.) intercentrum; pc, pleurocentrum;
nc, neurocentrum.
Attached to the upper side of
pleurocentrum by a sutural union
occurs the neurocentrum. The neural arch is quite large and is oval
in outline, although somewhat constricted at the tip. The spine of
the neurocentrum is rather long and broad at the base, measuring
12 mm. across the anterior zygapophysis. The neurocentrum is
laterally flattened and ends in a rather acute and somewhat rugose
point. It was probably tipped with cartilage. The anterior
zygapophysis occurs well down on the neurocentrum, its lower edge
being 5 mm. from the suture separating the pleurocentrum and the
neurocentrum. The posterior zygapophysis occurs quite high up on
the neurocentrum and lies at a distance of 15 mm. from the pleuro-
neurocentral suture, thus indicating an extreme posterior inclination
of the neural spine. The posterior zygapophysis of the best
preserved vertebra is separated from its mate, the anterior
zygapophysis, in the next succeeding vertebra by a space of 5 mm.
The ventral surface of the pleurocentrum bears a structure,
which is, without doubt, a chevron, although the character of its
opening can not be determined. It is elongated and is united by a
broad base to the pleurocentrum. Its union is by a clearly defined
suture, which is apparent in 3 vertebræ. The condition represented
by the specimen duplicates almost exactly the condition figured by
Cope for the caudal region of Cricotus Cope.[D]
[D] COPE, E. D., Trans. Am. Phil. Soc., XVI, p. 246, 1890.

The intercentrum of the present form is fully as large as the


pleurocentrum. The significance of this has already been mentioned.
The body of the centrum is pierced by a large notochordal canal.
Measurements of the Type of Spondylerpeton spinatum Moodie.

mm.
Length of specimen 60
Length of pleurocentrum 11.5
Height of pleurocentrum to base of neurocentrum 20
Length of neurocentrum 33
Width of neurocentrum at base 9
Width across anterior zygapophysis 12
Width across posterior zygapophysis 10
Length of intercentrum 10
Height of intercentrum 10.5
Height of chevron 3
Length of chevron 18
Width of notochordal opening in centrum 5
Height of same 4.5
Height of neural canal 12
Greatest width of neural canal 6

Family ERYOPIDÆ Cope, 1882.


Cope, Am. Nat., XVI, p. 334, 1882.
Large, terrestrial or amphibious vertebrata; skull bones deeply marked
with pits and grooves which take the form of lateral-line canals; infra- and
supraorbital canals, antorbital commissure, jugal canal, and occipital cross-
commissure of the lateral-line system present in Eryops megacephalus Cope;
carpus and tarsus osseous; pubis an osseous plate, surrounded in life by a
large amount of cartilage; fore and hind limbs pentadactyl; orbits, in the
typical genus, located far back on the skull and near the median line;
cleithrum present on the scapula; vertebræ rachitomous, the intercentrum
supporting the arch in the dorsal region; parasphenoid well-developed or
reduced; teeth on pterygoids, palatines, prevomers, and parasphenoid.

Range: Upper Pennsylvanian to Permian.


Distribution: America, Europe, Asia.

Genus ERYOPS Cope, 1877.


Type: Eryops megacephalus Cope.
Skull long, comparatively narrow; proportion of length to breadth about 9
to 7. Roof bones coarsely sculptured posteriorly, finely sculptured anteriorly.
Nasals and premaxillæ very large; frontals excluded from the orbits by
junction of pre- and post-frontals. Pterygoids not meeting in the median line;
parasphenoid dagger-shaped, tapering gradually to a point just in front of
the palatine foramen; prevomers large. Orbits subcircular, situated in the
posterior half of the skull; nares subovate, remote, at a considerable distance
from the tip of the skull. Many minute denticles, on pterygoids, palatines,
prevomers, and parasphenoid. Teeth circular in cross-section, strongly ribbed
near the base, dentine strongly infolded. Three large teeth on each palatine.
Mandible without postcotyloid process. Vertebræ rachitomous. Ribs double-
headed. Pubis osseous. Three species (Permian), E. megacephalus, E. latus,
and E. willistoni, are assigned to the genus.

Eryops is represented in the Carboniferous deposits of North


America by incomplete vertebral remains described by Case (94)
from near Pittsburgh, Pennsylvania.

MOODIE PLATE 25

1. Photograph of type specimen of Erpetosaurus (Tuditanus)


radiatus Cope, from the Coal Measures of Linton, Ohio. ×
1.3. Original in American Museum of Natural History.
2. Photograph of type specimen of Erpetosaurus tabulatus Cope,
from the Coal Measures of Linton, Ohio. × 2. Original in the
Zoological Collections of Columbia University.
3. Photograph of the impression of Stegops divaricata Cope,
from the Coal Measures of Linton, Ohio. × 2. The specimen
figured is in the American Museum of Natural History. Its
obverse is in the collections at Walker Museum, University
of Chicago.
4. Type and only known specimen of Micrerpeton caudatum
Moodie, a branchiosaur from the Coal Measures shales of
Mazon Creek, Illinois. × 2. Original in collections at Walker
Museum, University of Chicago.

Eryops sp. indet. Case, 1908.


Case, Annals Carnegie Mus., IV, p. 234, pl. 59, 1908.

A dorsal vertebra is very probably from this genus. The specimen


consists of a nearly perfect vertebra, lacking only the anterior
zygapophysis and the upper portion of the neural spine (plate 18,
fig. 2). It shows no character that would warrant its separation from
the genus, and indicates a medium-sized individual. The
zygapophyses have clean-cut articular faces. The pleurocentra are
thickened above, with just well-defined articular faces, which were
applied to faces on the neural arch posterior to the origin of the
transverse process. The intercentrum is of the familiar halfmoon-
shape, thick and heavy below, and thinner toward the extremities;
the anterior edge is marked near the top by the indentation found
on the intercentra of Eryops.
Height of the vertebra from the middle of the lower face of the
intercentrum to the middle of the neural canal, 0.035 m.; width of
intercentrum 0.026 m.
The second recognizable specimen is a neural spine from the
caudal series. This is without question a portion of the skeleton of an
Eryops. Similar spines were described by Cope as Eryops
(Epicordylus) erythrolithicus, but later discoveries seem to show that
similar characters occur in other species of the genus as well. The
apex of the spine is bifurcate; the space between extremities is
concave and perfectly smooth; below the sides of the spine are
rather rugose and marked with ridges. The lower portion of the
spine is elongated anteroposteriorly and the edges are marked with
sharp, double ridges.
Three ribs also belong, in all probability, to the genus Eryops. The
head of each rib is broad and the articular edge is divided between
two faces which meet at an angle somewhat greater than a right
angle; the two faces are continuous. The shaft is somewhat
flattened and in the undistorted specimens is gently curved. The
length of the largest rib is about 0.07 m.
Other than these specimens there are several small intercentra
(94) and the neural spine of a caudal vertebra from some
undetermined amphibian.

Family MACRERPETIDÆ Moodie, 1909.


Moodie, Bull. Am. Mus. Nat. Hist., XXVI, art. XXV, p. 354, pl. lix, fig. 1,
1909.

It has seemed necessary to propose a new family for the


reception of the single species Macrerpeton (Tuditanus) huxleyi
Cope. The characters exhibited by this species are so different from
those offered by other members of the Carboniferous Microsauria
that it is clearly distinct. In its cranial characters and the position of
the orbits it approaches most nearly to Eryops megacephalus Cope
from the Permian of Texas. In some of its characters the present
form shows a similarity to Dasyceps bucklandi Lloyd (324), from the
Permian of Kenilworth, England; more especially is this similarity
found in the form of the skull, the size and shape of the teeth, and
the posterior position of the orbits, and their wide removal from the
border of the skull. Only a fragment of the skull has hitherto been
known, but repeated study of this fragment (123) has disclosed the
wide diversity (462) of its characters. An almost complete skull,
described below, substantiates the characters based on the
fragment. Another species is here added to the genus, based on a
portion of a mandible and a portion of the skull.
The family, Macrerpetidæ, may be defined (465) as follows:
Skull larger than in any other known microsaurian, unless Baphetes
proves to be microsaurian; cranial elements sculptured with pits and coarse
grooves; lacrimal element present, teeth large, curved inwards and fluted;
mandible heavy; orbits located far back on the skull and near the median line
so that the interorbital space is about half the space from the outer edge of
the orbit to the border of the skull, thus approaching the condition known in
Eryops; the ribs (?) are strong, heavy, and curved, with an incipient tubercle.

Genus MACRERPETON Moodie, 1909.


Moodie, Jour. Geol., XVII, No. 1, pp. 72-74, fig. 17, 1909.

Type: Macrerpeton huxleyi Cope.


The genus Macrerpeton was proposed for the reception of the
amphibian species described by Cope as Tuditanus huxleyi (123).
This form he placed provisionally in genus Tuditanus, since it
seemed to present the same type of sculpturing of the cranial
elements similar to that found in T. radiatus Cope. But this species
has been removed from Tuditanus and placed in a new genus,
Erpetosaurus (462). A close study of the type specimen of Tuditanus
huxleyi Cope shows (465) great variation and distinction from any of
the species described from Linton, Ohio, or indeed from any
Carboniferous form thus far known.
The specimen represents the left side of the face, and the
characters exhibited by the fragment are supported by more
complete material (No. 2933, Am. Mus. Nat. Hist.). The skull shows
a close approach to the higher labyrinthodonts in its shape. The
orbits are far removed from the border of the skull. The
arrangement of the bones of the skull resembles that of
Capitosaurus from the Keuper of Europe. The jaw is for the most
part slender, with a pronounced downward inflection at the
coronoidal part. The teeth are heavy and strong and are curved
backwards. They have the strong longitudinal fluting which is
characteristic of the labyrinthodonts. Another character which is
distinctive is the pattern of cranial sculpture. This consists of
inosculating pits and grooves of a coarse character and compares
favorably with the sculpturing of Triassic labyrinthodonts. If
Macrerpeton really represents a labyrinthodont form of Amphibia it is
the oldest of the known Labyrinthodontidæ, since it seems probable
that the Eosaurus vertebræ came from a higher horizon.

Macrerpeton huxleyi Cope, 1874.


Cope, Trans. Am. Phil. Soc., XV, p. 274, 1874.
Cope, Geol. Surv. Ohio, II, pt. II, p. 397, pl. xxxiv, fig. 2, 1875.
Lesley, Dictionary of Fossils, p. 1237, 1890.
Moodie, Jour. Geol., XVII, No. 1, p. 72, fig. 17, 1909.
Moodie, Bull. Am. Mus. Nat. Hist., XXVI, art. XXV, p. 354, pl. lix, fig. 1,
1909.

Type: Specimen No. 119, American Museum of Natural History.


Collection of Dr. J. S. Newberry. (Plate 26, fig. 2.)
Horizon and locality: Linton, Ohio, Coal Measures.
MOODIE PLATE 26

1. Photograph of type specimen of Erpetosaurus


tuberculatus Moodie, from the Ohio Coal Measures.
× 1. Original in American Museum of Natural
History.
2. Photograph of type of Macrerpeton huxleyi Cope,
from the Ohio Coal Measures. × 1. Original in
American Museum of Natural History.
The first part of the following account of the species,
Macrerpeton huxleyi Cope, is a quotation of Cope's description (123)
of the type specimen, and the second part deals with the description
of the new material. Cope says the species is
"Represented by a considerable portion of the face and muzzle of a single
individual. A portion of the left mandible, supporting three teeth, remains in
place, and almost the entire boundary of the right orbit is preserved.
"The fragment indicates a much larger species than any other referred to
the genus, and, next to the Leptophractus obsoletus, the largest of the
Batrachians of the Ohio Coal Measures. Without more complete remains, it is
not easy to determine its generic relations finally.
"The form of the head is probably elongate, and the muzzle neither very
obtuse nor elongate. The orbit is rather small, and near the middle of the
length of the specimen, which is, however, incomplete at both ends. The
sculpture of the surface of the head posterior to the orbits, as well as round
their borders and for some distance in front of them, consists of a rather
coarse pitting. On the middle line, between the orbits and on the muzzle, the
intervals become narrower, and are confluent into transverse ridges or a
delicate reticulation. The surface of the mandible displays a coarse
reticulation.
"The teeth are stoutly conic, and with delicately striate grooved
cementum. They are slightly recurved.
"This species differs from the T. radiatus and T. obtusus in the absence of
the area into which the sculpture is thrown.
"Longitudinal diameter of orbit, 19 mm.; length of alveolar border
supporting three teeth, 13 mm.; diameter of base of tooth, 3 mm.; eight pits
in 10 mm.
"Dedicated to Professor T. H. Huxley, facile princeps among English
systematists, and an important contributor to the knowledge of the extinct
Batrachia."

The following discussion of the cranial elements, based on the


writer's studies (462, 465) of the type, may be appended to
Professor Cope's original description. The sutures bounding a few of
the elements have been made out in part. The prefrontal element
seems well assured. It lies well in front of the orbit, much as in the
skull of Capitosaurus from the Keuper of Europe. The lacrimal is,
apparently, a very large bone, though its entire extent is not
assured.
The maxilla is a long, narrow element on the border of the skull.
The suture separating this from the lacrimal and jugal is quite clear.
The teeth which the maxilla undoubtedly bore are hidden by the
remains of the mandible, which lies partly on the edge of the skull.
The jugal is a very large element and its boundaries seem well
assured. Its size and relations recall the condition in Capitosaurus. It
forms a part of the external boundary of the orbit. The lateral suture
of the postorbital is evident and is, as shown in the figure,
somewhat curved. The remaining elements preserved on the
fragmentary skull can not be accurately determined, though their
probable position is indicated in plate 30, fig. 2, the lettering being
based on the arrangement of these elements in Capitosaurus.
The lower jaw is poorly preserved, but what remains shows
evidence of being sculptured somewhat after the manner of the
cranial elements. It bore strong recurved teeth which are
longitudinally striate.
Measurements of the Type Specimen of Macrerpeton huxleyi Cope.

mm.
Length of portion preserved 120
Maximum width of specimen 58
Length of orbit 20
Width of orbit 14
Length of jaw, as preserved 75
Width of jaw at widest part 11
Length of longest tooth 8
Width of tooth at base 4
Description of Additional Material of Macrerpeton
huxleyi.

The additional material of this species which has come to hand


consists of an almost complete skull (American Museum No. 2933,
two portions); another fragmentary skull (American Museum No.
8572 G and 8532 G); a portion of an interclavicle (American Museum
No. 8006); two incomplete vertebræ (American Museum No. 8007);
and another fragmentary element possibly representing a scapula of
this species (American Museum No. 8008).
The skull has essentially the shape outlined (462) from a study of
the fragmentary type specimen. The muzzle was drawn slightly too
broad, but otherwise the restoration is fairly accurate. The specimen
is distorted and imperfect, but enough is preserved to give a good
idea of the shape and something of the structure of the skull. A
portion of the obverse is preserved. The back part of the skull is
broken, so that the occiput can not be studied.
The length of the skull is one and two-fifths the greatest breadth
(across the orbits). The cranial elements are deeply marked with pits
and short, shallow grooves. On the left mandible these pits are in a
very distinct row, the operculo-mandibular lateral-line.

Macrerpeton deani new species.


Type: Specimen No. 2934, American Museum of Natural History.
Horizon and locality: Linton, Ohio, Coal Measures. (Plate 21, figs.
1, 2.)
The material for this species consists of the posterior half of the
left mandible and a portion of the right antero-lateral surface of the
skull, both incomplete. The reasons for regarding the species as
distinct are the large size of the specimens and the manner of the
sculpture, as well as the shape of the posterior end of the mandible.
The present species is the
largest amphibian of the Linton,
Ohio, Coal Measures, exceeding
in skull length that of
Macrerpeton huxleyi by twice.
The largest skull of Macrerpeton
huxleyi which has so far come
under my notice is 120 mm. in Fig. 40. Mandible of Macrerpeton deani
median length. There are 3 new species, from Linton, Ohio. × 0.75.
skulls of this species known, all
of approximately the same size.
The skull of Macrerpeton deani must have reached or exceeded a
foot in median length. The only species with which it can at all be
compared are Eobaphetes kansensis Moodie and Baphetes planiceps
Owen, but it is clearly distinct from all other genera of Linton
Amphibia. It is possible that when better known Macrerpeton,
Eobaphetes, Baphetes, Erpetosaurus, and possibly Dendrerpeton will
form a natural group of early labyrinthodont-like Amphibia.
The mandible is similar in structure to that of the
labyrinthodonts, with the elements marked by radiate flutings. I can
detect no evidences of a lateral-line canal, such as is clearly marked
in Macrerpeton huxleyi Cope by a series of rounded pits, occupying
the usual position of the operculo-mandibular lateral-line canal The
teeth, of which 6 are preserved, are minutely striate, with smooth
apices. They are dissimilar in size, showing a variation of 2 or 3 mm.
in length.
The sculpture is a coarse fluting, with no indications of the
sharply marked pits of Macrerpeton huxleyi Cope.
The fragment of a skull preserved shows characters of the
sculpture which are identical with those of the mandible. The bones
are so crushed that it is impossible to tell the limits of the elements.
I believe a portion of one orbit is represented on one corner of the
block. The cranium appears to have been broad, and the fragment
preserved, which is only about one-sixth of the skull, is larger than
the entire cranium and mandibles of Macrerpeton huxleyi.
The specific distinctness of the form can not be doubted,
although it is a matter of regret that it is founded on so small a
portion of the osteology of the animal.
The species is proposed in honor of Dr. Bashford Dean, to whom
I am greatly indebted for many kindnesses during the past 5 years in
connection with my studies on Carboniferous Amphibia, particularly
in the loan of the entire Newberry collection of Linton, Ohio,
Amphibia.
Measurements of the Type of Macrerpeton deani Moodie.

mm.
Length of portion preserved 115
Greatest width 50
Length of tooth 9
Width at base 4
Length of angular 95
Diameter of angular 25
Measurements of specimen No. 8535 G, American Museum
of Natural History, associated with the above in
the type description:
Length of preserved portion 140
Diameter of orbit 22

Family ANTHRACOSAURIDÆ Cope, 1875.


Cope, Bull. U. S. Nat. Mus., I, p. 10, 1875.
Lydekker, R., 1890, Cat. Fossil Reptilia and Amphibia, p. 157.
Skull usually triangular and more or less angulated, with the cranial
sculpture well marked, the occipital condyles ossified, and the palatine
foramina very small and placed far back; dentine of the teeth more or less
complexly plicated. A ventral armor of elongated dermal scutes, and probably
a sclerotic ring. Bodies of vertebræ fully ossified in the adult; intercentra
present or absent. According to Atthey's figure (11) of the skull of the type
genus, the palatine bears teeth which are situated immediately on the inner
side of the maxilla, as in Mastodonsaurus (242). In the typical forms there is
no postarticular process to the mandible.

The North American species of this family are: Eosaurus


acadianus Marsh, Eobaphetes kansensis Moodie, Dendrerpeton
acadianum Owen, Dendrerpeton oweni Dawson, Platystegos
loricatum Dawson, Baphetes planiceps Owen, Baphetes minor
Dawson.
There is but little assurance that any of these species belong in
this family. They are put there provisionally, pending future
discoveries. Huxley suggests the relationship of Eosaurus and
Anthracosaurus (Quart. Jour. Geol. Soc., XIX, 1863, p. 65; Scientific
Memoirs, II, p. 566).

Genus BAPHETES Owen, 1854.


Owen, Quart. Jour. Geol. Soc. London, X, p. 207, pl. ix, 1854.
Dawson, Air-breathers of the Coal Period, pp. 10-16, pl. ii, 1863.

Type: Baphetes planiceps Owen.


Known only from an incomplete skull, which is large, broader
than long; squamosals prolonged into obtuse horns. Teeth rather
large, heterodont, arranged in a single row. Orbits placed well
forward, frontals small, surface bones sculptured.

Baphetes planiceps Owen.


Owen, Quart. Jour. Geol. Soc. London, X, p. 207, pl. ix, 1854.
Dawson, Air-breathers of the Coal Period, pp. 10-16, pl. ii, 1863.

Type: Specimen in the British Museum of Natural History.


Horizon and locality: Near Pictou, Nova Scotia (Coal Measures).
The parts preserved include the premaxillaries, nasals, and
portions of the frontal, prefrontal, and maxillary bones. The fossil is
embedded in a mass of Pictou Coal from Nova Scotia and consists of
the anterior extremity of the cranium (plate 22, fig. 6) and with the
exterior surface of the bone embedded in the matrix, and its
substance, for the most part, reduced to a thin layer by abrasion of
the exposed inner layer. It displays accurately the contour of the fore
part of the upper jaw, which was broad, obtuse, and rounded.
The premaxillaries, which show some obscure traces of a
symphysial suture at the median line, anterior to the nasal or naso-
palatine vacuities, extend outwards, on each side, for an extent of
2.5 lines and there join the maxillaries. Traces of round alveoli for
teeth, some of which are 2 lines in diameter, are visible on the
alveolar border of the premaxillaries. The alveolar border is
continued by the maxillary bone for an extent of 4.5 inches beyond
the premaxillary border, and this border shows still more distinct
traces of alveoli, of a circular form, about a line in diameter and
rather close set in a single series. The fore part of the orbit is very
unequivocally displayed, the smooth inner or under surface of the
bone forming that part being entire; and this shows the fore part of
the orbit to be formed, partly by the maxillary, partly by the lacrimal
or prefrontal bone in close sutural union therewith, a structure which
does not exist in any recent or fossil fish with a dentigerous superior
maxillary bone. Where the substance of the bone has been detached
so far as to expose the external layer in contact with the coal, as,
e.g., on the frontal and part of the prefrontal bones, the external
surface of those bones is shown to have been impressed by
subhemispherical or elliptical pits, from 1 line to 1.5 lines in
diameter, and with intervals of half of that extent. This coarsely
pitted character agrees with that presented by the other surface of
the similarly broad and flat cranium of the labyrinthodonts.
From the characters above specified, therefore, I conclude that
this fossil is the fore part of the skull of an extinct family of the
labyrinthodonts. It agrees with them in the number, size, and
Welcome to our website – the ideal destination for book lovers and
knowledge seekers. With a mission to inspire endlessly, we offer a
vast collection of books, ranging from classic literary works to
specialized publications, self-development books, and children's
literature. Each book is a new journey of discovery, expanding
knowledge and enriching the soul of the reade

Our website is not just a platform for buying books, but a bridge
connecting readers to the timeless values of culture and wisdom. With
an elegant, user-friendly interface and an intelligent search system,
we are committed to providing a quick and convenient shopping
experience. Additionally, our special promotions and home delivery
services ensure that you save time and fully enjoy the joy of reading.

Let us accompany you on the journey of exploring knowledge and


personal growth!

textbookfull.com

You might also like