[antlr-interest] Generate EMF

Yassin.Chkouri at imag.fr Yassin.Chkouri at imag.fr
Wed Apr 26 03:03:46 PDT 2006


Hi,
This is my program in ANTLR and i want te generate my EMF model. 

I have already create a model EMF for that I use the FACTORY to called the
components.

when I compile my grammar I don't find errors but  it genère nothing, it is
necessary that I add a function in Main or ..??? 

Grammar in ANTLR
*************************************************************************
header 
{
package ujf.verimag.bip.parser;
	

}

{	
import ujf.verimag.bip.component.*;
import ujf.verimag.bip.behavior.*;
import ujf.verimag.bipmodel.bip.*;
	
import ujf.verimag.bip.connector.*;
import ujf.verimag.bip.component.ComponentFactory;

import org.eclipse.emf.common.util.EList;
import java.util.Vector;
import java.util.Iterator;
import java.util.Set;
import java.util.HashSet;
import org.eclipse.emf.ecore.util.EcoreUtil;
import org.eclipse.emf.ecore.resource.Resource;
import org.eclipse.core.resources.IResource; 

import antlr.TokenStreamRecognitionException;
	
}
 
 class BipTree extends TreeParser;

options {
    buildAST=true;
	
	defaultErrorHandler=false;
}
{
protected BipFactory BipF = BipFactory.eINSTANCE;
protected ComponentFactory ComponentF = ComponentFactory.eINSTANCE;
protected BehaviorFactory BehaviorF = BehaviorFactory.eINSTANCE;


}
model returns [Model bipModel = BipF.createModel()]
    {
    	Component compDef;
    }
	:	(compDef[bipModel])+
	;
    


compDef [Model bipModel]
    :  #(COMPONENT   id:IDENTIFIER body  END)
	{
		Component cf = ComponentF.createComponent();
		cf.setName(id.getText());
		bipModel.getCompList().add(cf);
	}
	
	
	
    ;
    
body :  IDENTIFIER;


class BipParser extends Parser;
options {
    buildAST=true;
	k=4;
	codeGenBitsetTestThreshold=999;
	defaultErrorHandler=false;
}

model  
:	
	(fileItem )+
	EOF
	
;

fileItem 
    :  compDef
      | globalDef
       
;


compDef : 	COMPONENT^ 	IDENTIFIER 	 body  END  
;
		
globalDef : IDENTIFIER;

body :  IDENTIFIER ; //behavior;


class BipLexer extends Lexer;
tokens 
{
COMPONENT="component";
END="end";
BEHAVIOR="behavior";
STATE="state";
WITH="with";
BIPSPEC;
}

WS	:	(' '
	|	'\t'
	|	'\n'
	|	'\r')
		{ _ttype = Token.SKIP; }
	;

LPAREN:	'('
	;

RPAREN:	')'
	;

STAR:	'*'
	;

PLUS:	'+'
	;

SEMI:	';'
	;

INT	:	('0'..'9')+
	;
	
IDENTIFIER
  options {testLiterals=true;}
  : ('a'..'z'|'A'..'Z') ('a'..'z'|'A'..'Z'|'0'..'9'|'_')*
; 



Quoting Marc Pantel <Marc.Pantel at enseeiht.fr>:

> Hi,
> 
> 2 answers were given on the TOPCASED mailing-list (before the question
> was issued a second time), they were not forwarded to the antlr mailing
> list as it is not really ANTLR related. I will summarise for the ANTLR
> community :
> 
> EMF = Eclipse Modelling Framework, an MDE toolkit in Eclipse. EMF takes
> as input a meta-model expressed either in the ECORE meta-modelling
> language, in the UML2 class diagram (ECORE is a subset of UML2 class
> diagram), in JMI (Java Metadata Interface) with specific tags or in SXD
> (XML Schema) and produces Java classes (in an 3 separate Eclipse plugin)
> for : 
> 
> - Model creation, XMI and XML reader and writer, model visitor and
> listener,
> - Hierarchical (à la XML) model editor.
> 
> It allows to manipulate models (that is abstract syntax graph).
> 
> If you want to add a concrete syntax, you must use additional tools to
> manage the relation between the concrete and abstract syntaxes :
> 
> - graphical syntax : GMF, TOPCASED, TIGER, ... which allows to
> description the graphical syntax and its relation to the abstract syntax
> and generates a graphical editor for the EMF generated Java classes ;
> 
> - textual syntax : currently some tools are being written in the AMMA
> platform, the KERMETA project and the TOPCASED project but currently, to
> my knowledge, nothing is available for external use. Therefore, you need
> to write your own concrete grammar and attributed semantics in order to
> parse a concrete textual model and produce an abstract model using the
> EMF generated classes in the ANTLR attributed grammar.
> 
> I hope my comments are precise enough. Ask for more if needed.
> 
> Marc Pantel,
> TOPCASED project
> 
>   Le lundi 24 avril 2006 à 14:13 +0200, Martin Probst a écrit :
> > Hi,
> > 
> > I notice that this is the second time you ask your question and no  
> > one answered the first time. This might be because no one understands  
> > what you're asking about. Maybe you could give a hint what a EMF is  
> > and in what way it might correspond to a parsed piece of code?
> > 
> > ANTLR does not include any support for anything called "EMF" as far  
> > as I know, so it's definitely not supported out of the box. It might  
> > be easy to hack in yourself, though.
> > 
> > Martin
> > 
> > Am 24.04.2006 um 11:20 schrieb Yassin.Chkouri at imag.fr:
> > 
> > >
> > >
> > >
> > > Hi,
> > >  I am using ANTLR for parsing a language and build
> > >  the corresponding EMF. Is it possible to directly generate
> > >  the EMF from the semantic actions in ANTLR or is it necessary
> > >  to use the intermediate AST generated by ANTLR ?
> > >
> > >  Thanks,
> > >
> > >
> > > -------------------------------------------------
> > > envoyé via Webmail/IMAG !
> > >
> > >
> > 
> > 
> > _______________________________________________
> > Topcased-mm-users mailing list
> > Topcased-mm-users at lists.gforge.enseeiht.fr
> > http://lists.gforge.enseeiht.fr/mailman/listinfo/topcased-mm-users
> 
> 
> 
> 




-------------------------------------------------
envoyé via Webmail/IMAG !



More information about the antlr-interest mailing list