ValerioMedeiros / b2llvm

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Introduction
============

This files describes the contents of the main directory of b2llvm.  This is a
prototype (yet robust) implementation in Python for the code generation from B
to LLVM. In addition, the directory also contains verification and validation
artifacts. Further details are given hereafter.

Implementation
==============

The implementation of the prototype is in Python and consists of the following

* b2llvm.py: main source file for a prototype of the translation in Python
* b2llvm: directory with custom modules for b2llvm.py
  - b2llvm/ast.py: Python encoding for B ASTs [todo: s/pict/classes/g]
  - b2llvm/bproject.py: Python class representing some settings of B projects
  - b2llvm/cache.py: Python class for cache. This class is used to store 
  the result of computations that may need to perform several times and to
  avoid duplicate work.
  - b2llvm/codebuf.py: Python class to store text produced during code
  generation.
  - b2llvm/loadbxml.py: To load a BXML file into ASTs encodings.
  - b2llvm/names.py: To create LLVM identifiers.
  - b2llvm/opcode.py: Contains string templates to form LLVM source code	
  one-liners.
  - b2llvm/printer.py: To generate human-readable texts corresponding to AST 
  encodings (useful for debugging modules ast.py and loadbxml.py).
  - b2llvm/strutils.py: Custom string functionality.
  - b2llvm/trace.py: This module provides support to output traceability
  information.
  - b2llvm/translate.py: Generation of LLVM programs from B AST encodings.
* b2llvmio.llvm: LLVM module providing output functions for basic types that 
  are used when the option --emit-printer is set.

V&V
===

The directory also contains elements for the verification and validation of the 
traduction
* bxml: directory with sample BXML files
  - bxml.xsd: schema defining the format of BXML files for B modules (from Clearsy)
  - project.xsd: schema defining the format of XML files for B projects (custom)
  - project.xml: settings for a B project (custom)
  - counter.bxml, counter_i.bxml: B machine and implementation of a simple 
  counter (generated by Clearsy tools)
  - wd.bxml, wd_i.bxml: B machine and implementation of a watch-dog timer 
  *instantiates counter* (generated by Clearsy tools)
  - timer.bxml, timer_r.bxml, timer_i.bxml: B machine, refinement and 
  implementation of a timer *instantiates counter* (generated by Clearsy tools)
  - ibxml.xsd: (from Clearsy)
  - ioint.bxml: example of a base machine *as opposed to a developed machine*
  - mult.bxml: B machine and implementation to test arithmetic expressions 
  (generated by Clearsy tools)
  - swap.bxml, swap_i.bxml: B machine and implementation to test assignment, 
  operation parameters, local variables (generated by Clearsy tools)
  - switch.bxml, switch_i.bxml: B machine and implementation to test case 
  instruction (generated by Clearsy tools, *broken*)
  - thr.bxml, thrdef.bxml: B machine and implementation to test sees clause 
  (generated by Clearsy tools)
* bxml2text.py: Python script that reads a BXML file and prints the 
  corresponding source code (uses b2llvm/ast.py, b2llvm/loadbxml.py, 
  b2llvm/printer.py)
* scaffold-<PROJ>.llvm: some crafted LLVM files to animate LLVM implementation 
  of different B projects.
* Makefile: produces bitcode for B projects. The produced bitcode may then be 
  manually animated with lli-mp-3.1

Currently, the verification and validation infrastructure is functional for the 
following B projects: counter, wd and timer.

--
David Deharbe, January 2014.

About


Languages

Language:TeX 39.0%Language:HTML 19.1%Language:Assembly 18.2%Language:Python 10.2%Language:LLVM 8.9%Language:C 3.5%Language:Shell 0.9%Language:Makefile 0.2%Language:C++ 0.1%Language:Objective-C 0.1%