• DoctypeDeclaration{http://etl.sf.net/etl/doctype/0.2.1}:
    • publicId: "-//IDN etl.sf.net//ETL//Grammar 0.2.1"
  • Grammar{http://etl.sf.net/etl/grammar/0.2.1}:
    • documentation:
      • DocumentationLine{http://etl.sf.net/etl/grammar/0.2.1}:
        • text: /// This is a grammar for ecore language. This language
      • DocumentationLine{http://etl.sf.net/etl/grammar/0.2.1}:
        • text: /// is used to create Ecore models in the textual notation.
      • DocumentationLine{http://etl.sf.net/etl/grammar/0.2.1}:
        • text: /// This quite simplified grammar. It basically supports
      • DocumentationLine{http://etl.sf.net/etl/grammar/0.2.1}:
        • text: /// Library sample and little more. Object references
      • DocumentationLine{http://etl.sf.net/etl/grammar/0.2.1}:
        • text: /// and contained objects in annotations are not supported here.
      • DocumentationLine{http://etl.sf.net/etl/grammar/0.2.1}:
        • text: ///
    • name:
      • net
      • sf
      • etl
      • samples
      • ecore
      • Ecore
    • content:
      • Namespace{http://etl.sf.net/etl/grammar/0.2.1}:
        • defaultModifier:
          • Modifier{http://etl.sf.net/etl/grammar/0.2.1}:
            • value: default
        • prefix: e
        • uri: "http://etl.sf.net/2006/samples/ecore/0.1"
      • Context{http://etl.sf.net/etl/grammar/0.2.1}:
        • documentation:
          • DocumentationLine{http://etl.sf.net/etl/grammar/0.2.1}:
            • text: /// This is a base context that contains common definitions
          • DocumentationLine{http://etl.sf.net/etl/grammar/0.2.1}:
            • text: /// that are used by other contexts.
        • abstractModifier:
          • Modifier{http://etl.sf.net/etl/grammar/0.2.1}:
            • value: abstract
        • name: Base
        • content:
          • Def{http://etl.sf.net/etl/grammar/0.2.1}:
            • name: IdentifierDef
            • syntax:
              • ExpressionStatement{http://etl.sf.net/etl/grammar/0.2.1}:
                • syntax:
                  • ObjectOp{http://etl.sf.net/etl/grammar/0.2.1}:
                    • name:
                      • ObjectName{http://etl.sf.net/etl/grammar/0.2.1}:
                        • prefix: e
                        • name: Identifier
                    • syntax:
                      • Sequence{http://etl.sf.net/etl/grammar/0.2.1}:
                        • syntax:
                          • ExpressionStatement{http://etl.sf.net/etl/grammar/0.2.1}:
                            • syntax:
                              • ChoiceOp{http://etl.sf.net/etl/grammar/0.2.1}:
                                • options:
                                  • Sequence{http://etl.sf.net/etl/grammar/0.2.1}:
                                    • syntax:
                                      • Let{http://etl.sf.net/etl/grammar/0.2.1}:
                                        • name: name
                                        • operator: =
                                        • expression:
                                          • IdentifierOp{http://etl.sf.net/etl/grammar/0.2.1}:
                                  • options:
                                    • Sequence{http://etl.sf.net/etl/grammar/0.2.1}:
                                      • syntax:
                                        • Let{http://etl.sf.net/etl/grammar/0.2.1}:
                                          • name: quotedName
                                          • operator: =
                                          • expression:
                                            • StringOp{http://etl.sf.net/etl/grammar/0.2.1}:
                                              • prefix:
                                                • q
                                                • Q
                                              • quote: "'"
        • Context{http://etl.sf.net/etl/grammar/0.2.1}:
          • documentation:
            • DocumentationLine{http://etl.sf.net/etl/grammar/0.2.1}:
              • text: /// This is a base context for statements that contains common
            • DocumentationLine{http://etl.sf.net/etl/grammar/0.2.1}:
              • text: /// definitions for statements and declaration of attributes
            • DocumentationLine{http://etl.sf.net/etl/grammar/0.2.1}:
              • text: /// and docs.
          • abstractModifier:
            • Modifier{http://etl.sf.net/etl/grammar/0.2.1}:
              • value: abstract
          • name: BaseStatements
          • content:
            • ContextInclude{http://etl.sf.net/etl/grammar/0.2.1}:
              • contextName: Base
            • Attributes{http://etl.sf.net/etl/grammar/0.2.1}:
              • name: Annotation
              • syntax:
                • Let{http://etl.sf.net/etl/grammar/0.2.1}:
                  • name: annotations
                  • operator: =
                  • expression:
                    • OneOrMoreOp{http://etl.sf.net/etl/grammar/0.2.1}:
                      • syntax:
                        • Sequence{http://etl.sf.net/etl/grammar/0.2.1}:
                          • syntax:
                            • KeywordStatement{http://etl.sf.net/etl/grammar/0.2.1}:
                              • text: @
                            • KeywordStatement{http://etl.sf.net/etl/grammar/0.2.1}:
                              • text: [
                            • ExpressionStatement{http://etl.sf.net/etl/grammar/0.2.1}:
                              • syntax:
                                • ListOp{http://etl.sf.net/etl/grammar/0.2.1}:
                                  • separator: ,
                                  • syntax:
                                    • Sequence{http://etl.sf.net/etl/grammar/0.2.1}:
                                      • syntax:
                                        • ExpressionStatement{http://etl.sf.net/etl/grammar/0.2.1}:
                                          • syntax:
                                            • ObjectOp{http://etl.sf.net/etl/grammar/0.2.1}:
                                              • name:
                                                • ObjectName{http://etl.sf.net/etl/grammar/0.2.1}:
                                                  • prefix: e
                                                  • name: Annotation
                                              • syntax:
                                                • Sequence{http://etl.sf.net/etl/grammar/0.2.1}:
                                                  • syntax:
                                                    • Let{http://etl.sf.net/etl/grammar/0.2.1}:
                                                      • name: source
                                                      • operator: =
                                                      • expression:
                                                        • ChoiceOp{http://etl.sf.net/etl/grammar/0.2.1}:
                                                          • options:
                                                            • IdentifierOp{http://etl.sf.net/etl/grammar/0.2.1}:
                                                            • options:
                                                              • StringOp{http://etl.sf.net/etl/grammar/0.2.1}:
                                                                • quote: "\""
                                                      • Let{http://etl.sf.net/etl/grammar/0.2.1}:
                                                        • name: details
                                                        • operator: +=
                                                        • expression:
                                                          • Sequence{http://etl.sf.net/etl/grammar/0.2.1}:
                                                            • syntax:
                                                              • KeywordStatement{http://etl.sf.net/etl/grammar/0.2.1}:
                                                                • text: (
                                                              • ExpressionStatement{http://etl.sf.net/etl/grammar/0.2.1}:
                                                                • syntax:
                                                                  • OptionalOp{http://etl.sf.net/etl/grammar/0.2.1}:
                                                                    • syntax:
                                                                      • ListOp{http://etl.sf.net/etl/grammar/0.2.1}:
                                                                        • separator: ,
                                                                        • syntax:
                                                                          • Sequence{http://etl.sf.net/etl/grammar/0.2.1}:
                                                                            • syntax:
                                                                              • ExpressionStatement{http://etl.sf.net/etl/grammar/0.2.1}:
                                                                                • syntax:
                                                                                  • ObjectOp{http://etl.sf.net/etl/grammar/0.2.1}:
                                                                                    • name:
                                                                                      • ObjectName{http://etl.sf.net/etl/grammar/0.2.1}:
                                                                                        • prefix: e
                                                                                        • name: AnnotationDetail
                                                                                    • syntax:
                                                                                      • Sequence{http://etl.sf.net/etl/grammar/0.2.1}:
                                                                                        • syntax:
                                                                                          • Let{http://etl.sf.net/etl/grammar/0.2.1}:
                                                                                            • name: key
                                                                                            • operator: =
                                                                                            • expression:
                                                                                              • ChoiceOp{http://etl.sf.net/etl/grammar/0.2.1}:
                                                                                                • options:
                                                                                                  • IdentifierOp{http://etl.sf.net/etl/grammar/0.2.1}:
                                                                                                  • options:
                                                                                                    • StringOp{http://etl.sf.net/etl/grammar/0.2.1}:
                                                                                                      • quote: "\""
                                                                                            • ExpressionStatement{http://etl.sf.net/etl/grammar/0.2.1}:
                                                                                              • syntax:
                                                                                                • Sequence{http://etl.sf.net/etl/grammar/0.2.1}:
                                                                                                  • syntax:
                                                                                                    • KeywordStatement{http://etl.sf.net/etl/grammar/0.2.1}:
                                                                                                      • text: =
                                                                                            • Let{http://etl.sf.net/etl/grammar/0.2.1}:
                                                                                              • name: value
                                                                                              • operator: =
                                                                                              • expression:
                                                                                                • StringOp{http://etl.sf.net/etl/grammar/0.2.1}:
                                                                                                  • quote: "\""
                                                                • KeywordStatement{http://etl.sf.net/etl/grammar/0.2.1}:
                                                                  • text: )
                                • KeywordStatement{http://etl.sf.net/etl/grammar/0.2.1}:
                                  • text: ]
                • DocumentationSyntax{http://etl.sf.net/etl/grammar/0.2.1}:
                  • name: Documentation
                  • syntax:
                    • Let{http://etl.sf.net/etl/grammar/0.2.1}:
                      • name: documentation
                      • operator: +=
                      • expression:
                        • DoclinesOp{http://etl.sf.net/etl/grammar/0.2.1}:
                          • wrapper:
                            • Wrapper{http://etl.sf.net/etl/grammar/0.2.1}:
                              • object:
                                • ObjectName{http://etl.sf.net/etl/grammar/0.2.1}:
                                  • prefix: e
                                  • name: DocumentationLine
                              • property: text
            • Context{http://etl.sf.net/etl/grammar/0.2.1}:
              • name: QualifiedNames
              • content:
                • ContextInclude{http://etl.sf.net/etl/grammar/0.2.1}:
                  • contextName: Base
                • OperatorDefinition{http://etl.sf.net/etl/grammar/0.2.1}:
                  • documentation:
                    • DocumentationLine{http://etl.sf.net/etl/grammar/0.2.1}:
                      • text: /// Identifier operator
                  • isComposite:
                    • Modifier{http://etl.sf.net/etl/grammar/0.2.1}:
                      • value: composite
                  • name: Identifier
                  • associativity: f
                  • syntax:
                    • ExpressionStatement{http://etl.sf.net/etl/grammar/0.2.1}:
                      • syntax:
                        • RefOp{http://etl.sf.net/etl/grammar/0.2.1}:
                          • name: IdentifierDef
                • OperatorDefinition{http://etl.sf.net/etl/grammar/0.2.1}:
                  • name: NamespaceAccessOp
                  • associativity: yfx
                  • precedence: 100
                  • text: ::
                  • syntax:
                    • Let{http://etl.sf.net/etl/grammar/0.2.1}:
                      • name: namespace
                      • operator: =
                      • expression:
                        • OperandOp{http://etl.sf.net/etl/grammar/0.2.1}:
                          • position: left
                    • Let{http://etl.sf.net/etl/grammar/0.2.1}:
                      • name: object
                      • operator: =
                      • expression:
                        • OperandOp{http://etl.sf.net/etl/grammar/0.2.1}:
                          • position: right
            • Context{http://etl.sf.net/etl/grammar/0.2.1}:
              • name: TypeExpressions
              • content:
                • ContextInclude{http://etl.sf.net/etl/grammar/0.2.1}:
                  • contextName: QualifiedNames
                • OperatorDefinition{http://etl.sf.net/etl/grammar/0.2.1}:
                  • isComposite:
                    • Modifier{http://etl.sf.net/etl/grammar/0.2.1}:
                      • value: composite
                  • name: BooleanType
                  • associativity: f
                  • syntax:
                    • ExpressionStatement{http://etl.sf.net/etl/grammar/0.2.1}:
                      • syntax:
                        • ObjectOp{http://etl.sf.net/etl/grammar/0.2.1}:
                          • name:
                            • ObjectName{http://etl.sf.net/etl/grammar/0.2.1}:
                              • prefix: e
                              • name: PrimitiveType
                          • syntax:
                            • Sequence{http://etl.sf.net/etl/grammar/0.2.1}:
                              • syntax:
                                • Let{http://etl.sf.net/etl/grammar/0.2.1}:
                                  • name: name
                                  • operator: =
                                  • expression:
                                    • TokenOp{http://etl.sf.net/etl/grammar/0.2.1}:
                                      • value: boolean
                • OperatorDefinition{http://etl.sf.net/etl/grammar/0.2.1}:
                  • isComposite:
                    • Modifier{http://etl.sf.net/etl/grammar/0.2.1}:
                      • value: composite
                  • name: ByteType
                  • associativity: f
                  • syntax:
                    • ExpressionStatement{http://etl.sf.net/etl/grammar/0.2.1}:
                      • syntax:
                        • ObjectOp{http://etl.sf.net/etl/grammar/0.2.1}:
                          • name:
                            • ObjectName{http://etl.sf.net/etl/grammar/0.2.1}:
                              • prefix: e
                              • name: PrimitiveType
                          • syntax:
                            • Sequence{http://etl.sf.net/etl/grammar/0.2.1}:
                              • syntax:
                                • Let{http://etl.sf.net/etl/grammar/0.2.1}:
                                  • name: name
                                  • operator: =
                                  • expression:
                                    • TokenOp{http://etl.sf.net/etl/grammar/0.2.1}:
                                      • value: byte
                • OperatorDefinition{http://etl.sf.net/etl/grammar/0.2.1}:
                  • isComposite:
                    • Modifier{http://etl.sf.net/etl/grammar/0.2.1}:
                      • value: composite
                  • name: ShortType
                  • associativity: f
                  • syntax:
                    • ExpressionStatement{http://etl.sf.net/etl/grammar/0.2.1}:
                      • syntax:
                        • ObjectOp{http://etl.sf.net/etl/grammar/0.2.1}:
                          • name:
                            • ObjectName{http://etl.sf.net/etl/grammar/0.2.1}:
                              • prefix: e
                              • name: PrimitiveType
                          • syntax:
                            • Sequence{http://etl.sf.net/etl/grammar/0.2.1}:
                              • syntax:
                                • Let{http://etl.sf.net/etl/grammar/0.2.1}:
                                  • name: name
                                  • operator: =
                                  • expression:
                                    • TokenOp{http://etl.sf.net/etl/grammar/0.2.1}:
                                      • value: short
                • OperatorDefinition{http://etl.sf.net/etl/grammar/0.2.1}:
                  • isComposite:
                    • Modifier{http://etl.sf.net/etl/grammar/0.2.1}:
                      • value: composite
                  • name: IntType
                  • associativity: f
                  • syntax:
                    • ExpressionStatement{http://etl.sf.net/etl/grammar/0.2.1}:
                      • syntax:
                        • ObjectOp{http://etl.sf.net/etl/grammar/0.2.1}:
                          • name:
                            • ObjectName{http://etl.sf.net/etl/grammar/0.2.1}:
                              • prefix: e
                              • name: PrimitiveType
                          • syntax:
                            • Sequence{http://etl.sf.net/etl/grammar/0.2.1}:
                              • syntax:
                                • Let{http://etl.sf.net/etl/grammar/0.2.1}:
                                  • name: name
                                  • operator: =
                                  • expression:
                                    • TokenOp{http://etl.sf.net/etl/grammar/0.2.1}:
                                      • value: int
                • OperatorDefinition{http://etl.sf.net/etl/grammar/0.2.1}:
                  • isComposite:
                    • Modifier{http://etl.sf.net/etl/grammar/0.2.1}:
                      • value: composite
                  • name: LongType
                  • associativity: f
                  • syntax:
                    • ExpressionStatement{http://etl.sf.net/etl/grammar/0.2.1}:
                      • syntax:
                        • ObjectOp{http://etl.sf.net/etl/grammar/0.2.1}:
                          • name:
                            • ObjectName{http://etl.sf.net/etl/grammar/0.2.1}:
                              • prefix: e
                              • name: PrimitiveType
                          • syntax:
                            • Sequence{http://etl.sf.net/etl/grammar/0.2.1}:
                              • syntax:
                                • Let{http://etl.sf.net/etl/grammar/0.2.1}:
                                  • name: name
                                  • operator: =
                                  • expression:
                                    • TokenOp{http://etl.sf.net/etl/grammar/0.2.1}:
                                      • value: long
                • OperatorDefinition{http://etl.sf.net/etl/grammar/0.2.1}:
                  • isComposite:
                    • Modifier{http://etl.sf.net/etl/grammar/0.2.1}:
                      • value: composite
                  • name: CharType
                  • associativity: f
                  • syntax:
                    • ExpressionStatement{http://etl.sf.net/etl/grammar/0.2.1}:
                      • syntax:
                        • ObjectOp{http://etl.sf.net/etl/grammar/0.2.1}:
                          • name:
                            • ObjectName{http://etl.sf.net/etl/grammar/0.2.1}:
                              • prefix: e
                              • name: PrimitiveType
                          • syntax:
                            • Sequence{http://etl.sf.net/etl/grammar/0.2.1}:
                              • syntax:
                                • Let{http://etl.sf.net/etl/grammar/0.2.1}:
                                  • name: name
                                  • operator: =
                                  • expression:
                                    • TokenOp{http://etl.sf.net/etl/grammar/0.2.1}:
                                      • value: char
                • OperatorDefinition{http://etl.sf.net/etl/grammar/0.2.1}:
                  • isComposite:
                    • Modifier{http://etl.sf.net/etl/grammar/0.2.1}:
                      • value: composite
                  • name: FloatType
                  • associativity: f
                  • syntax:
                    • ExpressionStatement{http://etl.sf.net/etl/grammar/0.2.1}:
                      • syntax:
                        • ObjectOp{http://etl.sf.net/etl/grammar/0.2.1}:
                          • name:
                            • ObjectName{http://etl.sf.net/etl/grammar/0.2.1}:
                              • prefix: e
                              • name: PrimitiveType
                          • syntax:
                            • Sequence{http://etl.sf.net/etl/grammar/0.2.1}:
                              • syntax:
                                • Let{http://etl.sf.net/etl/grammar/0.2.1}:
                                  • name: name
                                  • operator: =
                                  • expression:
                                    • TokenOp{http://etl.sf.net/etl/grammar/0.2.1}:
                                      • value: float
                • OperatorDefinition{http://etl.sf.net/etl/grammar/0.2.1}:
                  • isComposite:
                    • Modifier{http://etl.sf.net/etl/grammar/0.2.1}:
                      • value: composite
                  • name: DoubleType
                  • associativity: f
                  • syntax:
                    • ExpressionStatement{http://etl.sf.net/etl/grammar/0.2.1}:
                      • syntax:
                        • ObjectOp{http://etl.sf.net/etl/grammar/0.2.1}:
                          • name:
                            • ObjectName{http://etl.sf.net/etl/grammar/0.2.1}:
                              • prefix: e
                              • name: PrimitiveType
                          • syntax:
                            • Sequence{http://etl.sf.net/etl/grammar/0.2.1}:
                              • syntax:
                                • Let{http://etl.sf.net/etl/grammar/0.2.1}:
                                  • name: name
                                  • operator: =
                                  • expression:
                                    • TokenOp{http://etl.sf.net/etl/grammar/0.2.1}:
                                      • value: double
                • OperatorDefinition{http://etl.sf.net/etl/grammar/0.2.1}:
                  • isComposite:
                    • Modifier{http://etl.sf.net/etl/grammar/0.2.1}:
                      • value: composite
                  • name: StringType
                  • associativity: f
                  • syntax:
                    • ExpressionStatement{http://etl.sf.net/etl/grammar/0.2.1}:
                      • syntax:
                        • ObjectOp{http://etl.sf.net/etl/grammar/0.2.1}:
                          • name:
                            • ObjectName{http://etl.sf.net/etl/grammar/0.2.1}:
                              • prefix: e
                              • name: PrimitiveType
                          • syntax:
                            • Sequence{http://etl.sf.net/etl/grammar/0.2.1}:
                              • syntax:
                                • Let{http://etl.sf.net/etl/grammar/0.2.1}:
                                  • name: name
                                  • operator: =
                                  • expression:
                                    • TokenOp{http://etl.sf.net/etl/grammar/0.2.1}:
                                      • value: String
            • Context{http://etl.sf.net/etl/grammar/0.2.1}:
              • documentation:
                • DocumentationLine{http://etl.sf.net/etl/grammar/0.2.1}:
                  • text: /// Only value literals are allowed for values
              • name: ValueExpressions
              • content:
                • OperatorDefinition{http://etl.sf.net/etl/grammar/0.2.1}:
                  • isComposite:
                    • Modifier{http://etl.sf.net/etl/grammar/0.2.1}:
                      • value: composite
                  • name: BooleanLiteral
                  • associativity: f
                  • syntax:
                    • Let{http://etl.sf.net/etl/grammar/0.2.1}:
                      • name: value
                      • operator: =
                      • expression:
                        • ChoiceOp{http://etl.sf.net/etl/grammar/0.2.1}:
                          • options:
                            • TokenOp{http://etl.sf.net/etl/grammar/0.2.1}:
                              • value: true
                          • options:
                            • TokenOp{http://etl.sf.net/etl/grammar/0.2.1}:
                              • value: false
                • OperatorDefinition{http://etl.sf.net/etl/grammar/0.2.1}:
                  • isComposite:
                    • Modifier{http://etl.sf.net/etl/grammar/0.2.1}:
                      • value: composite
                  • name: StringLiteral
                  • associativity: f
                  • syntax:
                    • Let{http://etl.sf.net/etl/grammar/0.2.1}:
                      • name: value
                      • operator: =
                      • expression:
                        • StringOp{http://etl.sf.net/etl/grammar/0.2.1}:
                          • quote: "\""
                • OperatorDefinition{http://etl.sf.net/etl/grammar/0.2.1}:
                  • documentation:
                    • DocumentationLine{http://etl.sf.net/etl/grammar/0.2.1}:
                      • text: /// Note that constraint that literal can contain only one
                    • DocumentationLine{http://etl.sf.net/etl/grammar/0.2.1}:
                      • text: /// character is not not enforced at grammar level.
                  • isComposite:
                    • Modifier{http://etl.sf.net/etl/grammar/0.2.1}:
                      • value: composite
                  • name: CharacterLiteral
                  • associativity: f
                  • syntax:
                    • Let{http://etl.sf.net/etl/grammar/0.2.1}:
                      • name: value
                      • operator: =
                      • expression:
                        • StringOp{http://etl.sf.net/etl/grammar/0.2.1}:
                          • quote: "'"
                • OperatorDefinition{http://etl.sf.net/etl/grammar/0.2.1}:
                  • isComposite:
                    • Modifier{http://etl.sf.net/etl/grammar/0.2.1}:
                      • value: composite
                  • name: IntegerLiteral
                  • associativity: f
                  • syntax:
                    • Let{http://etl.sf.net/etl/grammar/0.2.1}:
                      • name: value
                      • operator: =
                      • expression:
                        • IntegerOp{http://etl.sf.net/etl/grammar/0.2.1}:
                  • OperatorDefinition{http://etl.sf.net/etl/grammar/0.2.1}:
                    • isComposite:
                      • Modifier{http://etl.sf.net/etl/grammar/0.2.1}:
                        • value: composite
                    • name: LongIntegerLiteral
                    • associativity: f
                    • syntax:
                      • Let{http://etl.sf.net/etl/grammar/0.2.1}:
                        • name: value
                        • operator: =
                        • expression:
                          • IntegerOp{http://etl.sf.net/etl/grammar/0.2.1}:
                            • suffix:
                              • l
                              • L
                  • OperatorDefinition{http://etl.sf.net/etl/grammar/0.2.1}:
                    • isComposite:
                      • Modifier{http://etl.sf.net/etl/grammar/0.2.1}:
                        • value: composite
                    • name: DoubleLiteral
                    • associativity: f
                    • syntax:
                      • Let{http://etl.sf.net/etl/grammar/0.2.1}:
                        • name: value
                        • operator: =
                        • expression:
                          • ChoiceOp{http://etl.sf.net/etl/grammar/0.2.1}:
                            • options:
                              • IntegerOp{http://etl.sf.net/etl/grammar/0.2.1}:
                                • suffix:
                                  • d
                                  • D
                            • options:
                              • ChoiceOp{http://etl.sf.net/etl/grammar/0.2.1}:
                                • options:
                                  • FloatOp{http://etl.sf.net/etl/grammar/0.2.1}:
                                  • options:
                                    • FloatOp{http://etl.sf.net/etl/grammar/0.2.1}:
                                      • suffix:
                                        • d
                                        • D
                    • OperatorDefinition{http://etl.sf.net/etl/grammar/0.2.1}:
                      • isComposite:
                        • Modifier{http://etl.sf.net/etl/grammar/0.2.1}:
                          • value: composite
                      • name: FloatLiteral
                      • associativity: f
                      • syntax:
                        • Let{http://etl.sf.net/etl/grammar/0.2.1}:
                          • name: value
                          • operator: =
                          • expression:
                            • ChoiceOp{http://etl.sf.net/etl/grammar/0.2.1}:
                              • options:
                                • IntegerOp{http://etl.sf.net/etl/grammar/0.2.1}:
                                  • suffix:
                                    • f
                                    • F
                              • options:
                                • FloatOp{http://etl.sf.net/etl/grammar/0.2.1}:
                                  • suffix:
                                    • f
                                    • F
                • Context{http://etl.sf.net/etl/grammar/0.2.1}:
                  • name: EnumerationContents
                  • content:
                    • ContextInclude{http://etl.sf.net/etl/grammar/0.2.1}:
                      • contextName: BaseStatements
                    • Statement{http://etl.sf.net/etl/grammar/0.2.1}:
                      • name: EnumLiteral
                      • syntax:
                        • ExpressionStatement{http://etl.sf.net/etl/grammar/0.2.1}:
                          • syntax:
                            • Sequence{http://etl.sf.net/etl/grammar/0.2.1}:
                              • syntax:
                                • KeywordStatement{http://etl.sf.net/etl/grammar/0.2.1}:
                                  • text: literal
                        • Let{http://etl.sf.net/etl/grammar/0.2.1}:
                          • name: name
                          • operator: =
                          • expression:
                            • RefOp{http://etl.sf.net/etl/grammar/0.2.1}:
                              • name: IdentifierDef
                • Context{http://etl.sf.net/etl/grammar/0.2.1}:
                  • name: ClassContents
                  • content:
                    • ContextInclude{http://etl.sf.net/etl/grammar/0.2.1}:
                      • contextName: BaseStatements
                    • ContextImport{http://etl.sf.net/etl/grammar/0.2.1}:
                      • localName: TypeExpressions
                      • contextName: TypeExpressions
                    • ContextImport{http://etl.sf.net/etl/grammar/0.2.1}:
                      • localName: ValueExpressions
                      • contextName: ValueExpressions
                    • Def{http://etl.sf.net/etl/grammar/0.2.1}:
                      • documentation:
                        • DocumentationLine{http://etl.sf.net/etl/grammar/0.2.1}:
                          • text: /// This is a simple name definition. It is used in parameters and variables
                      • name: NameDefinition
                      • syntax:
                        • Let{http://etl.sf.net/etl/grammar/0.2.1}:
                          • name: name
                          • operator: =
                          • expression:
                            • RefOp{http://etl.sf.net/etl/grammar/0.2.1}:
                              • name: IdentifierDef
                        • ExpressionStatement{http://etl.sf.net/etl/grammar/0.2.1}:
                          • syntax:
                            • RefOp{http://etl.sf.net/etl/grammar/0.2.1}:
                              • name: TypeSection
                    • Def{http://etl.sf.net/etl/grammar/0.2.1}:
                      • documentation:
                        • DocumentationLine{http://etl.sf.net/etl/grammar/0.2.1}:
                          • text: /// This is a type section
                      • name: TypeSection
                      • syntax:
                        • ExpressionStatement{http://etl.sf.net/etl/grammar/0.2.1}:
                          • syntax:
                            • Sequence{http://etl.sf.net/etl/grammar/0.2.1}:
                              • syntax:
                                • KeywordStatement{http://etl.sf.net/etl/grammar/0.2.1}:
                                  • text: :
                                • Let{http://etl.sf.net/etl/grammar/0.2.1}:
                                  • name: type
                                  • operator: =
                                  • expression:
                                    • ExpressionRef{http://etl.sf.net/etl/grammar/0.2.1}:
                                      • context: TypeExpressions
                                • ExpressionStatement{http://etl.sf.net/etl/grammar/0.2.1}:
                                  • syntax:
                                    • OptionalOp{http://etl.sf.net/etl/grammar/0.2.1}:
                                      • syntax:
                                        • Sequence{http://etl.sf.net/etl/grammar/0.2.1}:
                                          • syntax:
                                            • KeywordStatement{http://etl.sf.net/etl/grammar/0.2.1}:
                                              • text: [
                                            • ExpressionStatement{http://etl.sf.net/etl/grammar/0.2.1}:
                                              • syntax:
                                                • RefOp{http://etl.sf.net/etl/grammar/0.2.1}:
                                                  • name: MultiplicityDef
                                            • KeywordStatement{http://etl.sf.net/etl/grammar/0.2.1}:
                                              • text: ]
                    • Def{http://etl.sf.net/etl/grammar/0.2.1}:
                      • documentation:
                        • DocumentationLine{http://etl.sf.net/etl/grammar/0.2.1}:
                          • text: /// Note that multiplicity is accepted in the following forms
                        • DocumentationLine{http://etl.sf.net/etl/grammar/0.2.1}:
                          • text: /// 1, 0..1, 1..*, *. If upper bound is not defined, it is assumed
                        • DocumentationLine{http://etl.sf.net/etl/grammar/0.2.1}:
                          • text: /// to be equal to lower bound. If lower bound is not definied,
                        • DocumentationLine{http://etl.sf.net/etl/grammar/0.2.1}:
                          • text: /// (the case of *), it is assumed to be 0.
                      • name: MultiplicityDef
                      • syntax:
                        • ExpressionStatement{http://etl.sf.net/etl/grammar/0.2.1}:
                          • syntax:
                            • ChoiceOp{http://etl.sf.net/etl/grammar/0.2.1}:
                              • options:
                                • Sequence{http://etl.sf.net/etl/grammar/0.2.1}:
                                  • syntax:
                                    • Let{http://etl.sf.net/etl/grammar/0.2.1}:
                                      • name: lowBound
                                      • operator: =
                                      • expression:
                                        • IntegerOp{http://etl.sf.net/etl/grammar/0.2.1}:
                                      • ExpressionStatement{http://etl.sf.net/etl/grammar/0.2.1}:
                                        • syntax:
                                          • OptionalOp{http://etl.sf.net/etl/grammar/0.2.1}:
                                            • syntax:
                                              • Sequence{http://etl.sf.net/etl/grammar/0.2.1}:
                                                • syntax:
                                                  • KeywordStatement{http://etl.sf.net/etl/grammar/0.2.1}:
                                                    • text: ..
                                                  • Let{http://etl.sf.net/etl/grammar/0.2.1}:
                                                    • name: uppperBound
                                                    • operator: =
                                                    • expression:
                                                      • ChoiceOp{http://etl.sf.net/etl/grammar/0.2.1}:
                                                        • options:
                                                          • IntegerOp{http://etl.sf.net/etl/grammar/0.2.1}:
                                                          • options:
                                                            • TokenOp{http://etl.sf.net/etl/grammar/0.2.1}:
                                                              • value: *
                                  • options:
                                    • Sequence{http://etl.sf.net/etl/grammar/0.2.1}:
                                      • syntax:
                                        • Let{http://etl.sf.net/etl/grammar/0.2.1}:
                                          • name: upperBound
                                          • operator: =
                                          • expression:
                                            • TokenOp{http://etl.sf.net/etl/grammar/0.2.1}:
                                              • value: *
                        • Statement{http://etl.sf.net/etl/grammar/0.2.1}:
                          • documentation:
                            • DocumentationLine{http://etl.sf.net/etl/grammar/0.2.1}:
                              • text: /// This is variable statement.
                          • name: Var
                          • syntax:
                            • ExpressionStatement{http://etl.sf.net/etl/grammar/0.2.1}:
                              • syntax:
                                • Sequence{http://etl.sf.net/etl/grammar/0.2.1}:
                                  • syntax:
                                    • KeywordStatement{http://etl.sf.net/etl/grammar/0.2.1}:
                                      • text: var
                            • ExpressionStatement{http://etl.sf.net/etl/grammar/0.2.1}:
                              • syntax:
                                • ModifiersOp{http://etl.sf.net/etl/grammar/0.2.1}:
                                  • modifiers:
                                    • Let{http://etl.sf.net/etl/grammar/0.2.1}:
                                      • name: composite
                                      • operator: =
                                      • expression:
                                        • ModifierOp{http://etl.sf.net/etl/grammar/0.2.1}:
                                          • value: composite
                                    • Let{http://etl.sf.net/etl/grammar/0.2.1}:
                                      • name: unsettable
                                      • operator: =
                                      • expression:
                                        • ModifierOp{http://etl.sf.net/etl/grammar/0.2.1}:
                                          • value: unsettable
                                    • Let{http://etl.sf.net/etl/grammar/0.2.1}:
                                      • name: readonly
                                      • operator: =
                                      • expression:
                                        • ModifierOp{http://etl.sf.net/etl/grammar/0.2.1}:
                                          • value: readonly
                                    • Let{http://etl.sf.net/etl/grammar/0.2.1}:
                                      • name: volatile
                                      • operator: =
                                      • expression:
                                        • ModifierOp{http://etl.sf.net/etl/grammar/0.2.1}:
                                          • value: volatile
                                    • Let{http://etl.sf.net/etl/grammar/0.2.1}:
                                      • name: derived
                                      • operator: =
                                      • expression:
                                        • ModifierOp{http://etl.sf.net/etl/grammar/0.2.1}:
                                          • value: derived
                                    • Let{http://etl.sf.net/etl/grammar/0.2.1}:
                                      • name: transient
                                      • operator: =
                                      • expression:
                                        • ModifierOp{http://etl.sf.net/etl/grammar/0.2.1}:
                                          • value: transient
                            • ExpressionStatement{http://etl.sf.net/etl/grammar/0.2.1}:
                              • syntax:
                                • RefOp{http://etl.sf.net/etl/grammar/0.2.1}:
                                  • name: NameDefinition
                            • ExpressionStatement{http://etl.sf.net/etl/grammar/0.2.1}:
                              • syntax:
                                • ChoiceOp{http://etl.sf.net/etl/grammar/0.2.1}:
                                  • options:
                                    • Sequence{http://etl.sf.net/etl/grammar/0.2.1}:
                                      • syntax:
                                        • KeywordStatement{http://etl.sf.net/etl/grammar/0.2.1}:
                                          • text: =
                                        • Let{http://etl.sf.net/etl/grammar/0.2.1}:
                                          • name: initialValue
                                          • operator: =
                                          • expression:
                                            • ExpressionRef{http://etl.sf.net/etl/grammar/0.2.1}:
                                              • context: ValueExpressions
                                  • options:
                                    • ChoiceOp{http://etl.sf.net/etl/grammar/0.2.1}:
                                      • options:
                                        • Sequence{http://etl.sf.net/etl/grammar/0.2.1}:
                                          • syntax:
                                            • KeywordStatement{http://etl.sf.net/etl/grammar/0.2.1}:
                                              • text: inverseof
                                            • Let{http://etl.sf.net/etl/grammar/0.2.1}:
                                              • name: inverseRole
                                              • operator: =
                                              • expression:
                                                • IdentifierOp{http://etl.sf.net/etl/grammar/0.2.1}:
                                        • options:
                                          • Sequence{http://etl.sf.net/etl/grammar/0.2.1}:
                            • Statement{http://etl.sf.net/etl/grammar/0.2.1}:
                              • documentation:
                                • DocumentationLine{http://etl.sf.net/etl/grammar/0.2.1}:
                                  • text: /// This is a method statement
                              • name: Operation
                              • syntax:
                                • ExpressionStatement{http://etl.sf.net/etl/grammar/0.2.1}:
                                  • syntax:
                                    • Sequence{http://etl.sf.net/etl/grammar/0.2.1}:
                                      • syntax:
                                        • KeywordStatement{http://etl.sf.net/etl/grammar/0.2.1}:
                                          • text: to
                                • Let{http://etl.sf.net/etl/grammar/0.2.1}:
                                  • name: name
                                  • operator: =
                                  • expression:
                                    • RefOp{http://etl.sf.net/etl/grammar/0.2.1}:
                                      • name: IdentifierDef
                                • ExpressionStatement{http://etl.sf.net/etl/grammar/0.2.1}:
                                  • syntax:
                                    • Sequence{http://etl.sf.net/etl/grammar/0.2.1}:
                                      • syntax:
                                        • KeywordStatement{http://etl.sf.net/etl/grammar/0.2.1}:
                                          • text: (
                                • ExpressionStatement{http://etl.sf.net/etl/grammar/0.2.1}:
                                  • syntax:
                                    • OptionalOp{http://etl.sf.net/etl/grammar/0.2.1}:
                                      • syntax:
                                        • ListOp{http://etl.sf.net/etl/grammar/0.2.1}:
                                          • separator: ,
                                          • syntax:
                                            • Sequence{http://etl.sf.net/etl/grammar/0.2.1}:
                                              • syntax:
                                                • ExpressionStatement{http://etl.sf.net/etl/grammar/0.2.1}:
                                                  • syntax:
                                                    • ObjectOp{http://etl.sf.net/etl/grammar/0.2.1}:
                                                      • name:
                                                        • ObjectName{http://etl.sf.net/etl/grammar/0.2.1}:
                                                          • prefix: e
                                                          • name: Parameter
                                                      • syntax:
                                                        • Sequence{http://etl.sf.net/etl/grammar/0.2.1}:
                                                          • syntax:
                                                            • ExpressionStatement{http://etl.sf.net/etl/grammar/0.2.1}:
                                                              • syntax:
                                                                • RefOp{http://etl.sf.net/etl/grammar/0.2.1}:
                                                                  • name: NameDefinition
                                • ExpressionStatement{http://etl.sf.net/etl/grammar/0.2.1}:
                                  • syntax:
                                    • Sequence{http://etl.sf.net/etl/grammar/0.2.1}:
                                      • syntax:
                                        • KeywordStatement{http://etl.sf.net/etl/grammar/0.2.1}:
                                          • text: )
                                • ExpressionStatement{http://etl.sf.net/etl/grammar/0.2.1}:
                                  • syntax:
                                    • OptionalOp{http://etl.sf.net/etl/grammar/0.2.1}:
                                      • syntax:
                                        • RefOp{http://etl.sf.net/etl/grammar/0.2.1}:
                                          • name: TypeSection
                                • ExpressionStatement{http://etl.sf.net/etl/grammar/0.2.1}:
                                  • syntax:
                                    • OptionalOp{http://etl.sf.net/etl/grammar/0.2.1}:
                                      • syntax:
                                        • Sequence{http://etl.sf.net/etl/grammar/0.2.1}:
                                          • syntax:
                                            • KeywordStatement{http://etl.sf.net/etl/grammar/0.2.1}:
                                              • text: throws
                                            • Let{http://etl.sf.net/etl/grammar/0.2.1}:
                                              • name: exceptions
                                              • operator: =
                                              • expression:
                                                • ListOp{http://etl.sf.net/etl/grammar/0.2.1}:
                                                  • separator: ,
                                                  • syntax:
                                                    • Sequence{http://etl.sf.net/etl/grammar/0.2.1}:
                                                      • syntax:
                                                        • ExpressionStatement{http://etl.sf.net/etl/grammar/0.2.1}:
                                                          • syntax:
                                                            • ExpressionRef{http://etl.sf.net/etl/grammar/0.2.1}:
                                                              • context: TypeExpressions
                        • Context{http://etl.sf.net/etl/grammar/0.2.1}:
                          • name: DataTypeContents
                          • content:
                            • ContextInclude{http://etl.sf.net/etl/grammar/0.2.1}:
                              • contextName: BaseStatements
                            • Statement{http://etl.sf.net/etl/grammar/0.2.1}:
                              • documentation:
                                • DocumentationLine{http://etl.sf.net/etl/grammar/0.2.1}:
                                  • text: /// datatype context should have at least one statement in order
                                • DocumentationLine{http://etl.sf.net/etl/grammar/0.2.1}:
                                  • text: /// for blocks to be allowed
                              • name: BlankDatatypeStatement
                        • Context{http://etl.sf.net/etl/grammar/0.2.1}:
                          • documentation:
                            • DocumentationLine{http://etl.sf.net/etl/grammar/0.2.1}:
                              • text: /// This context defines package construct
                          • abstractModifier:
                            • Modifier{http://etl.sf.net/etl/grammar/0.2.1}:
                              • value: abstract
                          • name: PackageDefinitionContext
                          • content:
                            • ContextInclude{http://etl.sf.net/etl/grammar/0.2.1}:
                              • contextName: BaseStatements
                            • Def{http://etl.sf.net/etl/grammar/0.2.1}:
                              • name: PackageContentsBlockDef
                              • syntax:
                                • ExpressionStatement{http://etl.sf.net/etl/grammar/0.2.1}:
                                  • syntax:
                                    • BlockRef{http://etl.sf.net/etl/grammar/0.2.1}:
                                      • context: PackageContents
                            • Statement{http://etl.sf.net/etl/grammar/0.2.1}:
                              • name: Package
                              • syntax:
                                • ExpressionStatement{http://etl.sf.net/etl/grammar/0.2.1}:
                                  • syntax:
                                    • Sequence{http://etl.sf.net/etl/grammar/0.2.1}:
                                      • syntax:
                                        • KeywordStatement{http://etl.sf.net/etl/grammar/0.2.1}:
                                          • text: package
                                • Let{http://etl.sf.net/etl/grammar/0.2.1}:
                                  • name: name
                                  • operator: =
                                  • expression:
                                    • RefOp{http://etl.sf.net/etl/grammar/0.2.1}:
                                      • name: IdentifierDef
                                • Let{http://etl.sf.net/etl/grammar/0.2.1}:
                                  • name: contents
                                  • operator: +=
                                  • expression:
                                    • RefOp{http://etl.sf.net/etl/grammar/0.2.1}:
                                      • name: PackageContentsBlockDef
                        • Context{http://etl.sf.net/etl/grammar/0.2.1}:
                          • documentation:
                            • DocumentationLine{http://etl.sf.net/etl/grammar/0.2.1}:
                              • text: /// This context defines package contents construct
                          • name: PackageContents
                          • content:
                            • ContextInclude{http://etl.sf.net/etl/grammar/0.2.1}:
                              • contextName: PackageDefinitionContext
                            • Def{http://etl.sf.net/etl/grammar/0.2.1}:
                              • name: PackageContentsBlockDef
                              • syntax:
                                • ExpressionStatement{http://etl.sf.net/etl/grammar/0.2.1}:
                                  • syntax:
                                    • BlockRef{http://etl.sf.net/etl/grammar/0.2.1}:
                              • Statement{http://etl.sf.net/etl/grammar/0.2.1}:
                                • name: Namespace
                                • syntax:
                                  • ExpressionStatement{http://etl.sf.net/etl/grammar/0.2.1}:
                                    • syntax:
                                      • Sequence{http://etl.sf.net/etl/grammar/0.2.1}:
                                        • syntax:
                                          • KeywordStatement{http://etl.sf.net/etl/grammar/0.2.1}:
                                            • text: namespace
                                  • Let{http://etl.sf.net/etl/grammar/0.2.1}:
                                    • name: nsPrefix
                                    • operator: =
                                    • expression:
                                      • IdentifierOp{http://etl.sf.net/etl/grammar/0.2.1}:
                                    • ExpressionStatement{http://etl.sf.net/etl/grammar/0.2.1}:
                                      • syntax:
                                        • Sequence{http://etl.sf.net/etl/grammar/0.2.1}:
                                          • syntax:
                                            • KeywordStatement{http://etl.sf.net/etl/grammar/0.2.1}:
                                              • text: =
                                    • Let{http://etl.sf.net/etl/grammar/0.2.1}:
                                      • name: nsUri
                                      • operator: =
                                      • expression:
                                        • StringOp{http://etl.sf.net/etl/grammar/0.2.1}:
                                          • quote: "\""
                                • Statement{http://etl.sf.net/etl/grammar/0.2.1}:
                                  • name: ImportStatement
                                  • syntax:
                                    • ExpressionStatement{http://etl.sf.net/etl/grammar/0.2.1}:
                                      • syntax:
                                        • Sequence{http://etl.sf.net/etl/grammar/0.2.1}:
                                          • syntax:
                                            • KeywordStatement{http://etl.sf.net/etl/grammar/0.2.1}:
                                              • text: import
                                    • Let{http://etl.sf.net/etl/grammar/0.2.1}:
                                      • name: uri
                                      • operator: =
                                      • expression:
                                        • StringOp{http://etl.sf.net/etl/grammar/0.2.1}:
                                          • quote: "\""
                                    • ExpressionStatement{http://etl.sf.net/etl/grammar/0.2.1}:
                                      • syntax:
                                        • Sequence{http://etl.sf.net/etl/grammar/0.2.1}:
                                          • syntax:
                                            • KeywordStatement{http://etl.sf.net/etl/grammar/0.2.1}:
                                              • text: as
                                    • Let{http://etl.sf.net/etl/grammar/0.2.1}:
                                      • name: name
                                      • operator: =
                                      • expression:
                                        • RefOp{http://etl.sf.net/etl/grammar/0.2.1}:
                                          • name: IdentifierDef
                                • Statement{http://etl.sf.net/etl/grammar/0.2.1}:
                                  • name: With
                                  • syntax:
                                    • ExpressionStatement{http://etl.sf.net/etl/grammar/0.2.1}:
                                      • syntax:
                                        • Sequence{http://etl.sf.net/etl/grammar/0.2.1}:
                                          • syntax:
                                            • KeywordStatement{http://etl.sf.net/etl/grammar/0.2.1}:
                                              • text: with
                                    • Let{http://etl.sf.net/etl/grammar/0.2.1}:
                                      • name: name
                                      • operator: =
                                      • expression:
                                        • ExpressionRef{http://etl.sf.net/etl/grammar/0.2.1}:
                                          • context: QualifiedNames
                                • Statement{http://etl.sf.net/etl/grammar/0.2.1}:
                                  • name: DataType
                                  • syntax:
                                    • ExpressionStatement{http://etl.sf.net/etl/grammar/0.2.1}:
                                      • syntax:
                                        • Sequence{http://etl.sf.net/etl/grammar/0.2.1}:
                                          • syntax:
                                            • KeywordStatement{http://etl.sf.net/etl/grammar/0.2.1}:
                                              • text: datatype
                                    • ExpressionStatement{http://etl.sf.net/etl/grammar/0.2.1}:
                                      • syntax:
                                        • ModifiersOp{http://etl.sf.net/etl/grammar/0.2.1}:
                                          • modifiers:
                                            • Let{http://etl.sf.net/etl/grammar/0.2.1}:
                                              • name: serializable
                                              • operator: =
                                              • expression:
                                                • ModifierOp{http://etl.sf.net/etl/grammar/0.2.1}:
                                                  • value: serializable
                                    • Let{http://etl.sf.net/etl/grammar/0.2.1}:
                                      • name: name
                                      • operator: =
                                      • expression:
                                        • RefOp{http://etl.sf.net/etl/grammar/0.2.1}:
                                          • name: IdentifierDef
                                    • Let{http://etl.sf.net/etl/grammar/0.2.1}:
                                      • name: contents
                                      • operator: +=
                                      • expression:
                                        • BlockRef{http://etl.sf.net/etl/grammar/0.2.1}:
                                          • context: DataTypeContents
                                • Statement{http://etl.sf.net/etl/grammar/0.2.1}:
                                  • name: Enum
                                  • syntax:
                                    • ExpressionStatement{http://etl.sf.net/etl/grammar/0.2.1}:
                                      • syntax:
                                        • Sequence{http://etl.sf.net/etl/grammar/0.2.1}:
                                          • syntax:
                                            • KeywordStatement{http://etl.sf.net/etl/grammar/0.2.1}:
                                              • text: enumeration
                                    • Let{http://etl.sf.net/etl/grammar/0.2.1}:
                                      • name: name
                                      • operator: =
                                      • expression:
                                        • RefOp{http://etl.sf.net/etl/grammar/0.2.1}:
                                          • name: IdentifierDef
                                    • Let{http://etl.sf.net/etl/grammar/0.2.1}:
                                      • name: contents
                                      • operator: =
                                      • expression:
                                        • BlockRef{http://etl.sf.net/etl/grammar/0.2.1}:
                                          • context: EnumerationContents
                                • Statement{http://etl.sf.net/etl/grammar/0.2.1}:
                                  • name: Class
                                  • syntax:
                                    • ExpressionStatement{http://etl.sf.net/etl/grammar/0.2.1}:
                                      • syntax:
                                        • Sequence{http://etl.sf.net/etl/grammar/0.2.1}:
                                          • syntax:
                                            • KeywordStatement{http://etl.sf.net/etl/grammar/0.2.1}:
                                              • text: class
                                    • ExpressionStatement{http://etl.sf.net/etl/grammar/0.2.1}:
                                      • syntax:
                                        • ModifiersOp{http://etl.sf.net/etl/grammar/0.2.1}:
                                          • modifiers:
                                            • Let{http://etl.sf.net/etl/grammar/0.2.1}:
                                              • name: abstract
                                              • operator: =
                                              • expression:
                                                • ModifierOp{http://etl.sf.net/etl/grammar/0.2.1}:
                                                  • value: abstract
                                            • Let{http://etl.sf.net/etl/grammar/0.2.1}:
                                              • name: interface
                                              • operator: =
                                              • expression:
                                                • ModifierOp{http://etl.sf.net/etl/grammar/0.2.1}:
                                                  • value: interface
                                    • Let{http://etl.sf.net/etl/grammar/0.2.1}:
                                      • name: name
                                      • operator: =
                                      • expression:
                                        • RefOp{http://etl.sf.net/etl/grammar/0.2.1}:
                                          • name: IdentifierDef
                                    • ExpressionStatement{http://etl.sf.net/etl/grammar/0.2.1}:
                                      • syntax:
                                        • OptionalOp{http://etl.sf.net/etl/grammar/0.2.1}:
                                          • syntax:
                                            • Sequence{http://etl.sf.net/etl/grammar/0.2.1}:
                                              • syntax:
                                                • KeywordStatement{http://etl.sf.net/etl/grammar/0.2.1}:
                                                  • text: extends
                                                • Let{http://etl.sf.net/etl/grammar/0.2.1}:
                                                  • name: supertTypes
                                                  • operator: =
                                                  • expression:
                                                    • ListOp{http://etl.sf.net/etl/grammar/0.2.1}:
                                                      • separator: ,
                                                      • syntax:
                                                        • Sequence{http://etl.sf.net/etl/grammar/0.2.1}:
                                                          • syntax:
                                                            • ExpressionStatement{http://etl.sf.net/etl/grammar/0.2.1}:
                                                              • syntax:
                                                                • ExpressionRef{http://etl.sf.net/etl/grammar/0.2.1}:
                                                                  • context: QualifiedNames
                                    • Let{http://etl.sf.net/etl/grammar/0.2.1}:
                                      • name: contents
                                      • operator: =
                                      • expression:
                                        • BlockRef{http://etl.sf.net/etl/grammar/0.2.1}:
                                          • context: ClassContents
                            • Context{http://etl.sf.net/etl/grammar/0.2.1}:
                              • defaultModifier:
                                • Modifier{http://etl.sf.net/etl/grammar/0.2.1}:
                                  • value: default
                              • name: TopLevel
                              • content:
                                • ContextInclude{http://etl.sf.net/etl/grammar/0.2.1}:
                                  • contextName: PackageDefinitionContext
                                • Statement{http://etl.sf.net/etl/grammar/0.2.1}:
                                  • name: AnnotationSource
                                  • syntax:
                                    • ExpressionStatement{http://etl.sf.net/etl/grammar/0.2.1}:
                                      • syntax:
                                        • Sequence{http://etl.sf.net/etl/grammar/0.2.1}:
                                          • syntax:
                                            • KeywordStatement{http://etl.sf.net/etl/grammar/0.2.1}:
                                              • text: annotation_source
                                    • Let{http://etl.sf.net/etl/grammar/0.2.1}:
                                      • name: localName
                                      • operator: =
                                      • expression:
                                        • IdentifierOp{http://etl.sf.net/etl/grammar/0.2.1}:
                                      • ExpressionStatement{http://etl.sf.net/etl/grammar/0.2.1}:
                                        • syntax:
                                          • Sequence{http://etl.sf.net/etl/grammar/0.2.1}:
                                            • syntax:
                                              • KeywordStatement{http://etl.sf.net/etl/grammar/0.2.1}:
                                                • text: =
                                      • Let{http://etl.sf.net/etl/grammar/0.2.1}:
                                        • name: uri
                                        • operator: =
                                        • expression:
                                          • StringOp{http://etl.sf.net/etl/grammar/0.2.1}:
                                            • quote: "\""
                               1: doctype public "-//IDN etl.sf.net//ETL//Grammar 0.2.1";
                               2: /// This is a grammar for ecore language. This language
                               3: /// is used to create Ecore models in the textual notation.
                               4: /// This quite simplified grammar. It basically supports
                               5: /// Library sample and little more. Object references 
                               6: /// and contained objects in annotations are not supported here.
                               7: ///
                               8: grammar net.sf.etl.samples.ecore.Ecore {
                               9: 	namespace default e = "http://etl.sf.net/2006/samples/ecore/0.1";
                              10: 	/// This is a base context that contains common definitions
                              11: 	/// that are used by other contexts.
                              12: 	context abstract Base {
                              13: 		def IdentifierDef {
                              14: 			^ e:Identifier {
                              15: 				{
                              16: 					@ name = identifier;
                              17: 				} | {
                              18: 					@ quotedName = string(prefix=q|Q, quote = "'");
                              19: 				};
                              20: 			};
                              21: 		};
                              22: 	};
                              23: 	/// This is a base context for statements that contains common
                              24: 	/// definitions for statements and declaration of attributes
                              25: 	/// and docs.
                              26: 	context abstract BaseStatements {
                              27: 		include Base;
                              28: 		attributes Annotation {
                              29: 			@ annotations = % @ % [ {
                              30: 				list, {
                              31: 					^ e:Annotation {
                              32: 						@ source = identifier | string(quote = "\"");
                              33: 						@ details += %( {
                              34: 							list, {
                              35: 								^ e:AnnotationDetail {
                              36: 									@ key = identifier | string(quote = "\"");
                              37: 									% = ;
                              38: 									@ value = string(quote = "\"");
                              39: 								};
                              40: 							} ?;
                              41: 						} %);
                              42: 					};
                              43: 				};
                              44: 			} % ] +;
                              45: 			 
                              46: 		};
                              47: 		documentation Documentation {
                              48: 			@ documentation += doclines wrapper e:DocumentationLine.text;
                              49: 		};
                              50: 	};
                              51: 	context QualifiedNames {
                              52: 		include Base;
                              53: 		/// Identifier operator
                              54: 		op composite Identifier(f) {
                              55: 			ref(IdentifierDef);
                              56: 		};
                              57: 		op NamespaceAccessOp(yfx, 100, ::) {
                              58: 			@ namespace = left;
                              59: 			@ object = right;
                              60: 		};
                              61: 	};
                              62: 	context TypeExpressions {
                              63: 		include QualifiedNames;
                              64: 		op composite BooleanType(f) {
                              65: 			^ e:PrimitiveType {
                              66: 				@ name = token(boolean);
                              67: 			};
                              68: 		};
                              69: 		op composite ByteType(f) {
                              70: 			^ e:PrimitiveType {
                              71: 				@ name = token(byte);
                              72: 			};
                              73: 		};
                              74: 		op composite ShortType(f) {
                              75: 			^ e:PrimitiveType {
                              76: 				@ name = token(short);
                              77: 			};
                              78: 		};
                              79: 		op composite IntType(f) {
                              80: 			^ e:PrimitiveType {
                              81: 				@ name = token(int);
                              82: 			};
                              83: 		};
                              84: 		op composite LongType(f) {
                              85: 			^ e:PrimitiveType {
                              86: 				@ name = token(long);
                              87: 			};
                              88: 		};
                              89: 		op composite CharType(f) {
                              90: 			^ e:PrimitiveType {
                              91: 				@ name = token(char);
                              92: 			};
                              93: 		};
                              94: 		op composite FloatType(f) {
                              95: 			^ e:PrimitiveType {
                              96: 				@ name = token(float);
                              97: 			};
                              98: 		};
                              99: 		op composite DoubleType(f) {
                             100: 			^ e:PrimitiveType {
                             101: 				@ name = token(double);
                             102: 			};
                             103: 		};
                             104: 		op composite StringType(f) {
                             105: 			^ e:PrimitiveType {
                             106: 				@ name = token(String);
                             107: 			};
                             108: 		};
                             109: 	};
                             110: 	/// Only value literals are allowed for values
                             111: 	context ValueExpressions {
                             112: 		op composite BooleanLiteral(f) {
                             113: 			@ value = token(true) | token(false);
                             114: 		};
                             115: 		op composite StringLiteral(f) {
                             116: 			@ value = string(quote = "\"");
                             117: 		};
                             118: 		/// Note that constraint that literal can contain only one 
                             119: 		/// character is not not enforced at grammar level.
                             120: 		op composite CharacterLiteral(f) {
                             121: 			@ value = string(quote = "'");
                             122: 		};
                             123: 		op composite IntegerLiteral(f) {
                             124: 			@ value = integer;
                             125: 		};
                             126: 		op composite LongIntegerLiteral(f) {
                             127: 			@ value = integer(suffix = l|L);
                             128: 		};
                             129: 		op composite DoubleLiteral(f) {
                             130: 			@ value = integer(suffix = d|D) |  float | float(suffix = d|D);
                             131: 		};
                             132: 		op composite FloatLiteral(f) {
                             133: 			@ value = integer(suffix = f|F) | float(suffix = f|F);
                             134: 		};
                             135: 	};
                             136: 	context EnumerationContents {
                             137: 		include BaseStatements;
                             138: 		statement EnumLiteral {
                             139: 			% literal;
                             140: 			@ name = ref(IdentifierDef);
                             141: 		};
                             142: 	};
                             143: 	context ClassContents {
                             144: 		include BaseStatements;
                             145: 		import TypeExpressions = TypeExpressions;
                             146: 		import ValueExpressions = ValueExpressions;
                             147: 		/// This is a simple name definition. It is used in parameters and variables
                             148: 		def NameDefinition {
                             149: 			@ name = ref(IdentifierDef);
                             150: 			ref(TypeSection);
                             151: 		};
                             152: 		/// This is a type section
                             153: 		def TypeSection {
                             154: 			% :{
                             155: 				@ type = expression(TypeExpressions);
                             156: 				% [ {
                             157: 					ref(MultiplicityDef);
                             158: 				} % ] ?;
                             159: 			};
                             160: 		};
                             161: 		/// Note that multiplicity is accepted in the following forms
                             162: 		/// 1, 0..1, 1..*, *. If upper bound is not defined, it is assumed
                             163: 		/// to be equal to lower bound. If lower bound is not definied,
                             164: 		/// (the case of *), it is assumed to be 0.
                             165: 		def MultiplicityDef {
                             166: 			{
                             167: 				@ lowBound = integer;
                             168: 				% .. {
                             169: 					@ uppperBound = integer | token(*);
                             170: 				} ?;
                             171: 			} | {
                             172: 				@ upperBound = token(*);
                             173: 			};
                             174: 		};
                             175: 		/// This is variable statement. 
                             176: 		statement Var {
                             177: 			% var; 
                             178: 			modifiers {
                             179: 				@ composite = modifier composite;
                             180: 				@ unsettable = modifier unsettable;
                             181: 				@ readonly = modifier readonly;
                             182: 				@ volatile = modifier volatile;
                             183: 				@ derived = modifier derived;
                             184: 				@ transient = modifier transient;
                             185: 			};
                             186: 			ref(NameDefinition);
                             187: 			% = {
                             188: 				@ initialValue = expression(ValueExpressions);
                             189: 			} | % inverseof {
                             190: 				@ inverseRole = identifier;
                             191: 			} | {
                             192: 			};
                             193: 		};
                             194: 		/// This is a method statement
                             195: 		statement Operation {
                             196: 			% to ;
                             197: 			@ name = ref(IdentifierDef);
                             198: 			%(;
                             199: 			list, {
                             200: 				^ e:Parameter {
                             201: 					ref(NameDefinition);
                             202: 				};
                             203: 			} ?;
                             204: 			% );
                             205: 			ref(TypeSection) ?;
                             206: 			% throws {
                             207: 				@ exceptions = list, {
                             208: 					expression(TypeExpressions);
                             209: 				};
                             210: 			} ?;
                             211: 		};
                             212: 	};
                             213: 	context DataTypeContents {
                             214: 		include BaseStatements;
                             215: 		/// datatype context should have at least one statement in order
                             216: 		/// for blocks to be allowed
                             217: 		statement BlankDatatypeStatement {
                             218: 		};
                             219: 	};
                             220: 	/// This context defines package construct
                             221: 	context abstract PackageDefinitionContext {
                             222: 		include BaseStatements;
                             223: 		def PackageContentsBlockDef {
                             224: 			block(PackageContents);
                             225: 		};
                             226: 		statement Package {
                             227: 			% package ;
                             228: 			@ name = ref(IdentifierDef);
                             229: 			@ contents += ref(PackageContentsBlockDef);
                             230: 		};
                             231: 	};
                             232: 	/// This context defines package contents construct
                             233: 	context PackageContents {
                             234: 		include PackageDefinitionContext;
                             235: 		def PackageContentsBlockDef {
                             236: 			block;
                             237: 		};
                             238: 		statement Namespace {
                             239: 			% namespace;
                             240: 			@ nsPrefix = identifier;
                             241: 			% = ;
                             242: 			@ nsUri = string(quote = "\"");
                             243: 		};
                             244: 		statement ImportStatement {
                             245: 			% import; 
                             246: 			@ uri = string(quote = "\"");
                             247: 			% as ;
                             248: 			@ name = ref(IdentifierDef);
                             249: 		};
                             250: 		statement With {
                             251: 			% with; 
                             252: 			@ name = expression(QualifiedNames);
                             253: 		};
                             254: 		statement DataType {
                             255: 			% datatype;
                             256: 			modifiers {
                             257: 				@ serializable = modifier serializable;
                             258: 			};
                             259: 			@ name = ref(IdentifierDef);
                             260: 			@ contents += block(DataTypeContents);
                             261: 		};
                             262: 		statement Enum {
                             263: 			% enumeration;
                             264: 			@ name = ref(IdentifierDef);
                             265: 			@ contents = block(EnumerationContents);
                             266: 		};
                             267: 		statement Class {
                             268: 			% class; 
                             269: 			modifiers {
                             270: 				@ abstract = modifier abstract;
                             271: 				@ interface = modifier interface;
                             272: 			};
                             273: 			@ name = ref(IdentifierDef);
                             274: 			% extends {
                             275: 				@ supertTypes = list, {
                             276: 					expression(QualifiedNames);
                             277: 				};
                             278: 			} ?;
                             279: 			@ contents = block(ClassContents);
                             280: 		};
                             281: 	};
                             282: 	context default TopLevel {
                             283: 		include PackageDefinitionContext;
                             284: 		statement AnnotationSource {
                             285: 			% annotation_source;
                             286: 			@ localName = identifier;
                             287: 			% = ;
                             288: 			@ uri = string(quote = "\"");
                             289: 		};
                             290: 	};
                             291: };