Some people suggested trying moose for analysis of SAS programs, and
trying to figure out where to start with the meta-modeling.
Welcome to Moose :).
SAS is not object oriented, though parts of it could be imagined to
The main SAS code contains blocks of statements that begin with DATA
PROC; each block could probably be thought of as a function--to be
precise, the application of a function.
If I want to make some new models, where do I start? FM3? FAMIX?
elsewhere? The 4.0 release announcement says FM3 and FAMIX3 are both
implemented in Fame, so maybe start with Fame? I've read some
documentation, but I can't tell.
FAMIX is a meta-model, FM3 is the meta-meta-model. If a clarification
of terms is needed, you can check:
The core of FAMIX models in a language independent fashion object-
oriented and procedural languages. You can see a diagrammatic overview
I do not know SAS, but you should check to see if the concepts present
in FAMIX are of use to you. If yes, you can directly instantiate them
from your parser. If not, then you will want to code a new meta-model,
or extend the current ones to accommodate your needs. You can then
describe this new meta-model using FM3 (this is achieved via Smalltalk
pragmas) and you get a browser and import-export in the MSE format for
Once you have your Smalltalk objects as instances of the meta-model,
you can then use Mondrian and Glamour for building visual tools, or
the MooseAlgos to express graph-specific algorithms.
Does this help?
My inspiration for the project is understanding how some SAS
were produced. I have a system that creates numerous datasets, which
feed into later datasets, etc. This is split at least across a couple
of program files and it's really too complicated to keep in the brain.
If I get ambitious it would also be useful to trace where particular
variables came from, in the sense of both datasets and individual
The only thing resembling a SAS parser I've run into (except for SAS,
which is closed source) is a Perl module, and it looked relatively
primitive. I've been using PetitParser, and at the point I started
thinking about what it would parse results into.
Thanks for any pointers.
Moose-dev mailing list
"Relationships are of two kinds: those we choose and those that
happen. They both matter."