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';