Hi all,

I don't know if someone already did this but I was working with SmaCC from scratch
so I did a very simple parser for MSE files. It parses all right with a Java model
although I need to check and specialize the grammar for what I intend to do.

Cheers,

----

%start Model ;
%left <close>;
%glr;

<whitespace> : \s+ ;
<eol> : \r | \n | \r\n ;
<letter> : [a-zA-Z_] ;
<digit> : [0-9] ;
<integer> : \-? <digit>+ ;
<number> : \-? <digit>+ ( \. <digit>+ ) ? ( [eE] ( \- | \+ ) ? <digit>+ ) ? ;
<string> : \'  [^\']* \' (\' [^\']* \')* ;
<boolean> : true | false ;
<open> : \( ;
<close> : \) ;
<simpleName> : <letter> ( <letter> | <digit> ) * ;
<qualifiedName> : <letter> ( <letter> | <digit> ) * ( \. <letter> ( <letter> | <digit> ) * ) * ;

Model : <open> ElementNodes <close> ;
ElementNodes : ElementNode | ElementNode ElementNodes ;

ElementNode : <open> Name Identifier AttributeNodes <close> ;
Identifier : <open> IdentifierToken Integer <close> ;
IdentifierToken : "id:" 'refToken';

AttributeNodes :  | AttributeNode AttributeNodes ;
AttributeNode : <open> SimpleName ValueNodes <close> ;

ValueNodes : ValueNode | ValueNode ValueNodes ;
ValueNode : Primitive | Reference ;
Primitive : String | Integer | Number | Boolean ;

Reference : IntegerReference | NameReference ;
IntegerReference : <open> ReferenceToken Integer <close>;
NameReference : <open> ReferenceToken QualifiedName <close>;
ReferenceToken : "ref:" 'refToken';

Integer : <integer> 'integer';
Number : <number> 'number' ;
String: <string> 'string';
Boolean: <boolean> 'boolean';
Name : SimpleName | QualifiedName ;
SimpleName : <simpleName> 'simpleName';
QualifiedName : <qualifiedName> 'qualifiedName';

--