Steven Nichols <>
9 Feb 2007 08:59:37 -0500

          From comp.compilers

Related articles
Re: PL/MIX (Roberto Waltman) (2007-02-07)
Re: PL/MIX (Max Hailperin) (2007-02-08)
Re: PL/MIX (Allan Adler) (2007-02-08)
Re: PL/MIX (Roberto Waltman) (2007-02-08)
Re: PL/MIX (glen herrmannsfeldt) (2007-02-08)
Re: PL/MIX (Steven Nichols) (2007-02-09)
Re: PL/MIX (Allan Adler) (2007-02-09)
Re: PL/MIX (Allan Adler) (2007-02-11)
Re: PL/MIX (2007-02-12)
Re: PL/MIX (Peter Flass) (2007-02-12)
Re: PL/MIX (Allan Adler) (2007-02-16)
Re: PL/MIX (Allan Adler) (2007-02-16)
[1 later articles]
| List of all articles for this month |

From: Steven Nichols <>
Newsgroups: comp.programming,comp.compilers
Date: 9 Feb 2007 08:59:37 -0500
Organization: Silicon Valley Public Access Link
References: <> 07-02-018
Keywords: assembler
Posted-Date: 09 Feb 2007 08:59:37 EST

In comp.compilers Roberto Waltman <> wrote:
>>Also, suppose one knows the architecture of a certain computer and
>>one has an assembly language for that computer (such as Knuth's MIXAL
>>for MIX) and one wants to produce an analogue of PL/I (assuming that
>>PL/MIX really is such an analogue) for that architecture which resembles
>>Knuth's description of more adequately reflecting data and control structures
>>resembling the Remarks field of the assembly language programs. How does
>>one go about producing such a variant? I get the impression from Knuth's
>>book that this is (or was) a standard activity that must have been done
>>on a lot of architectures.

You can make a control structure with a 2 dimensional array that contains
label suffixes, or string labels.

dim labels(16,2); //16 = number of nested structures, 2 = else and false
target labels.

Then set a structure level number pointer (used like a stack) to point
to the current structure, initialize your structure pointer and label

structpoint = -1; // preincrimented
labelnum = 0; // produces a label 'label0, label1, etc'

Use it like this:

For this output //do this

BeginIF; //structpoint = structpoint + 1; elseflag = 0;
                      //create 2 labels
                      //labels(structpoint,1) = 'label1' Create 'else' label
                      //labels(structpoint,2) = 'label2' Create 'false' label

    If p1 > p2 Then; // true fall through, false then JMP to else label
        (true code here)

            Else; // output absolute jump to false target label
                          // output else target label labels(structpoint,1)
                          // set elseflag = 1

              (else code here)

EndIF; //if else command used (elseflag) , output false label
                                      //if no else used, output else target label
                                      //structpoint = structpoint - 1
                                      //labelnum = labelnum + 2

Steve ;This should compile MIX (you write the macros).

Post a followup to this message

Return to the comp.compilers page.
Search the comp.compilers archives again.