Mark Hopkins <mark@omnifest.uwm.edu> wrote:>[snip a rather baroque explanation of state machines, etc.]

An infinite state machine? Hmm... I think I would take a somewhat simpler
approach:

----
Assembly language is a formal system that describes a finite state
machine in terms of the instruction set of a given CPU. It differs
from the CPU's instruction set, or machine language, in that it trades
compactness of representation for human readability. A special program
known as an assembler must then be used to translate assembly language
into machine language before the CPU may execute the finite state
machine (i.e., the program) that the assembly language describes.

High-level languages differ from assembly languages in their level of
abstraction. The goal of the high-level language (HLL) is to allow
programs to be described in terms of a logical model of computation
independent of the underlying machine architecture. Thus, in most
assembly languages, one increments registers, tests values and
performs conditional branches in order that the abstract behavior
known as looping occurs. In an HLL, one specifies the looping
abstraction directly, without having to become privy to the
machine-level details that actually implement that behavior.

The job of the compiler is to translate a program written in an HLL
into machine-level instructions. However, this is a bit of a
simplification, as the compiler may only translate the HLL program
into a semantically-equivalent assembly language program, which would
then have to be run through an assembler in order to be
executed. Also, there is no fundamental reason that machine languages
must consist of jumps, branches and pops -- any formal system can be
implemented directly in silicon, as was done in the case of Lisp
machines, and is today being done with Java chips.

---

Anyway, I think I might take this approach. If any of this is of
interest, feel free to use it.