GelloPackage::= PackageStatement
PackageStatement::=
<PACKAGE> NameOrLiteral ImportsStatement? PackageElement* <ENDPACKAGE>
ImportsStatement::=
<IMPORTS> ImportName ("," ImportName)*
ImportName::= NameOrLiteral
PackageElement::= PackageStatement | ClassDefinition
ClassDefinition::=
<CLASS> ClassDefName (<EXTENDS> ClassRef)? ClassMember* |
<CLASS> ClassDefName <EQUAL> ClassRef |
<CLASS> ClassName EnumerationType
ClassDefName::=
NameOrLiteral |
NameOrLiteral "(" ClassRefList ")" |
NameOrLiteral "<" NameList ">"
ClassRefList::= ClassRef ("," ClassRef)*
NameList::= Name ( Name "," )*
ClassRef::=
ClassName |
ClassName "(" ClassRef ")" |
<TUPLE>
ClassMember::= NameOrLiteral ( "(" ClassFormalParams? ")" )? ":" ClassRef
ClassFormalParams::= ClassFormalParam ("," ClassFormalParam )*
ClassFormalParam::= Name ":" ClassRef
EnumerationType::= <ENUM> "(" (EnumLiteral ( "," EnumLiteral )*) ")"
EnumLiteral::= NameOrLiteral
NameOrLiteral::= Name | <STRING_LITERAL>
ClassName::= NameWithPath | <STRING_LITERAL>
NameWithPath::= Name ("::" Name)*
Name::= <ID> ("." <ID>)*
<STRING_LITERAL: ('\"' (~[ '\"' , "\n", "\r"])* '\"' | "\'" (~[ "\'" , "\n", "\r"])* "\'" ) >
<ID: ["a"-"z","A"-"Z"] (["a"-"z","A"-"Z","0"-"9"] | "_"(["a"-"z","A"-"Z","0"-"9"])+)* >
<ENUM: "Enum">
<TUPLE: "Tuple" >
<EQUAL: "=" >
<ENDPACKAGE: "endPackage" | "EndPackage" | "endpackage">
<CLASS: "class"| "Class">
<EXTENDS: "extends" >
<IMPORTS: "Imports" | "imports">
<PACKAGE: "Package" | "package">