This is Python parser that can parse C and hopefully C99.
This is to make PLASMA code friendlier for the eyes for indexing
and add dynamic scheduler support.
In  a way it would be an alternative to SMPSS notation at some point.
More notes and thoughts on the topic are in notes_bfr.txt.

This commit is incomplete: it requires PLY 2.5 or PLY 3.2 package.
I don't know what is our policy on that. For now you can download
PLY, unpacking and then do:

env PYTHONPATH=/path/to/ply-3.2 python cparse.py tilelu.c

=========
For parsing Petit/Omega files:

env PYTHONPATH=/path/to/ply-3.2 python petitparse.py knm.omega

=========

Parameter designation:
* IN, INOUT, SCRATCH, VALUE
* 2D issues: rectangular matrices, leading dimension
* Triangular upper/lower, diagonal
* banded
* more from BLAS and LAPACK

Function decorations:
* pragmas
* fake function declaration beefore:
static BFR_FUNC foo(IN a, OUT b);
int foo(double *a, double *b) { }
* fake function call inside:
int foo(double *a, double *b) {
  BFR_declare( IN, a, OUT b );
}

Language parsing:
* Complex numbers
* long long int
* mixing of declarations and code

Indexing:
* A[i, j] comma operator is already used in C/C++ so A[i, j] <=> A[j]
* A[i ; j] this introduces new syntax
* A(i, j) feels more like Fortran so maybe the user will expect indices starting with 1 not 0
* A(i, j, k, l) to select a tile and an item within a tile
* A({i, j}) almost legal C99: A((struct {int i, j;}){I, J})
* A({i, j, k, l}) almost legal C99: A((struct ijkl){I, J})

_Thread_local storage class in C and thread_local in C++
