Export variable_name/2
Simplify layout_text_sequence

Everywhere in the grammar that called layout_text_sequence did so in a
context where the layout was optional.  Effectively,
layout_text_sequence greedily matched layout_text 1 or more times.  Then
the caller said, "Oh, it can match 0 times too, if necessary".  By
moving this logic into optional_layout_text, the code becomes smaller.

optional_layout_text//0 also describes the semantics more accurately.
This should make it possible to run the grammar in reverse more easily.
Simplify float parsing with dcg_basics:float//1

This library predicate does exactly what we want.  There's no need to
roll our own.
Rename prolog//1 to read_prolog//1

I hoped that a single DCG could handle both parsing and generating.
Unfortunately, it looks like the operator precedence parser really
dislikes running backwards.  As best I can tell, it will be easier and
cleaner to write a separate DCG for generating Prolog source code.
Teach codes_term/1 to generate Prolog source code

There is still a lot of work to be done in formatting the source code
nicely.  It's a start though.