Overview

Sem, an abstract semantic processor
===================================

What's sem?
-----------

Sem is an interpreter and a debugger for the SIMPLESEM language.   

"We said that in this book we will use an operational approach to semantics.
To do so, we introduce a simple abstract processor called SIMPLESEM, and we
show constructs can be executed by sequences of operations of the abstract
processor."

      PP. 69, "An abstract semantic processor"
                           Programming language concepts, Third Edition
                            Carlo Ghezzi, Politecnico di Milano
                             Mehdi Jazayeri, Technische Universitat Wien
                              John Wiley & Sons                  



License information
-------------------

This program is free software, released under the GNU Public License, which 
gives you, from the user point of view, a great degree of liberty, which 
proprietary software just doesn't.

Follows a little list of the advantages free software has:
  o  it's free;
  o  the complete source code is available;
  o  you are allowed to copy, modify and redistribute. For more info
     about this subject refer to the COPYING file.


Build instructions
------------------

Requirements:

- C99 compiler (such as gcc or clang)
- make

Building sem:

  $ ./configure  
  $ make                                

This creates an executable 'src/sem'. In order to install it type:
 
  $ make install 

By default installation directory is /usr/local, so 'sem' is installed in /usr/local/bin/sem. 

Developers need also:

- GNU autoconf (tested with version 2.69)
- GNU automake (tested with version 1.12.4) 
- GNU bison (tested with version 2.5.1) 
- GNU flex (tested with verstion 2.5.37)
- GNU indent (tested with 2.2.10)


How to use misc/sem.vim? 
------------------------

The file sem.vim is a Vim syntax file. It enables Vim to show parts of 
the text in another font or color for your .sem files. It has been tested
with vim 72.

Copy the file misc/sem.vim in ~/.vim/syntax/sem/sem.vim. Then put the 
following line in your filetype.vim (e.g. ~/.vim/filetype.vim):

au! BufNewFile,BufRead *.sem   setf sem


Distribution structure
----------------------

AUTHORS             Authors and contributors
ChangeLog           History of changes
COPYING             Licensing information
README              The file you're reading now
TODO                To-do list, ideas, bugs
doc/QUICKREF        Language reference
examples/comp.sem   Compare two numbers
examples/fact.sem   The factorial
examples/gcd.sem    Greatest Common Divisor
examples/hello.sem  Hello World, in SIMPLESEM this time
examples/pow.sem    The power
examples/rfact.sem  Recursive version of fact.sem
examples/sum.sem    Sum two numbers
misc/sem.vim        VIM syntax file
src/sem.h           Sem C interface
src/compiler.y      The compiler (GNU bison input)
src/compiler.c      The compiler (generated from compiler.y)
src/tokens.h        Tokens interface between scanner and compiler)
src/vm.c            The interpreter
src/debugger.c      The debugger
src/scanner.c       The lexical scanner (generated from scanner.l)
src/scanner.h       The lexical scanner interface
src/scanner.l       The lexical scanner (GNU flex input)
src/main.c          The main() for interpreter and debugger


Contact Information
-------------------

Email:
  davide.angelocola@gmail.com

URL:
  http://bitbucket.org/dfa/sem