With nicolas we started to have a look at the eclipse-php-parser (provide
with PDT), to export a famix-mse file from a PHP project. We already started
to build an eclipse plugin that does some work:
=> We create an AST for each php file of the project
=> Then we have a visitor on this ast, and we are therfore able to make a
specific action for each kind of node visited
=> For now, we just export some FAMIXNamespace, FAMIXClass, FAMIXMethods.
So what's left is to implement each visit-method to extract informations
for each node visited. For that we will have to know a bit more PHP :) Maybe
the metamodel will have to be extended to take into account some
PHP-specific elements, I don't know.
If you want to have a look, sources are available via svn at:
Vervaine provide the extractor (not yet finished) for Java ans this one for
PHP. Both are using a common mechanism to generate famix entities and
extract them to mse.
I will be on holidays until august and will probably no longer work on it
until august. So if you want to have a look (and have the courage to install
eclipse to read java code:)), have some suggestions, want to implement
something, feel free to participate :)
Some people suggested trying moose for analysis of SAS programs, and I'm
trying to figure out where to start with the meta-modeling.
SAS is not object oriented, though parts of it could be imagined to be.
The main SAS code contains blocks of statements that begin with DATA or
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.
My inspiration for the project is understanding how some SAS datasets
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.
i did implement an SQL parser using Petit Parser. I toke the grammar specification from SQLite http://www.sqlite.org/lang.html . The grammar implemented is not complete, for now i did implement "just" the create table statement, it means that you should be able to parse at least a script for create the database.
The code is in squeaksource http://www.squeaksource.com/@09zbthA-fDDfyUNQ/_OIex3aA .
To download it you can evaluate this:
(Smalltalk at: #ConfigurationOfPetitSQLParser) perform: #loadDefault
in the repository there are several packages: the core contains the parser for the grammar.
In the package parser there is a parser that instantiate some draft objects representing relational elements.
In the next future i will start to implement also other statements.
If you start to use it and you have some problem please let me know.
I moved all code from Moose-MondrianScripts to Moose-
MondrianPaintings, and I removed the Moose-MondrianScripts from the
I would like to work slowly on package restructuring. In the
following, I would like to rename the test packages:
Moose-LAN -> Moose-TestResources-LAN
Famix-LANTests -> Moose-Tests-SmalltalkImporter-LAN
MooseKGB-TestFamix3 -> Moose-Tests-KGB
Moose-KGB-* -> Moose-TestResources-KGB-*
Moose-SmalltalkImporterTests -> Moose-Tests-SmalltalkImporter
Moose-Test-PackageOne -> Moose-TestResources-Reference-PackageOne
Moose-Test-PackageTwo -> Moose-TestResources-Reference-PackageTwo
"There are no old things, there are only old ways of looking at them."
How to reproduce the problem: step by step if necessary
- select a class in a MoosePanel
- right click -> visualize class blueprint
There is no + and - buttons
Additional information: platform, context which may impact the problem
Last Moose Hudson image
Alexandre Bergel http://www.bergel.eu
i just notice that the UML Class shape is broken, going back in the history seems that the problem has been introduced from the relative coordinates.
This screen shot is from the commit Mondrian-tg.540
This from the commit Mondrian-Alexandre_Bergel.540
Than staring from the commit Mondrian-AlexandreBergel.545 the class name disappear i think covered by the rectangle containing the methods name that is bigger than before.
The problem is in the method MOShapeSelector>>umlClass that has not been updated considering the last changes or in the changes themselves?
Hi. I am using Distribution Maps where I analyze an snapshot, a particular
moment of my image state. I would like to be able to compare it with another
For example, I analyze packages and see which classes have instances for
evaluating something. Something like this:
^ (self onContainers: (self listOfCorePackagesNames
collect: [ :each | (PackageInfo named: each) ]) elements: #classes
properties: [:element | element hasUsedInstances ] )
Then, I do something different (suppose I start a seaside app) and I would
like to see the difference between both distribution maps. To easily compare
and know which "new" classes where used by running seaside that were not
used in the first scenario.
Maybe just a simple solution is to take both DM and to make a 3th with
them: check each element...if in both it is the same...them I paint with a
particular color. If they are different, each one keeps its original color.
What do you think? is it doable? is there someting done about this?
I fixed a bug uncovered by Doru. Not easy to get this formsshape properly working.
If you fix any bugs, let me know.
Does anyone needs to nest a formsshape into another formsshape ? The following script does not work.
| builder1 builder2 |
builder1 := MOFormsBuilder new.
builder1 row; fill; pref; grow; row; pref.
builder1 column; pref.
builder1 x: 1 y: 1 add: (MORectangleShape new text: [:each | each printString]).
builder1 x: 1 y: 2 add: (MOChildrenShape new).
builder2 := MOFormsBuilder new.
builder2 row; fill; pref; grow; row; pref; row; pref.
builder2 column; pref.
builder2 x: 1 y: 1 add: (MORectangleShape new text: [:each | each printString]).
builder2 x: 1 y: 2 add: (MOChildrenShape new).
builder2 x: 1 y: 3 add: (builder1 asShape).
view shape: builder2 asShape.
view nodes: #(10 20 30 ) forEach: [:each | view nodes: (1 to: each )]
But I first want to concentrate on the situation we need now.
Alexandre Bergel http://www.bergel.eu