Now I want to get a bit closer to the implementation of our Program Slicing Tool.
For the time being, our program slicer is written in Oberon and can process programs written in Oberon. Oberon-2 is the latest programming language that has been developed by Niklaus Wirth, the father of Pascal and Modula.
Oberon-2 is a modular programming language with support for modules and structured user-defined types.
It allows for object-oriented programming with type-extension, code-resuse via inheritance, dynamic binding via methods and procedure variables.
Of course, Oberon programs can be recursive. There can also be nested procedures, that is procedures that are local to other procedures and that can only be called from within the including procedure.
Last but not least, Oberon also supports global variables and reference parameters which may introduce alias problems. Furthermore function calls can have arbitrary side-effects which complicate data flow analysis.
Our program slicing tool works on an abstract syntax tree as the internal representation of the program. We plan to port our program slicer to Java and investigate whether and how the abstract syntax tree would have to be extended to support different languages like Java.