Rz language
    (This compiler is still a work in progress.  For an older
    system
    (generate code for S2 processor),
    please visit the Rz
      compiler
      tools
      kit page )
    
    Rz is a descendant of R1, a concurrent language  for small
    control
    applications.  (Have a look at full report and implementation
    from
    my research
      work web page).  Rz is aimed to be a teaching language
    for
    system programming and computer architecture subjects, which
    emphasises
    a small language that can be used to illustrate all the "inner"
    working
    parts of a computer system (compilation, code generation, ISA
    simulation), in other words it allows students to "play" with the
    system.   R1 is a concurrent language. Rz simplifies
    that by eliminating all the real-time concurrency language features
    and
    retains only the most basic language constructs.  In a way, Rz
    "looks like" C (without type). 
    Short description
    
    The language is a small subset of C look-alike language. It has no
    type
    (or having only one type which is "int").  Global variables
    must
    be declared but local variables are automatic.  A variable can
    be
    either a scalar or an array.  There is no user defined data
    type.  An array is one dimension.  RZ language can be
    summarised as follows:
    
      - It has only integer as primitive data.  (natural size
        depends on implementation)
 
      - Global variables must be declared before their use. 
        Local
        variables are automatic (not required to be declared).
 
      - Global variables can be array.  The size of array must be
        known at compile time.  An array has only one
        dimension. 
        Local variables can be only scalar.
 
      - Reserved words are:  if,
          else,
          while,
          return,
          print.
 
      - Operators are:  +,
          -,
          *, /, ==, !=, <, <=, >, >=, !, &&, ||, *
          (dereference), & (address).
       
    
    For C programmer, please note, no: for, break, do, missing many
    operators especially ++, --  
    Quick Start  (simple tutorial
      for Rz version 3.3)
    
    Examples
    It is easier just to look at an example to know most of the
    syntax.  Here is an example of Rz
    
        // 
      find
      max in an array
        a[10], N;
    
          init(){
         
      i
      = 0;
         
      while ( i < N ) {
           
      a[i]
      =
      i;
           
      i
      =
      i
      +
      1;
         
      }
        }
    
        main(){
         
      N
      = 10;
         
      init();
         
      max = a[0];
         
      i
      = 1;
         
      while( i < N ) {
           
      if(
      max
      <
      a[i]
      )
      max
      =
      a[i];
           
      i
      =
      i
      +
      1;
         
      }
         
      print( "the max value is ", max );
        }
    
    The variables a[], N are globals, max, i are locals.  For an
    array, the size must be known at compile time.  (A note of C
    user,
    there is no ++, --, and no "break", "print" is not "printf").
    "print"
    knows only integer and string.  The size of basic unit
    (integer)
    depends on the target machine. 
    
    increment(x){
        *x = *x + 1;
      }
      
      main(){
        a = 1;
        increment(&a);
        print(a);
      }
    
    
    The call by reference can be achived using the * and & operators
    just like in C.  In short, you can think of RZ syntax as C
    without
    type declaration (writing a translator to convert Rz to C is a
    trivial
    task). 
    Current state of implementation
    
    rz3.zip  is a work in progress.  This is a new
    implementation
    of Rz language.  The new parser generator is written.  The
    grammar of Rz language is simplified.  The compiler is modified
    to
    output a parse-tree.  The parse-tree is an intermediate and
    explicit representation.  A separate code generator can be
    written
    for any desired target processor. (The original Rz is compiled into
    its
    own byte-code.  The original system also included a byte-code
    interpreter. For more information about the original system please
    visit Rz-language
    )
    
    rz3 included:
    comp:  the whole compiler
      lexgen:  lexical analyser generator
    
    pgen-c:  parser generator, the
      input is "rz-grammar9.txt"
    
    
    rz3 version 1.0  include its "meta-interpreter".   readme
    rz3 version 2.0  is an excercise in code generation.  It
    outputs a linear-code (assembly-like)
    to
    illustrate how to traverse and transform Rz parse-tree.  See example of output. 
    rz3 version 3.3 outputs s-code (version som-v2).  The output
    object code is run under Som-v2 virtual machine.
    rz3 version 3.5 with preprossing of input to use indentation as { }  and \n as ";".  The
    output is
    s-code (som-v2).  See a new Rz look here 
      bubble.txt
    
    Here is the sample session with v3.3 and v3.5
    >
        rz33 
        bubble.txt
      > somv2x bubble.obj
      20 19 18 17 16 15 14 13 12
        11 10
        9 8 7 6 5 4 3 2 1
      1 2 3 4 5 6 7 8 9 10 11 12
        13 14
        15 16 17 18 19 20
    
    Code Release
    
    12 Nov 2010    rz3.zip
    16 Nov 2010    rz31.zip    readme  
    28 Nov 2010    rz32.zip
    28 Aug 2011     rz33.zip  
    rz33-1.zip  (bug fix)
    1 Sept 2011      rz35.zip  
with
a
new
    look see example bubble.txt
    26 Sept 2011    rz35-1.zip 
(bug
    fix and include "syscall")  readme
    
    
    last update 7 June 2012