• 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 EJ language. The language is targeted to cover
      • DocumentationLine{http://etl.sf.net/etl/grammar/0.2.1}:
        • text: /// all features of Java language in the way that is similar to one used
      • DocumentationLine{http://etl.sf.net/etl/grammar/0.2.1}:
        • text: /// in Java.
      • DocumentationLine{http://etl.sf.net/etl/grammar/0.2.1}:
        • text: ///
      • DocumentationLine{http://etl.sf.net/etl/grammar/0.2.1}:
        • text: /// Note that the goal of this sample was to get a sample that is as close
      • DocumentationLine{http://etl.sf.net/etl/grammar/0.2.1}:
        • text: /// to Java as possible within ETL. However if the task is to get a good language
      • DocumentationLine{http://etl.sf.net/etl/grammar/0.2.1}:
        • text: /// for JVM, a better languages are possible. For example taking more functional
      • DocumentationLine{http://etl.sf.net/etl/grammar/0.2.1}:
        • text: /// approach is possible allowing constructs like:
      • DocumentationLine{http://etl.sf.net/etl/grammar/0.2.1}:
        • text: /// "let a := {let b:= Math.sin(Math.PI/3); 2*b*(b+1);};"
      • DocumentationLine{http://etl.sf.net/etl/grammar/0.2.1}:
        • text: ///
      • DocumentationLine{http://etl.sf.net/etl/grammar/0.2.1}:
        • text: /// So do not use this source as a sample of the language design. It has
      • DocumentationLine{http://etl.sf.net/etl/grammar/0.2.1}:
        • text: /// known quality issues in this area.
    • name:
      • net
      • sf
      • etl
      • samples
      • ej
      • EJ
    • content:
      • GrammarInclude{http://etl.sf.net/etl/grammar/0.2.1}:
        • systemId: "CommonControlFlow.g.etl"
      • GrammarInclude{http://etl.sf.net/etl/grammar/0.2.1}:
        • systemId: "CommonOperators.g.etl"
      • Namespace{http://etl.sf.net/etl/grammar/0.2.1}:
        • prefix: ej
        • uri: "http://etl.sf.net/2006/samples/ej/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 context contains common definitions that are shared
          • DocumentationLine{http://etl.sf.net/etl/grammar/0.2.1}:
            • text: /// between statements and expressions.
        • abstractModifier:
          • Modifier{http://etl.sf.net/etl/grammar/0.2.1}:
            • value: abstract
        • name: Base
        • content:
          • ContextImport{http://etl.sf.net/etl/grammar/0.2.1}:
            • localName: Expressions
            • contextName: Expressions
          • 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: ClassContents
            • contextName: ClassContents
          • ContextImport{http://etl.sf.net/etl/grammar/0.2.1}:
            • localName: MethodContent
            • contextName: MethodContent
          • ContextImport{http://etl.sf.net/etl/grammar/0.2.1}:
            • localName: NameExpressions
            • contextName: NameExpressions
          • Def{http://etl.sf.net/etl/grammar/0.2.1}:
            • name: NameFragment
            • 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: ej
                        • 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: value
                                        • 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: quotedValue
                                          • operator: =
                                          • expression:
                                            • StringOp{http://etl.sf.net/etl/grammar/0.2.1}:
                                              • prefix:
                                                • q
                                                • Q
                                              • quote: "'"
            • Def{http://etl.sf.net/etl/grammar/0.2.1}:
              • name: AttributesDef
              • syntax:
                • Let{http://etl.sf.net/etl/grammar/0.2.1}:
                  • name: attributeSets
                  • operator: +=
                  • expression:
                    • 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: ej
                                  • name: AttributeSet
                              • syntax:
                                • Sequence{http://etl.sf.net/etl/grammar/0.2.1}:
                                  • 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: @
                                            • 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: attributes
                                                      • 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: Expressions
                                                                      • precedence: 100
                                                    • KeywordStatement{http://etl.sf.net/etl/grammar/0.2.1}:
                                                      • text: ]
            • Def{http://etl.sf.net/etl/grammar/0.2.1}:
              • name: TemplateBounds
              • syntax:
                • 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:
                            • 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:
                                        • 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: super
                                                • Let{http://etl.sf.net/etl/grammar/0.2.1}:
                                                  • name: superToTypes
                                                  • 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
                                  • options:
                                    • Sequence{http://etl.sf.net/etl/grammar/0.2.1}:
                                      • 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: extends
                                                • Let{http://etl.sf.net/etl/grammar/0.2.1}:
                                                  • name: extendedTypes
                                                  • 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
            • Def{http://etl.sf.net/etl/grammar/0.2.1}:
              • name: ClassBlockDef
              • 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: ej
                          • name: ClassBlock
                      • syntax:
                        • Sequence{http://etl.sf.net/etl/grammar/0.2.1}:
                          • syntax:
                            • Let{http://etl.sf.net/etl/grammar/0.2.1}:
                              • name: content
                              • operator: +=
                              • expression:
                                • BlockRef{http://etl.sf.net/etl/grammar/0.2.1}:
                                  • context: ClassContents
            • Def{http://etl.sf.net/etl/grammar/0.2.1}:
              • name: TemplateParameters
              • 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: templateParameters
                          • 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:
                                        • ObjectOp{http://etl.sf.net/etl/grammar/0.2.1}:
                                          • name:
                                            • ObjectName{http://etl.sf.net/etl/grammar/0.2.1}:
                                              • prefix: ej
                                              • name: TemplateParameter
                                          • 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:
                                                    • ExpressionRef{http://etl.sf.net/etl/grammar/0.2.1}:
                                                      • context: NameExpressions
                                                • ExpressionStatement{http://etl.sf.net/etl/grammar/0.2.1}:
                                                  • syntax:
                                                    • RefOp{http://etl.sf.net/etl/grammar/0.2.1}:
                                                      • name: TemplateBounds
                        • KeywordStatement{http://etl.sf.net/etl/grammar/0.2.1}:
                          • text: ]
            • Def{http://etl.sf.net/etl/grammar/0.2.1}:
              • name: NameDefinitionFragment
              • syntax:
                • Let{http://etl.sf.net/etl/grammar/0.2.1}:
                  • name: classifier
                  • operator: =
                  • expression:
                    • ExpressionRef{http://etl.sf.net/etl/grammar/0.2.1}:
                      • context: TypeExpressions
                • 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: NameExpressions
            • Def{http://etl.sf.net/etl/grammar/0.2.1}:
              • name: ParameterFragment
              • 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: ej
                          • 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:
                                • OptionalOp{http://etl.sf.net/etl/grammar/0.2.1}:
                                  • syntax:
                                    • RefOp{http://etl.sf.net/etl/grammar/0.2.1}:
                                      • name: AttributesDef
                            • ExpressionStatement{http://etl.sf.net/etl/grammar/0.2.1}:
                              • syntax:
                                • ModifiersOp{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: ej
                                          • name: Modifier
                                      • property: value
                                  • modifiers:
                                    • Let{http://etl.sf.net/etl/grammar/0.2.1}:
                                      • name: finalModifier
                                      • operator: =
                                      • expression:
                                        • ModifierOp{http://etl.sf.net/etl/grammar/0.2.1}:
                                          • value: final
                            • ExpressionStatement{http://etl.sf.net/etl/grammar/0.2.1}:
                              • syntax:
                                • RefOp{http://etl.sf.net/etl/grammar/0.2.1}:
                                  • name: NameDefinitionFragment
            • Def{http://etl.sf.net/etl/grammar/0.2.1}:
              • name: VariableSetFragment
              • syntax:
                • Let{http://etl.sf.net/etl/grammar/0.2.1}:
                  • name: classifier
                  • operator: =
                  • expression:
                    • ExpressionRef{http://etl.sf.net/etl/grammar/0.2.1}:
                      • context: TypeExpressions
                • Let{http://etl.sf.net/etl/grammar/0.2.1}:
                  • name: variables
                  • 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:
                                • ObjectOp{http://etl.sf.net/etl/grammar/0.2.1}:
                                  • name:
                                    • ObjectName{http://etl.sf.net/etl/grammar/0.2.1}:
                                      • prefix: ej
                                      • name: Variable
                                  • 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:
                                            • ExpressionRef{http://etl.sf.net/etl/grammar/0.2.1}:
                                              • context: NameExpressions
                                        • 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: initialValue
                                                      • operator: =
                                                      • expression:
                                                        • ExpressionRef{http://etl.sf.net/etl/grammar/0.2.1}:
                                                          • context: Expressions
            • Def{http://etl.sf.net/etl/grammar/0.2.1}:
              • name: MethodBlockFragment
              • 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: ej
                          • name: MethodBlock
                      • syntax:
                        • Sequence{http://etl.sf.net/etl/grammar/0.2.1}:
                          • syntax:
                            • Let{http://etl.sf.net/etl/grammar/0.2.1}:
                              • name: content
                              • operator: +=
                              • expression:
                                • BlockRef{http://etl.sf.net/etl/grammar/0.2.1}:
                                  • context: MethodContent
        • Context{http://etl.sf.net/etl/grammar/0.2.1}:
          • documentation:
            • DocumentationLine{http://etl.sf.net/etl/grammar/0.2.1}:
              • text: /// This context contains common definitions used in statements across
            • DocumentationLine{http://etl.sf.net/etl/grammar/0.2.1}:
              • text: /// all contexts.
          • 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: Attributes
              • syntax:
                • ExpressionStatement{http://etl.sf.net/etl/grammar/0.2.1}:
                  • syntax:
                    • RefOp{http://etl.sf.net/etl/grammar/0.2.1}:
                      • name: AttributesDef
            • 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: ej
                              • name: DocumentationLine
                          • property: text
        • Context{http://etl.sf.net/etl/grammar/0.2.1}:
          • name: NameExpressions
          • content:
            • ContextInclude{http://etl.sf.net/etl/grammar/0.2.1}:
              • contextName: Base
            • OperatorDefinition{http://etl.sf.net/etl/grammar/0.2.1}:
              • 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: NameFragment
        • Context{http://etl.sf.net/etl/grammar/0.2.1}:
          • name: PackageNameExpressions
          • content:
            • ContextInclude{http://etl.sf.net/etl/grammar/0.2.1}:
              • contextName: NameExpressions
            • OperatorDefinition{http://etl.sf.net/etl/grammar/0.2.1}:
              • name: AccessOp
              • associativity: yfx
              • precedence: 100
              • text: .
              • 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: ej
                          • name: AccessOp
                      • syntax:
                        • Sequence{http://etl.sf.net/etl/grammar/0.2.1}:
                          • syntax:
                            • Let{http://etl.sf.net/etl/grammar/0.2.1}:
                              • name: accessed
                              • 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: feature
                              • 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: PackageNameExpressions
            • OperatorDefinition{http://etl.sf.net/etl/grammar/0.2.1}:
              • isComposite:
                • Modifier{http://etl.sf.net/etl/grammar/0.2.1}:
                  • value: composite
              • name: ApplySquareOp
              • associativity: yf
              • precedence: 100
              • 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: ej
                          • name: ApplySquareOp
                      • syntax:
                        • Sequence{http://etl.sf.net/etl/grammar/0.2.1}:
                          • syntax:
                            • Let{http://etl.sf.net/etl/grammar/0.2.1}:
                              • name: functor
                              • 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: args
                              • 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:
                                        • 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}:
                                      • KeywordStatement{http://etl.sf.net/etl/grammar/0.2.1}:
                                        • text: ]
              • OperatorDefinition{http://etl.sf.net/etl/grammar/0.2.1}:
                • isComposite:
                  • Modifier{http://etl.sf.net/etl/grammar/0.2.1}:
                    • value: composite
                • name: ArrayType
                • 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: ej
                            • 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: array
              • 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: ej
                            • 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: ej
                            • 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: ej
                            • 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: ej
                            • 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: ej
                            • 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: ej
                            • 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: ej
                            • 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: ej
                            • 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: VoidType
                • 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: ej
                            • 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: void
              • OperatorDefinition{http://etl.sf.net/etl/grammar/0.2.1}:
                • isComposite:
                  • Modifier{http://etl.sf.net/etl/grammar/0.2.1}:
                    • value: composite
                • name: WildcardType
                • 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: ej
                            • name: WildcardType
                        • syntax:
                          • Sequence{http://etl.sf.net/etl/grammar/0.2.1}:
                            • 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: ?
                                      • ExpressionStatement{http://etl.sf.net/etl/grammar/0.2.1}:
                                        • syntax:
                                          • RefOp{http://etl.sf.net/etl/grammar/0.2.1}:
                                            • name: TemplateBounds
          • Context{http://etl.sf.net/etl/grammar/0.2.1}:
            • name: Expressions
            • content:
              • ContextInclude{http://etl.sf.net/etl/grammar/0.2.1}:
                • contextName: TypeExpressions
              • ContextInclude{http://etl.sf.net/etl/grammar/0.2.1}:
                • contextName: CommonOperators
              • ContextImport{http://etl.sf.net/etl/grammar/0.2.1}:
                • localName: ClassContents
                • contextName: ClassContents
              • ContextImport{http://etl.sf.net/etl/grammar/0.2.1}:
                • localName: TypeExpressions
                • contextName: TypeExpressions
              • OperatorDefinition{http://etl.sf.net/etl/grammar/0.2.1}:
                • isComposite:
                  • Modifier{http://etl.sf.net/etl/grammar/0.2.1}:
                    • value: composite
                • name: ThisReference
                • 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: ej
                            • name: ThisReference
                        • 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: this
              • OperatorDefinition{http://etl.sf.net/etl/grammar/0.2.1}:
                • isComposite:
                  • Modifier{http://etl.sf.net/etl/grammar/0.2.1}:
                    • value: composite
                • name: SuperReference
                • 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: ej
                            • name: SuperReference
                        • 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: super
              • OperatorDefinition{http://etl.sf.net/etl/grammar/0.2.1}:
                • isComposite:
                  • Modifier{http://etl.sf.net/etl/grammar/0.2.1}:
                    • value: composite
                • name: NullReference
                • 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: ej
                            • name: NullReference
                        • syntax:
                          • Sequence{http://etl.sf.net/etl/grammar/0.2.1}:
                            • syntax:
                              • Let{http://etl.sf.net/etl/grammar/0.2.1}:
                                • name: value
                                • operator: =
                                • expression:
                                  • TokenOp{http://etl.sf.net/etl/grammar/0.2.1}:
                                    • value: null
              • 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:
                  • 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: ej
                            • name: BooleanLiteral
                        • syntax:
                          • Sequence{http://etl.sf.net/etl/grammar/0.2.1}:
                            • 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:
                  • 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: ej
                            • name: StringLiteral
                        • syntax:
                          • Sequence{http://etl.sf.net/etl/grammar/0.2.1}:
                            • 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:
                  • 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: ej
                            • name: CharacterLiteral
                        • syntax:
                          • Sequence{http://etl.sf.net/etl/grammar/0.2.1}:
                            • 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:
                  • 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: ej
                            • name: IntegerLiteral
                        • syntax:
                          • Sequence{http://etl.sf.net/etl/grammar/0.2.1}:
                            • 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:
                    • 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: ej
                              • name: LongIntegerLiteral
                          • syntax:
                            • Sequence{http://etl.sf.net/etl/grammar/0.2.1}:
                              • 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:
                    • 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: ej
                              • name: DoubleLiteral
                          • syntax:
                            • Sequence{http://etl.sf.net/etl/grammar/0.2.1}:
                              • 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:
                      • 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: ej
                                • name: FloatLiteral
                            • syntax:
                              • Sequence{http://etl.sf.net/etl/grammar/0.2.1}:
                                • 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
                  • Def{http://etl.sf.net/etl/grammar/0.2.1}:
                    • name: ArrayConstructorFragment
                    • 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: ej
                                • name: ArrayConstructor
                            • syntax:
                              • Sequence{http://etl.sf.net/etl/grammar/0.2.1}:
                                • 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: values
                                            • operator: +=
                                            • expression:
                                              • 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:
                                                              • ExpressionRef{http://etl.sf.net/etl/grammar/0.2.1}:
                                            • KeywordStatement{http://etl.sf.net/etl/grammar/0.2.1}:
                                              • text: ]
                    • OperatorDefinition{http://etl.sf.net/etl/grammar/0.2.1}:
                      • isComposite:
                        • Modifier{http://etl.sf.net/etl/grammar/0.2.1}:
                          • value: composite
                      • name: ArrayConstructor
                      • 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: ArrayConstructorFragment
                    • OperatorDefinition{http://etl.sf.net/etl/grammar/0.2.1}:
                      • isComposite:
                        • Modifier{http://etl.sf.net/etl/grammar/0.2.1}:
                          • value: composite
                      • name: NewOp
                      • 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: ej
                                  • name: NewOp
                              • syntax:
                                • Sequence{http://etl.sf.net/etl/grammar/0.2.1}:
                                  • 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: new
                                            • Let{http://etl.sf.net/etl/grammar/0.2.1}:
                                              • name: classifier
                                              • operator: =
                                              • expression:
                                                • ExpressionRef{http://etl.sf.net/etl/grammar/0.2.1}:
                                                  • context: TypeExpressions
                                                  • precedence: 100
                                            • 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: arrayConstructor
                                                          • operator: =
                                                          • expression:
                                                            • Sequence{http://etl.sf.net/etl/grammar/0.2.1}:
                                                              • syntax:
                                                                • KeywordStatement{http://etl.sf.net/etl/grammar/0.2.1}:
                                                                  • text: with
                                                                • ExpressionStatement{http://etl.sf.net/etl/grammar/0.2.1}:
                                                                  • syntax:
                                                                    • RefOp{http://etl.sf.net/etl/grammar/0.2.1}:
                                                                      • name: ArrayConstructorFragment
                                                  • options:
                                                    • Sequence{http://etl.sf.net/etl/grammar/0.2.1}:
                                                      • syntax:
                                                        • Let{http://etl.sf.net/etl/grammar/0.2.1}:
                                                          • name: args
                                                          • 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:
                                                                                    • ExpressionRef{http://etl.sf.net/etl/grammar/0.2.1}:
                                                                  • KeywordStatement{http://etl.sf.net/etl/grammar/0.2.1}:
                                                                    • text: )
                                                          • Let{http://etl.sf.net/etl/grammar/0.2.1}:
                                                            • name: classBody
                                                            • operator: =
                                                            • expression:
                                                              • OptionalOp{http://etl.sf.net/etl/grammar/0.2.1}:
                                                                • syntax:
                                                                  • RefOp{http://etl.sf.net/etl/grammar/0.2.1}:
                                                                    • name: ClassBlockDef
                      • OperatorDefinition{http://etl.sf.net/etl/grammar/0.2.1}:
                        • isComposite:
                          • Modifier{http://etl.sf.net/etl/grammar/0.2.1}:
                            • value: composite
                        • name: IdentityOp
                        • 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: ej
                                    • name: IdentityOp
                                • syntax:
                                  • Sequence{http://etl.sf.net/etl/grammar/0.2.1}:
                                    • 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: value
                                                • operator: =
                                                • expression:
                                                  • ExpressionRef{http://etl.sf.net/etl/grammar/0.2.1}:
                                                • KeywordStatement{http://etl.sf.net/etl/grammar/0.2.1}:
                                                  • text: )
                        • OperatorDefinition{http://etl.sf.net/etl/grammar/0.2.1}:
                          • isComposite:
                            • Modifier{http://etl.sf.net/etl/grammar/0.2.1}:
                              • value: composite
                          • name: ApplyRound
                          • associativity: yf
                          • precedence: 100
                          • 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: ej
                                      • name: ApplyRoundOp
                                  • syntax:
                                    • Sequence{http://etl.sf.net/etl/grammar/0.2.1}:
                                      • syntax:
                                        • Let{http://etl.sf.net/etl/grammar/0.2.1}:
                                          • name: functor
                                          • 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: args
                                          • 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:
                                                                    • ExpressionRef{http://etl.sf.net/etl/grammar/0.2.1}:
                                                  • KeywordStatement{http://etl.sf.net/etl/grammar/0.2.1}:
                                                    • text: )
                          • OperatorDefinition{http://etl.sf.net/etl/grammar/0.2.1}:
                            • documentation:
                              • DocumentationLine{http://etl.sf.net/etl/grammar/0.2.1}:
                                • text: /// Note it is possible to enforce more constraints by
                              • DocumentationLine{http://etl.sf.net/etl/grammar/0.2.1}:
                                • text: /// using composite operator.
                            • name: CastOp
                            • associativity: xfx
                            • precedence: 300
                            • text: as
                            • 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: ej
                                        • name: CastOp
                                    • syntax:
                                      • Sequence{http://etl.sf.net/etl/grammar/0.2.1}:
                                        • syntax:
                                          • Let{http://etl.sf.net/etl/grammar/0.2.1}:
                                            • name: value
                                            • 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: classifier
                                            • operator: =
                                            • expression:
                                              • OperandOp{http://etl.sf.net/etl/grammar/0.2.1}:
                                                • position: right
                          • OperatorDefinition{http://etl.sf.net/etl/grammar/0.2.1}:
                            • name: InstanceOfOp
                            • associativity: xfx
                            • precedence: 700
                            • text: instanceof
                            • 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: ej
                                        • name: InstanceOfOp
                                    • syntax:
                                      • Sequence{http://etl.sf.net/etl/grammar/0.2.1}:
                                        • syntax:
                                          • Let{http://etl.sf.net/etl/grammar/0.2.1}:
                                            • name: value
                                            • 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: classifier
                                            • operator: =
                                            • expression:
                                              • OperandOp{http://etl.sf.net/etl/grammar/0.2.1}:
                                                • position: right
                          • OperatorDefinition{http://etl.sf.net/etl/grammar/0.2.1}:
                            • name: AssignmentOp
                            • associativity: xfy
                            • precedence: 1500
                            • text: =
                            • 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: ej
                                        • name: AssignmentOp
                                    • syntax:
                                      • Sequence{http://etl.sf.net/etl/grammar/0.2.1}:
                                        • syntax:
                                          • Let{http://etl.sf.net/etl/grammar/0.2.1}:
                                            • name: leftHandSide
                                            • 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: value
                                            • operator: =
                                            • expression:
                                              • OperandOp{http://etl.sf.net/etl/grammar/0.2.1}:
                                                • position: right
                          • OperatorDefinition{http://etl.sf.net/etl/grammar/0.2.1}:
                            • name: PlusAssignmentOp
                            • associativity: xfy
                            • precedence: 1500
                            • text: +=
                            • 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: ej
                                        • name: PlusAssignmentOp
                                    • syntax:
                                      • Sequence{http://etl.sf.net/etl/grammar/0.2.1}:
                                        • syntax:
                                          • Let{http://etl.sf.net/etl/grammar/0.2.1}:
                                            • name: leftHandSide
                                            • 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: value
                                            • operator: =
                                            • expression:
                                              • OperandOp{http://etl.sf.net/etl/grammar/0.2.1}:
                                                • position: right
                          • OperatorDefinition{http://etl.sf.net/etl/grammar/0.2.1}:
                            • name: MinusAssignmentOp
                            • associativity: xfy
                            • precedence: 1500
                            • text: -=
                            • 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: ej
                                        • name: MinusAssignmentOp
                                    • syntax:
                                      • Sequence{http://etl.sf.net/etl/grammar/0.2.1}:
                                        • syntax:
                                          • Let{http://etl.sf.net/etl/grammar/0.2.1}:
                                            • name: leftHandSide
                                            • 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: value
                                            • operator: =
                                            • expression:
                                              • OperandOp{http://etl.sf.net/etl/grammar/0.2.1}:
                                                • position: right
                          • OperatorDefinition{http://etl.sf.net/etl/grammar/0.2.1}:
                            • name: MultiplyAssignmentOp
                            • associativity: xfy
                            • precedence: 1500
                            • text: *=
                            • 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: ej
                                        • name: MultiplyAssignmentOp
                                    • syntax:
                                      • Sequence{http://etl.sf.net/etl/grammar/0.2.1}:
                                        • syntax:
                                          • Let{http://etl.sf.net/etl/grammar/0.2.1}:
                                            • name: leftHandSide
                                            • 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: value
                                            • operator: =
                                            • expression:
                                              • OperandOp{http://etl.sf.net/etl/grammar/0.2.1}:
                                                • position: right
                          • OperatorDefinition{http://etl.sf.net/etl/grammar/0.2.1}:
                            • name: DivideAssignmentOp
                            • associativity: xfy
                            • precedence: 1500
                            • text: /=
                            • 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: ej
                                        • name: DivideAssignmentOp
                                    • syntax:
                                      • Sequence{http://etl.sf.net/etl/grammar/0.2.1}:
                                        • syntax:
                                          • Let{http://etl.sf.net/etl/grammar/0.2.1}:
                                            • name: leftHandSide
                                            • 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: value
                                            • operator: =
                                            • expression:
                                              • OperandOp{http://etl.sf.net/etl/grammar/0.2.1}:
                                                • position: right
                          • OperatorDefinition{http://etl.sf.net/etl/grammar/0.2.1}:
                            • name: BitwiseAndAssignmentOp
                            • associativity: xfy
                            • precedence: 1500
                            • text: &=
                            • 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: ej
                                        • name: BitwiseAndAssignmentOp
                                    • syntax:
                                      • Sequence{http://etl.sf.net/etl/grammar/0.2.1}:
                                        • syntax:
                                          • Let{http://etl.sf.net/etl/grammar/0.2.1}:
                                            • name: leftHandSide
                                            • 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: value
                                            • operator: =
                                            • expression:
                                              • OperandOp{http://etl.sf.net/etl/grammar/0.2.1}:
                                                • position: right
                          • OperatorDefinition{http://etl.sf.net/etl/grammar/0.2.1}:
                            • name: BitwiseOrAssignmentOp
                            • associativity: xfy
                            • precedence: 1500
                            • text: |=
                            • 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: ej
                                        • name: BitwiseOrAssignmentOp
                                    • syntax:
                                      • Sequence{http://etl.sf.net/etl/grammar/0.2.1}:
                                        • syntax:
                                          • Let{http://etl.sf.net/etl/grammar/0.2.1}:
                                            • name: leftHandSide
                                            • 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: value
                                            • operator: =
                                            • expression:
                                              • OperandOp{http://etl.sf.net/etl/grammar/0.2.1}:
                                                • position: right
                          • OperatorDefinition{http://etl.sf.net/etl/grammar/0.2.1}:
                            • name: BitwiseXorAssignmentOp
                            • associativity: xfy
                            • precedence: 1500
                            • text: ^=
                            • 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: ej
                                        • name: BitwiseXorAssignmentOp
                                    • syntax:
                                      • Sequence{http://etl.sf.net/etl/grammar/0.2.1}:
                                        • syntax:
                                          • Let{http://etl.sf.net/etl/grammar/0.2.1}:
                                            • name: leftHandSide
                                            • 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: value
                                            • operator: =
                                            • expression:
                                              • OperandOp{http://etl.sf.net/etl/grammar/0.2.1}:
                                                • position: right
                          • OperatorDefinition{http://etl.sf.net/etl/grammar/0.2.1}:
                            • name: RemainderAssignmentOp
                            • associativity: xfy
                            • precedence: 1500
                            • text: %=
                            • 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: ej
                                        • name: RemainderAssignmentOp
                                    • syntax:
                                      • Sequence{http://etl.sf.net/etl/grammar/0.2.1}:
                                        • syntax:
                                          • Let{http://etl.sf.net/etl/grammar/0.2.1}:
                                            • name: leftHandSide
                                            • 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: value
                                            • operator: =
                                            • expression:
                                              • OperandOp{http://etl.sf.net/etl/grammar/0.2.1}:
                                                • position: right
                          • OperatorDefinition{http://etl.sf.net/etl/grammar/0.2.1}:
                            • name: LeftShiftAssignmentOp
                            • associativity: xfy
                            • precedence: 1500
                            • text: <<=
                            • 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: ej
                                        • name: LeftShiftAssignmentOp
                                    • syntax:
                                      • Sequence{http://etl.sf.net/etl/grammar/0.2.1}:
                                        • syntax:
                                          • Let{http://etl.sf.net/etl/grammar/0.2.1}:
                                            • name: leftHandSide
                                            • 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: value
                                            • operator: =
                                            • expression:
                                              • OperandOp{http://etl.sf.net/etl/grammar/0.2.1}:
                                                • position: right
                          • OperatorDefinition{http://etl.sf.net/etl/grammar/0.2.1}:
                            • name: RightShiftAssignmentOp
                            • associativity: xfy
                            • precedence: 1500
                            • text: >>=
                            • 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: ej
                                        • name: RightShiftAssignmentOp
                                    • syntax:
                                      • Sequence{http://etl.sf.net/etl/grammar/0.2.1}:
                                        • syntax:
                                          • Let{http://etl.sf.net/etl/grammar/0.2.1}:
                                            • name: leftHandSide
                                            • 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: value
                                            • operator: =
                                            • expression:
                                              • OperandOp{http://etl.sf.net/etl/grammar/0.2.1}:
                                                • position: right
                          • OperatorDefinition{http://etl.sf.net/etl/grammar/0.2.1}:
                            • name: ZeroExtensionRightShiftAssignmentOp
                            • associativity: xfy
                            • precedence: 1500
                            • text: >>>=
                            • 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: ej
                                        • name: ZeroExtensionRightShiftAssignmentOp
                                    • syntax:
                                      • Sequence{http://etl.sf.net/etl/grammar/0.2.1}:
                                        • syntax:
                                          • Let{http://etl.sf.net/etl/grammar/0.2.1}:
                                            • name: leftHandSide
                                            • 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: value
                                            • operator: =
                                            • expression:
                                              • OperandOp{http://etl.sf.net/etl/grammar/0.2.1}:
                                                • position: right
                          • OperatorDefinition{http://etl.sf.net/etl/grammar/0.2.1}:
                            • name: PrefixIncrementOp
                            • associativity: fy
                            • precedence: 200
                            • text: ++
                            • 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: ej
                                        • name: PrefixIncrementOp
                                    • syntax:
                                      • Sequence{http://etl.sf.net/etl/grammar/0.2.1}:
                                        • syntax:
                                          • Let{http://etl.sf.net/etl/grammar/0.2.1}:
                                            • name: value
                                            • operator: =
                                            • expression:
                                              • OperandOp{http://etl.sf.net/etl/grammar/0.2.1}:
                                                • position: right
                          • OperatorDefinition{http://etl.sf.net/etl/grammar/0.2.1}:
                            • name: PostfixIncrementOp
                            • associativity: yf
                            • precedence: 300
                            • text: ++
                            • 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: ej
                                        • name: PostfixIncrementOp
                                    • syntax:
                                      • Sequence{http://etl.sf.net/etl/grammar/0.2.1}:
                                        • syntax:
                                          • Let{http://etl.sf.net/etl/grammar/0.2.1}:
                                            • name: value
                                            • operator: =
                                            • expression:
                                              • OperandOp{http://etl.sf.net/etl/grammar/0.2.1}:
                                                • position: left
                          • OperatorDefinition{http://etl.sf.net/etl/grammar/0.2.1}:
                            • name: PrefixDecrementOp
                            • associativity: fy
                            • precedence: 200
                            • text: --
                            • 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: ej
                                        • name: PrefixDecrementOp
                                    • syntax:
                                      • Sequence{http://etl.sf.net/etl/grammar/0.2.1}:
                                        • syntax:
                                          • Let{http://etl.sf.net/etl/grammar/0.2.1}:
                                            • name: value
                                            • operator: =
                                            • expression:
                                              • OperandOp{http://etl.sf.net/etl/grammar/0.2.1}:
                                                • position: right
                          • OperatorDefinition{http://etl.sf.net/etl/grammar/0.2.1}:
                            • name: PostfixDecrementOp
                            • associativity: yf
                            • precedence: 300
                            • text: --
                            • 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: ej
                                        • name: PostfixDecrementOp
                                    • syntax:
                                      • Sequence{http://etl.sf.net/etl/grammar/0.2.1}:
                                        • syntax:
                                          • Let{http://etl.sf.net/etl/grammar/0.2.1}:
                                            • name: value
                                            • operator: =
                                            • expression:
                                              • OperandOp{http://etl.sf.net/etl/grammar/0.2.1}:
                                                • position: left
                      • Context{http://etl.sf.net/etl/grammar/0.2.1}:
                        • abstractModifier:
                          • Modifier{http://etl.sf.net/etl/grammar/0.2.1}:
                            • value: abstract
                        • name: MethodContentCommons
                        • content:
                          • ContextInclude{http://etl.sf.net/etl/grammar/0.2.1}:
                            • contextName: BaseStatements
                          • ContextInclude{http://etl.sf.net/etl/grammar/0.2.1}:
                            • contextName: CommonControlFlow_Commons
                          • Def{http://etl.sf.net/etl/grammar/0.2.1}:
                            • documentation:
                              • DocumentationLine{http://etl.sf.net/etl/grammar/0.2.1}:
                                • text: /// Redefine generic expression from common control flow
                            • name: CommonControlFlow_GenericExpression
                            • syntax:
                              • ExpressionStatement{http://etl.sf.net/etl/grammar/0.2.1}:
                                • syntax:
                                  • ExpressionRef{http://etl.sf.net/etl/grammar/0.2.1}:
                                    • context: Expressions
                      • Context{http://etl.sf.net/etl/grammar/0.2.1}:
                        • name: MethodContent
                        • content:
                          • ContextInclude{http://etl.sf.net/etl/grammar/0.2.1}:
                            • contextName: InnerClassifiers
                            • wrappers:
                              • Wrapper{http://etl.sf.net/etl/grammar/0.2.1}:
                                • object:
                                  • ObjectName{http://etl.sf.net/etl/grammar/0.2.1}:
                                    • prefix: ej
                                    • name: MethodClassifier
                                • property: classifier
                          • ContextInclude{http://etl.sf.net/etl/grammar/0.2.1}:
                            • contextName: MethodContentCommons
                          • ContextInclude{http://etl.sf.net/etl/grammar/0.2.1}:
                            • contextName: CommonControlFlow
                          • ContextImport{http://etl.sf.net/etl/grammar/0.2.1}:
                            • localName: CommonControlFlow_SwitchContent
                            • contextName: MethodContent_SwitchContent
                          • Def{http://etl.sf.net/etl/grammar/0.2.1}:
                            • documentation:
                              • DocumentationLine{http://etl.sf.net/etl/grammar/0.2.1}:
                                • text: /// Redefine fragment to refer to itself
                            • name: MethodBlockFragment
                            • 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: ej
                                        • name: MethodBlock
                                    • syntax:
                                      • Sequence{http://etl.sf.net/etl/grammar/0.2.1}:
                                        • syntax:
                                          • Let{http://etl.sf.net/etl/grammar/0.2.1}:
                                            • name: content
                                            • operator: +=
                                            • expression:
                                              • BlockRef{http://etl.sf.net/etl/grammar/0.2.1}:
                            • Def{http://etl.sf.net/etl/grammar/0.2.1}:
                              • documentation:
                                • DocumentationLine{http://etl.sf.net/etl/grammar/0.2.1}:
                                  • text: /// Redefine exception pattern from common control flow
                              • name: CommonControlFlow_ParameterPattern
                              • syntax:
                                • ExpressionStatement{http://etl.sf.net/etl/grammar/0.2.1}:
                                  • syntax:
                                    • RefOp{http://etl.sf.net/etl/grammar/0.2.1}:
                                      • name: ParameterFragment
                            • Statement{http://etl.sf.net/etl/grammar/0.2.1}:
                              • documentation:
                                • DocumentationLine{http://etl.sf.net/etl/grammar/0.2.1}:
                                  • text: /// This a blank statement
                              • name: EmptyStatement
                              • 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: ej
                                          • name: EmptyStatement
                                      • syntax:
                                        • Sequence{http://etl.sf.net/etl/grammar/0.2.1}:
                              • Statement{http://etl.sf.net/etl/grammar/0.2.1}:
                                • name: ForStatement
                                • 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: ej
                                            • name: ForStatement
                                        • syntax:
                                          • Sequence{http://etl.sf.net/etl/grammar/0.2.1}:
                                            • 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: for
                                                      • 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: CommonControlFlow_LabelFragment
                                                      • 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:
                                                                  • 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: initVariableDeclaration
                                                                            • operator: =
                                                                            • expression:
                                                                              • ObjectOp{http://etl.sf.net/etl/grammar/0.2.1}:
                                                                                • name:
                                                                                  • ObjectName{http://etl.sf.net/etl/grammar/0.2.1}:
                                                                                    • prefix: ej
                                                                                    • name: LocalVarStatement
                                                                                • 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: LocalVariablesStatementFragment
                                                                    • options:
                                                                      • 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: initExpressions
                                                                                • operator: +=
                                                                                • expression:
                                                                                  • ExpressionRef{http://etl.sf.net/etl/grammar/0.2.1}:
                                                                                    • context: Expressions
                                                                        • options:
                                                                          • Sequence{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: condition
                                                                          • operator: =
                                                                          • expression:
                                                                            • OptionalOp{http://etl.sf.net/etl/grammar/0.2.1}:
                                                                              • syntax:
                                                                                • ExpressionRef{http://etl.sf.net/etl/grammar/0.2.1}:
                                                                                  • context: Expressions
                                                                • 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: updateExpressions
                                                                          • operator: +=
                                                                          • expression:
                                                                            • 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:
                                                                                            • ExpressionRef{http://etl.sf.net/etl/grammar/0.2.1}:
                                                                                              • context: Expressions
                                                                • 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: CommonControlFlow_Body
                                • Statement{http://etl.sf.net/etl/grammar/0.2.1}:
                                  • name: LocalVarStatement
                                  • 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: ej
                                              • name: LocalVarStatement
                                          • 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: LocalVariablesStatementFragment
                                • Def{http://etl.sf.net/etl/grammar/0.2.1}:
                                  • name: LocalVariablesStatementFragment
                                  • 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}:
                                                  • wrapper:
                                                    • Wrapper{http://etl.sf.net/etl/grammar/0.2.1}:
                                                      • object:
                                                        • ObjectName{http://etl.sf.net/etl/grammar/0.2.1}:
                                                          • prefix: ej
                                                          • name: Modifier
                                                      • property: value
                                                  • modifiers:
                                                    • Let{http://etl.sf.net/etl/grammar/0.2.1}:
                                                      • name: finalModifier
                                                      • operator: =
                                                      • expression:
                                                        • ModifierOp{http://etl.sf.net/etl/grammar/0.2.1}:
                                                          • value: final
                                            • ExpressionStatement{http://etl.sf.net/etl/grammar/0.2.1}:
                                              • syntax:
                                                • RefOp{http://etl.sf.net/etl/grammar/0.2.1}:
                                                  • name: VariableSetFragment
                                • Statement{http://etl.sf.net/etl/grammar/0.2.1}:
                                  • name: SynchronizedStatement
                                  • 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: ej
                                              • name: SynchronizedStatement
                                          • syntax:
                                            • Sequence{http://etl.sf.net/etl/grammar/0.2.1}:
                                              • 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: synchronized
                                                        • 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:
                                                                    • ExpressionRef{http://etl.sf.net/etl/grammar/0.2.1}:
                                                                      • context: Expressions
                                                                • 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: CommonControlFlow_Body
                                • Statement{http://etl.sf.net/etl/grammar/0.2.1}:
                                  • name: AssertStatement
                                  • 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: ej
                                              • name: AssertStatement
                                          • syntax:
                                            • Sequence{http://etl.sf.net/etl/grammar/0.2.1}:
                                              • 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: assert
                                                        • Let{http://etl.sf.net/etl/grammar/0.2.1}:
                                                          • name: test
                                                          • operator: =
                                                          • expression:
                                                            • ExpressionRef{http://etl.sf.net/etl/grammar/0.2.1}:
                                                              • context: Expressions
                                                • 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: message
                                                              • operator: =
                                                              • expression:
                                                                • ExpressionRef{http://etl.sf.net/etl/grammar/0.2.1}:
                                                                  • context: Expressions
                            • Context{http://etl.sf.net/etl/grammar/0.2.1}:
                              • name: MethodContent_SwitchContent
                              • content:
                                • ContextInclude{http://etl.sf.net/etl/grammar/0.2.1}:
                                  • contextName: MethodContentCommons
                                • ContextInclude{http://etl.sf.net/etl/grammar/0.2.1}:
                                  • contextName: CommonControlFlow_SwitchContent
                                • ContextImport{http://etl.sf.net/etl/grammar/0.2.1}:
                                  • localName: CommonControlFlow
                                  • contextName: MethodContent
                            • Context{http://etl.sf.net/etl/grammar/0.2.1}:
                              • abstractModifier:
                                • Modifier{http://etl.sf.net/etl/grammar/0.2.1}:
                                  • value: abstract
                              • name: ClassifierContent
                              • content:
                                • ContextInclude{http://etl.sf.net/etl/grammar/0.2.1}:
                                  • contextName: BaseStatements
                                • ContextImport{http://etl.sf.net/etl/grammar/0.2.1}:
                                  • localName: NameExpressions
                                  • contextName: NameExpressions
                                • ContextInclude{http://etl.sf.net/etl/grammar/0.2.1}:
                                  • contextName: InnerClassifiers
                                  • wrappers:
                                    • Wrapper{http://etl.sf.net/etl/grammar/0.2.1}:
                                      • object:
                                        • ObjectName{http://etl.sf.net/etl/grammar/0.2.1}:
                                          • prefix: ej
                                          • name: InnerClassifier
                                      • property: classifier
                                • Def{http://etl.sf.net/etl/grammar/0.2.1}:
                                  • name: MethodSignatureFragment
                                  • syntax:
                                    • Let{http://etl.sf.net/etl/grammar/0.2.1}:
                                      • name: returnType
                                      • 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:
                                        • RefOp{http://etl.sf.net/etl/grammar/0.2.1}:
                                          • name: ConstructorSignatureFragment
                                • Def{http://etl.sf.net/etl/grammar/0.2.1}:
                                  • name: ConstructorSignatureFragment
                                  • 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: NameFragment
                                    • 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:
                                                            • Let{http://etl.sf.net/etl/grammar/0.2.1}:
                                                              • name: parameters
                                                              • operator: +=
                                                              • expression:
                                                                • RefOp{http://etl.sf.net/etl/grammar/0.2.1}:
                                                                  • name: ParameterFragment
                                            • 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:
                                            • Sequence{http://etl.sf.net/etl/grammar/0.2.1}:
                                              • syntax:
                                                • KeywordStatement{http://etl.sf.net/etl/grammar/0.2.1}:
                                                  • text: throws
                                                • 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:
                                                            • Let{http://etl.sf.net/etl/grammar/0.2.1}:
                                                              • name: exceptions
                                                              • operator: +=
                                                              • expression:
                                                                • ExpressionRef{http://etl.sf.net/etl/grammar/0.2.1}:
                                                                  • context: TypeExpressions
                            • Context{http://etl.sf.net/etl/grammar/0.2.1}:
                              • name: ClassContents
                              • content:
                                • ContextInclude{http://etl.sf.net/etl/grammar/0.2.1}:
                                  • contextName: ClassifierContent
                                • Statement{http://etl.sf.net/etl/grammar/0.2.1}:
                                  • name: MethodStatement
                                  • 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: ej
                                              • name: MethodStatement
                                          • syntax:
                                            • Sequence{http://etl.sf.net/etl/grammar/0.2.1}:
                                              • 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
                                                        • 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: TemplateParameters
                                                        • ExpressionStatement{http://etl.sf.net/etl/grammar/0.2.1}:
                                                          • syntax:
                                                            • ModifiersOp{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: ej
                                                                      • name: Modifier
                                                                  • property: value
                                                              • modifiers:
                                                                • Let{http://etl.sf.net/etl/grammar/0.2.1}:
                                                                  • name: visibilityModifier
                                                                  • operator: =
                                                                  • expression:
                                                                    • ModifierOp{http://etl.sf.net/etl/grammar/0.2.1}:
                                                                      • value: public
                                                                • Let{http://etl.sf.net/etl/grammar/0.2.1}:
                                                                  • name: visibilityModifier
                                                                  • operator: =
                                                                  • expression:
                                                                    • ModifierOp{http://etl.sf.net/etl/grammar/0.2.1}:
                                                                      • value: protected
                                                                • Let{http://etl.sf.net/etl/grammar/0.2.1}:
                                                                  • name: visibilityModifier
                                                                  • operator: =
                                                                  • expression:
                                                                    • ModifierOp{http://etl.sf.net/etl/grammar/0.2.1}:
                                                                      • value: private
                                                                • Let{http://etl.sf.net/etl/grammar/0.2.1}:
                                                                  • name: staticModifier
                                                                  • operator: =
                                                                  • expression:
                                                                    • ModifierOp{http://etl.sf.net/etl/grammar/0.2.1}:
                                                                      • value: static
                                                                • Let{http://etl.sf.net/etl/grammar/0.2.1}:
                                                                  • name: strictfpModifier
                                                                  • operator: =
                                                                  • expression:
                                                                    • ModifierOp{http://etl.sf.net/etl/grammar/0.2.1}:
                                                                      • value: strictfp
                                                                • Let{http://etl.sf.net/etl/grammar/0.2.1}:
                                                                  • name: abstractModifier
                                                                  • 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: finalModifier
                                                                  • operator: =
                                                                  • expression:
                                                                    • ModifierOp{http://etl.sf.net/etl/grammar/0.2.1}:
                                                                      • value: final
                                                                • Let{http://etl.sf.net/etl/grammar/0.2.1}:
                                                                  • name: synchronizedModifier
                                                                  • operator: =
                                                                  • expression:
                                                                    • ModifierOp{http://etl.sf.net/etl/grammar/0.2.1}:
                                                                      • value: synchronized
                                                        • ExpressionStatement{http://etl.sf.net/etl/grammar/0.2.1}:
                                                          • syntax:
                                                            • RefOp{http://etl.sf.net/etl/grammar/0.2.1}:
                                                              • name: MethodSignatureFragment
                                                • Let{http://etl.sf.net/etl/grammar/0.2.1}:
                                                  • name: body
                                                  • operator: =
                                                  • expression:
                                                    • OptionalOp{http://etl.sf.net/etl/grammar/0.2.1}:
                                                      • syntax:
                                                        • RefOp{http://etl.sf.net/etl/grammar/0.2.1}:
                                                          • name: MethodBlockFragment
                                • Statement{http://etl.sf.net/etl/grammar/0.2.1}:
                                  • name: FieldStatement
                                  • 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: ej
                                              • name: FieldStatement
                                          • syntax:
                                            • Sequence{http://etl.sf.net/etl/grammar/0.2.1}:
                                              • 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}:
                                                              • wrapper:
                                                                • Wrapper{http://etl.sf.net/etl/grammar/0.2.1}:
                                                                  • object:
                                                                    • ObjectName{http://etl.sf.net/etl/grammar/0.2.1}:
                                                                      • prefix: ej
                                                                      • name: Modifier
                                                                  • property: value
                                                              • modifiers:
                                                                • Let{http://etl.sf.net/etl/grammar/0.2.1}:
                                                                  • name: visibilityModifier
                                                                  • operator: =
                                                                  • expression:
                                                                    • ModifierOp{http://etl.sf.net/etl/grammar/0.2.1}:
                                                                      • value: public
                                                                • Let{http://etl.sf.net/etl/grammar/0.2.1}:
                                                                  • name: visibilityModifier
                                                                  • operator: =
                                                                  • expression:
                                                                    • ModifierOp{http://etl.sf.net/etl/grammar/0.2.1}:
                                                                      • value: protected
                                                                • Let{http://etl.sf.net/etl/grammar/0.2.1}:
                                                                  • name: visibilityModifier
                                                                  • operator: =
                                                                  • expression:
                                                                    • ModifierOp{http://etl.sf.net/etl/grammar/0.2.1}:
                                                                      • value: private
                                                                • Let{http://etl.sf.net/etl/grammar/0.2.1}:
                                                                  • name: staticModifier
                                                                  • operator: =
                                                                  • expression:
                                                                    • ModifierOp{http://etl.sf.net/etl/grammar/0.2.1}:
                                                                      • value: static
                                                                • Let{http://etl.sf.net/etl/grammar/0.2.1}:
                                                                  • name: abstractModifier
                                                                  • 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: finalModifier
                                                                  • operator: =
                                                                  • expression:
                                                                    • ModifierOp{http://etl.sf.net/etl/grammar/0.2.1}:
                                                                      • value: final
                                                                • Let{http://etl.sf.net/etl/grammar/0.2.1}:
                                                                  • name: transientModifier
                                                                  • operator: =
                                                                  • expression:
                                                                    • ModifierOp{http://etl.sf.net/etl/grammar/0.2.1}:
                                                                      • value: transient
                                                                • Let{http://etl.sf.net/etl/grammar/0.2.1}:
                                                                  • name: volatileModifier
                                                                  • operator: =
                                                                  • expression:
                                                                    • ModifierOp{http://etl.sf.net/etl/grammar/0.2.1}:
                                                                      • value: volatile
                                                        • ExpressionStatement{http://etl.sf.net/etl/grammar/0.2.1}:
                                                          • syntax:
                                                            • RefOp{http://etl.sf.net/etl/grammar/0.2.1}:
                                                              • name: VariableSetFragment
                                • Statement{http://etl.sf.net/etl/grammar/0.2.1}:
                                  • name: InitStatement
                                  • 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: ej
                                              • name: InitStatement
                                          • syntax:
                                            • Sequence{http://etl.sf.net/etl/grammar/0.2.1}:
                                              • syntax:
                                                • Let{http://etl.sf.net/etl/grammar/0.2.1}:
                                                  • name: body
                                                  • operator: =
                                                  • expression:
                                                    • RefOp{http://etl.sf.net/etl/grammar/0.2.1}:
                                                      • name: MethodBlockFragment
                                • Statement{http://etl.sf.net/etl/grammar/0.2.1}:
                                  • name: StaticInitStatement
                                  • 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: ej
                                              • name: StaticInitStatement
                                          • syntax:
                                            • Sequence{http://etl.sf.net/etl/grammar/0.2.1}:
                                              • 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: static
                                                        • Let{http://etl.sf.net/etl/grammar/0.2.1}:
                                                          • name: body
                                                          • operator: =
                                                          • expression:
                                                            • RefOp{http://etl.sf.net/etl/grammar/0.2.1}:
                                                              • name: MethodBlockFragment
                                • Statement{http://etl.sf.net/etl/grammar/0.2.1}:
                                  • name: ConstructorStatement
                                  • 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: ej
                                              • name: ConstructorStatement
                                          • syntax:
                                            • Sequence{http://etl.sf.net/etl/grammar/0.2.1}:
                                              • 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: maker
                                                        • ExpressionStatement{http://etl.sf.net/etl/grammar/0.2.1}:
                                                          • syntax:
                                                            • ModifiersOp{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: ej
                                                                      • name: Modifier
                                                                  • property: value
                                                              • modifiers:
                                                                • Let{http://etl.sf.net/etl/grammar/0.2.1}:
                                                                  • name: visibilityModifier
                                                                  • operator: =
                                                                  • expression:
                                                                    • ModifierOp{http://etl.sf.net/etl/grammar/0.2.1}:
                                                                      • value: public
                                                                • Let{http://etl.sf.net/etl/grammar/0.2.1}:
                                                                  • name: visibilityModifier
                                                                  • operator: =
                                                                  • expression:
                                                                    • ModifierOp{http://etl.sf.net/etl/grammar/0.2.1}:
                                                                      • value: protected
                                                                • Let{http://etl.sf.net/etl/grammar/0.2.1}:
                                                                  • name: visibilityModifier
                                                                  • operator: =
                                                                  • expression:
                                                                    • ModifierOp{http://etl.sf.net/etl/grammar/0.2.1}:
                                                                      • value: private
                                                        • ExpressionStatement{http://etl.sf.net/etl/grammar/0.2.1}:
                                                          • syntax:
                                                            • RefOp{http://etl.sf.net/etl/grammar/0.2.1}:
                                                              • name: ConstructorSignatureFragment
                                                • Let{http://etl.sf.net/etl/grammar/0.2.1}:
                                                  • name: body
                                                  • operator: =
                                                  • expression:
                                                    • RefOp{http://etl.sf.net/etl/grammar/0.2.1}:
                                                      • name: MethodBlockFragment
                            • Context{http://etl.sf.net/etl/grammar/0.2.1}:
                              • name: InterfaceContents
                              • content:
                                • ContextInclude{http://etl.sf.net/etl/grammar/0.2.1}:
                                  • contextName: ClassifierContent
                                • Statement{http://etl.sf.net/etl/grammar/0.2.1}:
                                  • name: MethodStatement
                                  • 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: ej
                                              • name: MethodStatement
                                          • syntax:
                                            • Sequence{http://etl.sf.net/etl/grammar/0.2.1}:
                                              • 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
                                                        • ExpressionStatement{http://etl.sf.net/etl/grammar/0.2.1}:
                                                          • syntax:
                                                            • ModifiersOp{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: ej
                                                                      • name: Modifier
                                                                  • property: value
                                                              • modifiers:
                                                                • Let{http://etl.sf.net/etl/grammar/0.2.1}:
                                                                  • name: visibilityModifier
                                                                  • operator: =
                                                                  • expression:
                                                                    • ModifierOp{http://etl.sf.net/etl/grammar/0.2.1}:
                                                                      • value: public
                                                                • Let{http://etl.sf.net/etl/grammar/0.2.1}:
                                                                  • name: abstractModifier
                                                                  • operator: =
                                                                  • expression:
                                                                    • ModifierOp{http://etl.sf.net/etl/grammar/0.2.1}:
                                                                      • value: abstract
                                                        • ExpressionStatement{http://etl.sf.net/etl/grammar/0.2.1}:
                                                          • syntax:
                                                            • RefOp{http://etl.sf.net/etl/grammar/0.2.1}:
                                                              • name: MethodSignatureFragment
                                • Statement{http://etl.sf.net/etl/grammar/0.2.1}:
                                  • name: FieldStatement
                                  • 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: ej
                                              • name: FieldStatement
                                          • syntax:
                                            • Sequence{http://etl.sf.net/etl/grammar/0.2.1}:
                                              • 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}:
                                                              • wrapper:
                                                                • Wrapper{http://etl.sf.net/etl/grammar/0.2.1}:
                                                                  • object:
                                                                    • ObjectName{http://etl.sf.net/etl/grammar/0.2.1}:
                                                                      • prefix: ej
                                                                      • name: Modifier
                                                                  • property: value
                                                              • modifiers:
                                                                • Let{http://etl.sf.net/etl/grammar/0.2.1}:
                                                                  • name: visibilityModifier
                                                                  • operator: =
                                                                  • expression:
                                                                    • ModifierOp{http://etl.sf.net/etl/grammar/0.2.1}:
                                                                      • value: public
                                                                • Let{http://etl.sf.net/etl/grammar/0.2.1}:
                                                                  • name: staticModifier
                                                                  • operator: =
                                                                  • expression:
                                                                    • ModifierOp{http://etl.sf.net/etl/grammar/0.2.1}:
                                                                      • value: static
                                                                • Let{http://etl.sf.net/etl/grammar/0.2.1}:
                                                                  • name: finalModifier
                                                                  • operator: =
                                                                  • expression:
                                                                    • ModifierOp{http://etl.sf.net/etl/grammar/0.2.1}:
                                                                      • value: final
                                                        • ExpressionStatement{http://etl.sf.net/etl/grammar/0.2.1}:
                                                          • syntax:
                                                            • RefOp{http://etl.sf.net/etl/grammar/0.2.1}:
                                                              • name: VariableSetFragment
                            • Context{http://etl.sf.net/etl/grammar/0.2.1}:
                              • name: AttributeContents
                              • content:
                                • ContextInclude{http://etl.sf.net/etl/grammar/0.2.1}:
                                  • contextName: BaseStatements
                                • Statement{http://etl.sf.net/etl/grammar/0.2.1}:
                                  • name: FieldStatement
                                  • 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: ej
                                              • name: FieldStatement
                                          • syntax:
                                            • Sequence{http://etl.sf.net/etl/grammar/0.2.1}:
                                              • 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:
                                                            • RefOp{http://etl.sf.net/etl/grammar/0.2.1}:
                                                              • name: VariableSetFragment
                            • Context{http://etl.sf.net/etl/grammar/0.2.1}:
                              • name: EnumerationContents
                              • content:
                                • ContextInclude{http://etl.sf.net/etl/grammar/0.2.1}:
                                  • contextName: ClassContents
                                • Statement{http://etl.sf.net/etl/grammar/0.2.1}:
                                  • name: LiteralStatement
                                  • 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: ej
                                              • name: EnumLiteral
                                          • syntax:
                                            • Sequence{http://etl.sf.net/etl/grammar/0.2.1}:
                                              • 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:
                                                            • ExpressionRef{http://etl.sf.net/etl/grammar/0.2.1}:
                                                              • context: NameExpressions
                                                        • 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: args
                                                                      • 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: Expressions
                                                                    • 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:
                                                                • Sequence{http://etl.sf.net/etl/grammar/0.2.1}:
                                                                  • syntax:
                                                                    • Let{http://etl.sf.net/etl/grammar/0.2.1}:
                                                                      • name: body
                                                                      • operator: =
                                                                      • expression:
                                                                        • RefOp{http://etl.sf.net/etl/grammar/0.2.1}:
                                                                          • name: ClassBlockDef
                            • Context{http://etl.sf.net/etl/grammar/0.2.1}:
                              • abstractModifier:
                                • Modifier{http://etl.sf.net/etl/grammar/0.2.1}:
                                  • value: abstract
                              • name: InnerClassifiers
                              • content:
                                • ContextInclude{http://etl.sf.net/etl/grammar/0.2.1}:
                                  • contextName: BaseStatements
                                • ContextImport{http://etl.sf.net/etl/grammar/0.2.1}:
                                  • localName: EnumerationContents
                                  • contextName: EnumerationContents
                                • ContextImport{http://etl.sf.net/etl/grammar/0.2.1}:
                                  • localName: ClassContents
                                  • contextName: ClassContents
                                • ContextImport{http://etl.sf.net/etl/grammar/0.2.1}:
                                  • localName: InterfaceContents
                                  • contextName: InterfaceContents
                                • Def{http://etl.sf.net/etl/grammar/0.2.1}:
                                  • name: ClassModifiersDef
                                  • syntax:
                                    • ExpressionStatement{http://etl.sf.net/etl/grammar/0.2.1}:
                                      • syntax:
                                        • ModifiersOp{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: ej
                                                  • name: Modifier
                                              • property: value
                                          • modifiers:
                                            • Let{http://etl.sf.net/etl/grammar/0.2.1}:
                                              • name: visibilityModifier
                                              • operator: =
                                              • expression:
                                                • ModifierOp{http://etl.sf.net/etl/grammar/0.2.1}:
                                                  • value: public
                                            • Let{http://etl.sf.net/etl/grammar/0.2.1}:
                                              • name: visibilityModifier
                                              • operator: =
                                              • expression:
                                                • ModifierOp{http://etl.sf.net/etl/grammar/0.2.1}:
                                                  • value: protected
                                            • Let{http://etl.sf.net/etl/grammar/0.2.1}:
                                              • name: visibilityModifier
                                              • operator: =
                                              • expression:
                                                • ModifierOp{http://etl.sf.net/etl/grammar/0.2.1}:
                                                  • value: private
                                            • Let{http://etl.sf.net/etl/grammar/0.2.1}:
                                              • name: staticModifier
                                              • operator: =
                                              • expression:
                                                • ModifierOp{http://etl.sf.net/etl/grammar/0.2.1}:
                                                  • value: static
                                            • Let{http://etl.sf.net/etl/grammar/0.2.1}:
                                              • name: strictfpModifier
                                              • operator: =
                                              • expression:
                                                • ModifierOp{http://etl.sf.net/etl/grammar/0.2.1}:
                                                  • value: strictfp
                                            • Let{http://etl.sf.net/etl/grammar/0.2.1}:
                                              • name: abstractModifier
                                              • 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: finalModifier
                                              • operator: =
                                              • expression:
                                                • ModifierOp{http://etl.sf.net/etl/grammar/0.2.1}:
                                                  • value: final
                                            • Let{http://etl.sf.net/etl/grammar/0.2.1}:
                                              • name: synchronizedModifier
                                              • operator: =
                                              • expression:
                                                • ModifierOp{http://etl.sf.net/etl/grammar/0.2.1}:
                                                  • value: syncrhonized
                                • Statement{http://etl.sf.net/etl/grammar/0.2.1}:
                                  • name: ClassStatement
                                  • 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: ej
                                              • name: ClassStatement
                                          • syntax:
                                            • Sequence{http://etl.sf.net/etl/grammar/0.2.1}:
                                              • 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:
                                                            • RefOp{http://etl.sf.net/etl/grammar/0.2.1}:
                                                              • name: ClassModifiersDef
                                                        • 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: NameFragment
                                                        • 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: TemplateParameters
                                                • 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: extendedType
                                                              • 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: implements
                                                            • Let{http://etl.sf.net/etl/grammar/0.2.1}:
                                                              • name: implementedTypes
                                                              • 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
                                                • 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
                                • Statement{http://etl.sf.net/etl/grammar/0.2.1}:
                                  • name: InterfaceStatement
                                  • 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: ej
                                              • name: InterfaceStatement
                                          • syntax:
                                            • Sequence{http://etl.sf.net/etl/grammar/0.2.1}:
                                              • 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: interface
                                                        • ExpressionStatement{http://etl.sf.net/etl/grammar/0.2.1}:
                                                          • syntax:
                                                            • ModifiersOp{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: ej
                                                                      • name: Modifier
                                                                  • property: value
                                                              • modifiers:
                                                                • Let{http://etl.sf.net/etl/grammar/0.2.1}:
                                                                  • name: visibilityModifier
                                                                  • operator: =
                                                                  • expression:
                                                                    • ModifierOp{http://etl.sf.net/etl/grammar/0.2.1}:
                                                                      • value: public
                                                        • 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: NameFragment
                                                        • 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: TemplateParameters
                                                • 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: extendedTypes
                                                              • 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
                                                • 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: InterfaceContents
                                • Statement{http://etl.sf.net/etl/grammar/0.2.1}:
                                  • name: EnumStatement
                                  • 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: ej
                                              • name: EnumStatement
                                          • syntax:
                                            • Sequence{http://etl.sf.net/etl/grammar/0.2.1}:
                                              • 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: enum
                                                        • ExpressionStatement{http://etl.sf.net/etl/grammar/0.2.1}:
                                                          • syntax:
                                                            • RefOp{http://etl.sf.net/etl/grammar/0.2.1}:
                                                              • name: ClassModifiersDef
                                                        • 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: NameFragment
                                                • 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
                            • Context{http://etl.sf.net/etl/grammar/0.2.1}:
                              • name: AllClassifiers
                              • content:
                                • ContextInclude{http://etl.sf.net/etl/grammar/0.2.1}:
                                  • contextName: InnerClassifiers
                                • ContextImport{http://etl.sf.net/etl/grammar/0.2.1}:
                                  • localName: AttributeContents
                                  • contextName: AttributeContents
                                • Statement{http://etl.sf.net/etl/grammar/0.2.1}:
                                  • name: AttributeDefinition
                                  • 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: ej
                                              • name: AttributeDefinition
                                          • syntax:
                                            • Sequence{http://etl.sf.net/etl/grammar/0.2.1}:
                                              • 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: attribute
                                                        • ExpressionStatement{http://etl.sf.net/etl/grammar/0.2.1}:
                                                          • syntax:
                                                            • ModifiersOp{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: ej
                                                                      • name: Modifier
                                                                  • property: value
                                                              • modifiers:
                                                                • Let{http://etl.sf.net/etl/grammar/0.2.1}:
                                                                  • name: visibilityModifier
                                                                  • operator: =
                                                                  • expression:
                                                                    • ModifierOp{http://etl.sf.net/etl/grammar/0.2.1}:
                                                                      • value: public
                                                        • 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: NameFragment
                                                • 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: AttributeContents
                            • 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: AllClassifiers
                                  • wrappers:
                                    • Wrapper{http://etl.sf.net/etl/grammar/0.2.1}:
                                      • object:
                                        • ObjectName{http://etl.sf.net/etl/grammar/0.2.1}:
                                          • prefix: ej
                                          • name: TopLevelClassifier
                                      • property: classifier
                                • ContextImport{http://etl.sf.net/etl/grammar/0.2.1}:
                                  • localName: PackageNameExpressions
                                  • contextName: PackageNameExpressions
                                • Statement{http://etl.sf.net/etl/grammar/0.2.1}:
                                  • documentation:
                                    • DocumentationLine{http://etl.sf.net/etl/grammar/0.2.1}:
                                      • text: /// This is an package statement.
                                    • DocumentationLine{http://etl.sf.net/etl/grammar/0.2.1}:
                                      • text: /// <usage>
                                    • DocumentationLine{http://etl.sf.net/etl/grammar/0.2.1}:
                                      • text: /// package java.awt;
                                    • DocumentationLine{http://etl.sf.net/etl/grammar/0.2.1}:
                                      • text: /// </usage>
                                  • name: PackageStatement
                                  • 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: ej
                                              • name: PackageStatement
                                          • syntax:
                                            • Sequence{http://etl.sf.net/etl/grammar/0.2.1}:
                                              • 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:
                                                            • ExpressionRef{http://etl.sf.net/etl/grammar/0.2.1}:
                                                              • context: PackageNameExpressions
                                • Statement{http://etl.sf.net/etl/grammar/0.2.1}:
                                  • documentation:
                                    • DocumentationLine{http://etl.sf.net/etl/grammar/0.2.1}:
                                      • text: /// This is an import statement.
                                    • DocumentationLine{http://etl.sf.net/etl/grammar/0.2.1}:
                                      • text: /// <usage>
                                    • DocumentationLine{http://etl.sf.net/etl/grammar/0.2.1}:
                                      • text: /// import java.util.List;
                                    • DocumentationLine{http://etl.sf.net/etl/grammar/0.2.1}:
                                      • text: /// import all static java.lang.Math;
                                    • DocumentationLine{http://etl.sf.net/etl/grammar/0.2.1}:
                                      • text: /// import all java.rmi;
                                    • DocumentationLine{http://etl.sf.net/etl/grammar/0.2.1}:
                                      • text: /// </usage>
                                  • name: ImportStatement
                                  • 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: ej
                                              • name: ImportStatement
                                          • syntax:
                                            • Sequence{http://etl.sf.net/etl/grammar/0.2.1}:
                                              • 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
                                                        • ExpressionStatement{http://etl.sf.net/etl/grammar/0.2.1}:
                                                          • syntax:
                                                            • ModifiersOp{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: ej
                                                                      • name: Modifier
                                                                  • property: value
                                                              • modifiers:
                                                                • Let{http://etl.sf.net/etl/grammar/0.2.1}:
                                                                  • name: allModifier
                                                                  • operator: =
                                                                  • expression:
                                                                    • ModifierOp{http://etl.sf.net/etl/grammar/0.2.1}:
                                                                      • value: all
                                                                • Let{http://etl.sf.net/etl/grammar/0.2.1}:
                                                                  • name: staticModifier
                                                                  • operator: =
                                                                  • expression:
                                                                    • ModifierOp{http://etl.sf.net/etl/grammar/0.2.1}:
                                                                      • value: static
                                                        • Let{http://etl.sf.net/etl/grammar/0.2.1}:
                                                          • name: importedPackage
                                                          • operator: =
                                                          • expression:
                                                            • ExpressionRef{http://etl.sf.net/etl/grammar/0.2.1}:
                                                              • context: PackageNameExpressions
                             1: 
                             2: doctype public "-//IDN etl.sf.net//ETL//Grammar 0.2.1";
                             3: /// This is a grammar for EJ language. The language is targeted to cover
                             4: /// all features of Java language in the way that is similar to one used 
                             5: /// in Java.
                             6: /// 
                             7: /// Note that the goal of this sample was to get a sample that is as close
                             8: /// to Java as possible within ETL. However if the task is to get a good language 
                             9: /// for JVM, a better languages are possible. For example taking more functional
                            10: /// approach is possible allowing constructs like: 
                            11: /// "let a := {let b:= Math.sin(Math.PI/3); 2*b*(b+1);};" 
                            12: /// 
                            13: /// So do not use this source as a sample of the language design. It has 
                            14: /// known quality issues in this area.
                            15: grammar net.sf.etl.samples.ej.EJ {
                            16: 	include "CommonControlFlow.g.etl";
                            17: 	include "CommonOperators.g.etl";
                            18: 	namespace ej = "http://etl.sf.net/2006/samples/ej/0.1";
                            19: 	/// This context contains common definitions that are shared 
                            20: 	/// between statements and expressions. 
                            21: 	context abstract Base {
                            22: 		import Expressions = Expressions;
                            23: 		import TypeExpressions = TypeExpressions;
                            24: 		import ClassContents = ClassContents;
                            25: 		import MethodContent = MethodContent;
                            26: 		import NameExpressions = NameExpressions;
                            27: 		def NameFragment {
                            28: 			^ ej:Identifier {
                            29: 				{
                            30: 					@ value = identifier;
                            31: 				} | {
                            32: 					@ quotedValue = string(prefix=q|Q,quote = "'");
                            33: 				};
                            34: 			};
                            35: 		};
                            36: 		def AttributesDef {
                            37: 			@ attributeSets += {
                            38: 				^ ej:AttributeSet {
                            39: 					% @ {
                            40: 						% [{
                            41: 							@ attributes += list, {
                            42: 								expression(Expressions, precedence = 100);
                            43: 							};
                            44: 						} % ];
                            45: 					};
                            46: 				};
                            47: 			};
                            48: 		};
                            49: 		def TemplateBounds {
                            50: 			{
                            51: 				{
                            52: 					% super {
                            53: 						@ superToTypes += list & {
                            54: 							expression(TypeExpressions);
                            55: 						};
                            56: 					};
                            57: 				} | {
                            58: 					% extends {
                            59: 						@ extendedTypes += list & {
                            60: 							expression(TypeExpressions);
                            61: 						};
                            62: 					};
                            63: 				};
                            64: 			} ?;
                            65: 		};
                            66: 		def ClassBlockDef {
                            67: 			^ ej:ClassBlock {
                            68: 				@ content += block(ClassContents);
                            69: 			};
                            70: 		};
                            71: 		def TemplateParameters {
                            72: 			% [ {
                            73: 				@ templateParameters += list, {
                            74: 					^ ej:TemplateParameter {
                            75: 						@ name = expression(NameExpressions);
                            76: 						ref(TemplateBounds);
                            77: 					};
                            78: 				};
                            79: 			} % ];
                            80: 		};
                            81: 		def NameDefinitionFragment {
                            82: 			@ classifier = expression(TypeExpressions);
                            83: 			@ name = expression(NameExpressions);
                            84: 		};
                            85: 		def ParameterFragment {
                            86: 			^ ej:Parameter {
                            87: 				ref(AttributesDef) ?;
                            88: 				modifiers wrapper ej:Modifier.value {
                            89: 					@ finalModifier = modifier final;
                            90: 				};
                            91: 				ref(NameDefinitionFragment);
                            92: 			};
                            93: 		};
                            94: 		def VariableSetFragment {
                            95: 			@ classifier = expression(TypeExpressions);
                            96: 			@ variables += list, {
                            97: 				^ ej:Variable {
                            98: 					@ name = expression(NameExpressions);
                            99: 					% = {
                           100: 						@ initialValue = expression(Expressions);
                           101: 					} ?;
                           102: 				};
                           103: 			};
                           104: 		};
                           105: 		def MethodBlockFragment {
                           106: 			^ ej:MethodBlock {
                           107: 				@ content += block(MethodContent);
                           108: 			};
                           109: 		};
                           110: 	};
                           111: 	/// This context contains common definitions used in statements across
                           112: 	/// all contexts.
                           113: 	context abstract BaseStatements {
                           114: 		include Base;
                           115: 		attributes Attributes {
                           116: 			ref(AttributesDef);
                           117: 		};
                           118: 		documentation Documentation {
                           119: 			@ documentation += doclines wrapper ej:DocumentationLine.text;
                           120: 		};
                           121: 	};
                           122: 	context NameExpressions {
                           123: 		include Base;
                           124: 		op composite Identifier(f) {
                           125: 			ref(NameFragment);
                           126: 		};
                           127: 	};
                           128: 	context PackageNameExpressions {
                           129: 		include NameExpressions;
                           130: 		op AccessOp(yfx, 100,.) {
                           131: 			^ ej:AccessOp {
                           132: 				@ accessed = left;
                           133: 				@ feature = right;
                           134: 			};
                           135: 		};
                           136: 	};
                           137: 	context TypeExpressions {
                           138: 		include PackageNameExpressions;
                           139: 		op composite ApplySquareOp(yf, 100) {
                           140: 			^ ej:ApplySquareOp {
                           141: 				@ functor = left;
                           142: 				@ args += %[{
                           143: 					list, {
                           144: 						expression;
                           145: 					};
                           146: 				} % ];
                           147: 			};
                           148: 		};
                           149: 		op composite ArrayType(f) {
                           150: 			^ ej:PrimitiveType {
                           151: 				@ name = token(array);
                           152: 			};
                           153: 		};
                           154: 		op composite BooleanType(f) {
                           155: 			^ ej:PrimitiveType {
                           156: 				@ name = token(boolean);
                           157: 			};
                           158: 		};
                           159: 		op composite ByteType(f) {
                           160: 			^ ej:PrimitiveType {
                           161: 				@ name = token(byte);
                           162: 			};
                           163: 		};
                           164: 		op composite ShortType(f) {
                           165: 			^ ej:PrimitiveType {
                           166: 				@ name = token(short);
                           167: 			};
                           168: 		};
                           169: 		op composite IntType(f) {
                           170: 			^ ej:PrimitiveType {
                           171: 				@ name = token(int);
                           172: 			};
                           173: 		};
                           174: 		op composite LongType(f) {
                           175: 			^ ej:PrimitiveType {
                           176: 				@ name = token(long);
                           177: 			};
                           178: 		};
                           179: 		op composite CharType(f) {
                           180: 			^ ej:PrimitiveType {
                           181: 				@ name = token(char);
                           182: 			};
                           183: 		};
                           184: 		op composite FloatType(f) {
                           185: 			^ ej:PrimitiveType {
                           186: 				@ name = token(float);
                           187: 			};
                           188: 		};
                           189: 		op composite DoubleType(f) {
                           190: 			^ ej:PrimitiveType {
                           191: 				@ name = token(double);
                           192: 			};
                           193: 		};
                           194: 		op composite VoidType(f) {
                           195: 			^ ej:PrimitiveType {
                           196: 				@ name = token(void);
                           197: 			};
                           198: 		};
                           199: 		op composite WildcardType(f) {
                           200: 			^ ej:WildcardType {
                           201: 				% ? {
                           202: 					ref(TemplateBounds);
                           203: 				};
                           204: 			};
                           205: 		};
                           206: 	};
                           207: 	context Expressions {
                           208: 		include TypeExpressions;
                           209: 		include CommonOperators;
                           210: 		import ClassContents = ClassContents;
                           211: 		import TypeExpressions = TypeExpressions;
                           212: 		op composite ThisReference(f) {
                           213: 			^ ej:ThisReference {
                           214: 				@ name = token(this);
                           215: 			};
                           216: 		};
                           217: 		op composite SuperReference(f) {
                           218: 			^ ej:SuperReference {
                           219: 				@ name = token(super);
                           220: 			};
                           221: 		};
                           222: 		op composite NullReference(f) {
                           223: 			^ ej:NullReference {
                           224: 				@ value = token(null);
                           225: 			};
                           226: 		};
                           227: 		op composite BooleanLiteral(f) {
                           228: 			^ ej:BooleanLiteral {
                           229: 				@ value = token(true) | token(false);
                           230: 			};
                           231: 		};
                           232: 		op composite StringLiteral(f) {
                           233: 			^ ej:StringLiteral {
                           234: 				@ value = string(quote = "\"");
                           235: 			};
                           236: 		};
                           237: 		/// Note that constraint that literal can contain only one 
                           238: 		/// character is not not enforced at grammar level.
                           239: 		op composite CharacterLiteral(f) {
                           240: 			^ ej:CharacterLiteral {
                           241: 				@ value = string(quote = "'");
                           242: 			};
                           243: 		};
                           244: 		op composite IntegerLiteral(f) {
                           245: 			^ ej:IntegerLiteral {
                           246: 				@ value = integer;
                           247: 			};
                           248: 		};
                           249: 		op composite LongIntegerLiteral(f) {
                           250: 			^ ej:LongIntegerLiteral {
                           251: 				@ value = integer(suffix = l|L);
                           252: 			};
                           253: 		};
                           254: 		op composite DoubleLiteral(f) {
                           255: 			^ ej:DoubleLiteral {
                           256: 				@ value = integer(suffix = d|D) | float | float(suffix = d|D);
                           257: 			};
                           258: 		};
                           259: 		op composite FloatLiteral(f) {
                           260: 			^ ej:FloatLiteral {
                           261: 				@ value = integer(suffix = f|F) | float(suffix = f|F);
                           262: 			};
                           263: 		};
                           264: 		def ArrayConstructorFragment {
                           265: 			^ ej:ArrayConstructor {
                           266: 				%[{
                           267: 					@ values += list, {
                           268: 						expression;
                           269: 					} ?;
                           270: 				} % ];
                           271: 			};
                           272: 		};
                           273: 		op composite ArrayConstructor(f) {
                           274: 			ref(ArrayConstructorFragment);
                           275: 		};
                           276: 		op composite NewOp(f) {
                           277: 			^ ej:NewOp {
                           278: 				% new {
                           279: 					@ classifier = expression(TypeExpressions, precedence = 100);
                           280: 					{
                           281: 						@ arrayConstructor = % with {
                           282: 							ref(ArrayConstructorFragment);
                           283: 						};
                           284: 					} | {
                           285: 						@ args += %({
                           286: 							list, {
                           287: 								expression;
                           288: 							} ?;
                           289: 						} %);
                           290: 						@ classBody = ref(ClassBlockDef) ?;
                           291: 					};
                           292: 				};
                           293: 			};
                           294: 		};
                           295: 		op composite IdentityOp(f) {
                           296: 			^ ej:IdentityOp {
                           297: 				%({
                           298: 					@ value = expression;
                           299: 				} %);
                           300: 			};
                           301: 		};
                           302: 		op composite ApplyRound(yf, 100) {
                           303: 			^ ej:ApplyRoundOp {
                           304: 				@ functor = left;
                           305: 				@ args += %({
                           306: 					list, {
                           307: 						expression;
                           308: 					} ?;
                           309: 				} %);
                           310: 			};
                           311: 		};
                           312: 		/// Note it is possible to enforce more constraints by
                           313: 		/// using composite operator.
                           314: 		op CastOp(xfx, 300, as) {
                           315: 			^ ej:CastOp {
                           316: 				@ value = left;
                           317: 				@ classifier = right;
                           318: 			};
                           319: 		};
                           320: 		op InstanceOfOp(xfx, 700, instanceof) {
                           321: 			^ ej:InstanceOfOp {
                           322: 				@ value = left;
                           323: 				@ classifier = right;
                           324: 			};
                           325: 		};
                           326: 		op AssignmentOp(xfy, 1500, =) {
                           327: 			^ ej:AssignmentOp {
                           328: 				@ leftHandSide = left;
                           329: 				@ value = right;
                           330: 			};
                           331: 		};
                           332: 		op PlusAssignmentOp(xfy, 1500, +=) {
                           333: 			^ ej:PlusAssignmentOp {
                           334: 				@ leftHandSide = left;
                           335: 				@ value = right;
                           336: 			};
                           337: 		};
                           338: 		op MinusAssignmentOp(xfy, 1500, -=) {
                           339: 			^ ej:MinusAssignmentOp {
                           340: 				@ leftHandSide = left;
                           341: 				@ value = right;
                           342: 			};
                           343: 		};
                           344: 		op MultiplyAssignmentOp(xfy, 1500, *=) {
                           345: 			^ ej:MultiplyAssignmentOp {
                           346: 				@ leftHandSide = left;
                           347: 				@ value = right;
                           348: 			};
                           349: 		};
                           350: 		op DivideAssignmentOp(xfy, 1500, /=) {
                           351: 			^ ej:DivideAssignmentOp {
                           352: 				@ leftHandSide = left;
                           353: 				@ value = right;
                           354: 			};
                           355: 		};
                           356: 		op BitwiseAndAssignmentOp(xfy, 1500, &=) {
                           357: 			^ ej:BitwiseAndAssignmentOp {
                           358: 				@ leftHandSide = left;
                           359: 				@ value = right;
                           360: 			};
                           361: 		};
                           362: 		op BitwiseOrAssignmentOp(xfy, 1500, |=) {
                           363: 			^ ej:BitwiseOrAssignmentOp {
                           364: 				@ leftHandSide = left;
                           365: 				@ value = right;
                           366: 			};
                           367: 		};
                           368: 		op BitwiseXorAssignmentOp(xfy, 1500, ^=) {
                           369: 			^ ej:BitwiseXorAssignmentOp {
                           370: 				@ leftHandSide = left;
                           371: 				@ value = right;
                           372: 			};
                           373: 		};
                           374: 		op RemainderAssignmentOp(xfy, 1500, %=) {
                           375: 			^ ej:RemainderAssignmentOp {
                           376: 				@ leftHandSide = left;
                           377: 				@ value = right;
                           378: 			};
                           379: 		};
                           380: 		op LeftShiftAssignmentOp(xfy, 1500, <<=) {
                           381: 			^ ej:LeftShiftAssignmentOp {
                           382: 				@ leftHandSide = left;
                           383: 				@ value = right;
                           384: 			};
                           385: 		};
                           386: 		op RightShiftAssignmentOp(xfy, 1500, >>=) {
                           387: 			^ ej:RightShiftAssignmentOp {
                           388: 				@ leftHandSide = left;
                           389: 				@ value = right;
                           390: 			};
                           391: 		};
                           392: 		op ZeroExtensionRightShiftAssignmentOp(xfy, 1500, >>>=) {
                           393: 			^ ej:ZeroExtensionRightShiftAssignmentOp {
                           394: 				@ leftHandSide = left;
                           395: 				@ value = right;
                           396: 			};
                           397: 		};
                           398: 		op PrefixIncrementOp(fy, 200, ++) {
                           399: 			^ ej:PrefixIncrementOp {
                           400: 				@ value = right;
                           401: 			};
                           402: 		};
                           403: 		op PostfixIncrementOp(yf, 300, ++) {
                           404: 			^ ej:PostfixIncrementOp {
                           405: 				@ value = left;
                           406: 			};
                           407: 		};
                           408: 		op PrefixDecrementOp(fy, 200, --) {
                           409: 			^ ej:PrefixDecrementOp {
                           410: 				@ value = right;
                           411: 			};
                           412: 		};
                           413: 		op PostfixDecrementOp(yf, 300, --) {
                           414: 			^ ej:PostfixDecrementOp {
                           415: 				@ value = left;
                           416: 			};
                           417: 		};
                           418: 	};
                           419: 	context abstract MethodContentCommons {
                           420: 		include BaseStatements;
                           421: 		include CommonControlFlow_Commons;
                           422: 		/// Redefine generic expression from common control flow
                           423: 		def CommonControlFlow_GenericExpression {
                           424: 			expression(Expressions);
                           425: 		};
                           426: 	};
                           427: 	context MethodContent {
                           428: 		include InnerClassifiers wrapper ej:MethodClassifier.classifier;
                           429: 		include MethodContentCommons;
                           430: 		include CommonControlFlow;
                           431: 		import CommonControlFlow_SwitchContent = MethodContent_SwitchContent;
                           432: 		/// Redefine fragment to refer to itself
                           433: 		def MethodBlockFragment {
                           434: 			^ ej:MethodBlock {
                           435: 				@ content += block;
                           436: 			};
                           437: 		};
                           438: 		/// Redefine exception pattern  from common control flow
                           439: 		def CommonControlFlow_ParameterPattern {
                           440: 			ref(ParameterFragment);
                           441: 		};
                           442: 		/// This a blank statement
                           443: 		statement EmptyStatement {
                           444: 			^ ej:EmptyStatement {
                           445: 			};
                           446: 		};
                           447: 		statement ForStatement {
                           448: 			^ ej:ForStatement {
                           449: 				% for {
                           450: 					ref(CommonControlFlow_LabelFragment) ?;
                           451: 					%({
                           452: 						{
                           453: 							@ initVariableDeclaration = ^ ej:LocalVarStatement {
                           454: 								ref(LocalVariablesStatementFragment);
                           455: 							};
                           456: 						} | {
                           457: 							@ initExpressions += expression(Expressions);
                           458: 						} | {
                           459: 						};
                           460: 						% :{
                           461: 							@ condition = expression(Expressions) ?;
                           462: 						};
                           463: 						% :{
                           464: 							@ updateExpressions += list, {
                           465: 								expression(Expressions);
                           466: 							} ?;
                           467: 						};
                           468: 					} %);
                           469: 					ref(CommonControlFlow_Body);
                           470: 				};
                           471: 			};
                           472: 		};
                           473: 		statement LocalVarStatement {
                           474: 			^ ej:LocalVarStatement {
                           475: 				ref(LocalVariablesStatementFragment);
                           476: 			};
                           477: 		};
                           478: 		def LocalVariablesStatementFragment {
                           479: 			% var {
                           480: 				modifiers wrapper ej:Modifier.value {
                           481: 					@ finalModifier = modifier final;
                           482: 				};
                           483: 				ref(VariableSetFragment);
                           484: 			};
                           485: 		};
                           486: 		statement SynchronizedStatement {
                           487: 			^ ej:SynchronizedStatement {
                           488: 				% synchronized {
                           489: 					%({
                           490: 						@ value = expression(Expressions);
                           491: 					} %);
                           492: 					ref(CommonControlFlow_Body);
                           493: 				};
                           494: 			};
                           495: 		};
                           496: 		statement AssertStatement {
                           497: 			^ ej:AssertStatement {
                           498: 				% assert {
                           499: 					@ test = expression(Expressions);
                           500: 				};
                           501: 				% :{
                           502: 					@ message = expression(Expressions);
                           503: 				} ?;
                           504: 			};
                           505: 		};
                           506: 	};
                           507: 	context MethodContent_SwitchContent {
                           508: 		include MethodContentCommons;
                           509: 		include CommonControlFlow_SwitchContent;
                           510: 		import CommonControlFlow = MethodContent;
                           511: 	};
                           512: 	context abstract ClassifierContent {
                           513: 		include BaseStatements;
                           514: 		import NameExpressions = NameExpressions;
                           515: 		include InnerClassifiers wrapper ej:InnerClassifier.classifier;
                           516: 		def MethodSignatureFragment {
                           517: 			@ returnType = expression(TypeExpressions);
                           518: 			ref(ConstructorSignatureFragment);
                           519: 		};
                           520: 		def ConstructorSignatureFragment {
                           521: 			@ name = ref(NameFragment);
                           522: 			%({
                           523: 				list, {
                           524: 					@ parameters += ref(ParameterFragment);
                           525: 				} ?;
                           526: 			} %);
                           527: 			% throws {
                           528: 				list, {
                           529: 					@ exceptions += expression(TypeExpressions);
                           530: 				};
                           531: 			} ?;
                           532: 		};
                           533: 	};
                           534: 	context ClassContents {
                           535: 		include ClassifierContent;
                           536: 		statement MethodStatement {
                           537: 			^ ej:MethodStatement {
                           538: 				% to {
                           539: 					ref(TemplateParameters) ?;
                           540: 					modifiers wrapper ej:Modifier.value {
                           541: 						@ visibilityModifier = modifier public;
                           542: 						@ visibilityModifier = modifier protected;
                           543: 						@ visibilityModifier = modifier private;
                           544: 						@ staticModifier = modifier static;
                           545: 						@ strictfpModifier = modifier strictfp;
                           546: 						@ abstractModifier = modifier abstract;
                           547: 						@ finalModifier = modifier final;
                           548: 						@ synchronizedModifier = modifier synchronized;
                           549: 					};
                           550: 					ref(MethodSignatureFragment);
                           551: 				};
                           552: 				@ body = ref(MethodBlockFragment) ?;
                           553: 			};
                           554: 		};
                           555: 		statement FieldStatement {
                           556: 			^ ej:FieldStatement {
                           557: 				% var {
                           558: 					modifiers wrapper ej:Modifier.value {
                           559: 						@ visibilityModifier = modifier public;
                           560: 						@ visibilityModifier = modifier protected;
                           561: 						@ visibilityModifier = modifier private;
                           562: 						@ staticModifier = modifier static;
                           563: 						@ abstractModifier = modifier abstract;
                           564: 						@ finalModifier = modifier final;
                           565: 						@ transientModifier = modifier transient;
                           566: 						@ volatileModifier = modifier volatile;
                           567: 					};
                           568: 					ref(VariableSetFragment);
                           569: 				};
                           570: 			};
                           571: 		};
                           572: 		statement InitStatement {
                           573: 			^ ej:InitStatement {
                           574: 				@ body = ref(MethodBlockFragment);
                           575: 			};
                           576: 		};
                           577: 		statement StaticInitStatement {
                           578: 			^ ej:StaticInitStatement {
                           579: 				% static {
                           580: 					@ body = ref(MethodBlockFragment);
                           581: 				};
                           582: 			};
                           583: 		};
                           584: 		statement ConstructorStatement {
                           585: 			^ ej:ConstructorStatement {
                           586: 				% maker {
                           587: 					modifiers wrapper ej:Modifier.value {
                           588: 						@ visibilityModifier = modifier public;
                           589: 						@ visibilityModifier = modifier protected;
                           590: 						@ visibilityModifier = modifier private;
                           591: 					};
                           592: 					ref(ConstructorSignatureFragment);
                           593: 				};
                           594: 				@ body = ref(MethodBlockFragment);
                           595: 			};
                           596: 		};
                           597: 	};
                           598: 	context InterfaceContents {
                           599: 		include ClassifierContent;
                           600: 		statement MethodStatement {
                           601: 			^ ej:MethodStatement {
                           602: 				% to {
                           603: 					modifiers wrapper ej:Modifier.value {
                           604: 						@ visibilityModifier = modifier public;
                           605: 						@ abstractModifier = modifier abstract;
                           606: 					};
                           607: 					ref(MethodSignatureFragment);
                           608: 				};
                           609: 			};
                           610: 		};
                           611: 		statement FieldStatement {
                           612: 			^ ej:FieldStatement {
                           613: 				% var {
                           614: 					modifiers wrapper ej:Modifier.value {
                           615: 						@ visibilityModifier = modifier public;
                           616: 						@ staticModifier = modifier static;
                           617: 						@ finalModifier = modifier final;
                           618: 					};
                           619: 					ref(VariableSetFragment);
                           620: 				};
                           621: 			};
                           622: 		};
                           623: 	};
                           624: 	context AttributeContents {
                           625: 		include BaseStatements;
                           626: 		statement FieldStatement {
                           627: 			^ ej:FieldStatement {
                           628: 				% var {
                           629: 					ref(VariableSetFragment);
                           630: 				};
                           631: 			};
                           632: 		};
                           633: 	};
                           634: 	context EnumerationContents {
                           635: 		include ClassContents;
                           636: 		statement LiteralStatement {
                           637: 			^ ej:EnumLiteral {
                           638: 				% literal {
                           639: 					@ name = expression(NameExpressions);
                           640: 					%({
                           641: 						@ args += list, {
                           642: 							expression(Expressions);
                           643: 						};
                           644: 					} %) ?;
                           645: 					{
                           646: 						@ body = ref(ClassBlockDef);
                           647: 					} ?;
                           648: 				};
                           649: 			};
                           650: 		};
                           651: 	};
                           652: 	context abstract InnerClassifiers {
                           653: 		include BaseStatements;
                           654: 		import EnumerationContents = EnumerationContents;
                           655: 		import ClassContents = ClassContents;
                           656: 		import InterfaceContents = InterfaceContents;
                           657: 		def ClassModifiersDef {
                           658: 			modifiers wrapper ej:Modifier.value {
                           659: 				@ visibilityModifier = modifier public;
                           660: 				@ visibilityModifier = modifier protected;
                           661: 				@ visibilityModifier = modifier private;
                           662: 				@ staticModifier = modifier static;
                           663: 				@ strictfpModifier = modifier strictfp;
                           664: 				@ abstractModifier = modifier abstract;
                           665: 				@ finalModifier = modifier final;
                           666: 				@ synchronizedModifier = modifier syncrhonized;
                           667: 			};
                           668: 		};
                           669: 		statement ClassStatement {
                           670: 			^ ej:ClassStatement {
                           671: 				% class {
                           672: 					ref(ClassModifiersDef);
                           673: 					@ name = ref(NameFragment);
                           674: 					ref(TemplateParameters) ?;
                           675: 				};
                           676: 				% extends {
                           677: 					@ extendedType = expression(TypeExpressions);
                           678: 				} ?;
                           679: 				% implements {
                           680: 					@ implementedTypes += list, {
                           681: 						expression(TypeExpressions);
                           682: 					};
                           683: 				} ?;
                           684: 				@ contents += block(ClassContents);
                           685: 			};
                           686: 		};
                           687: 		statement InterfaceStatement {
                           688: 			^ ej:InterfaceStatement {
                           689: 				% interface {
                           690: 					modifiers wrapper ej:Modifier.value {
                           691: 						@ visibilityModifier = modifier public;
                           692: 					};
                           693: 					@ name = ref(NameFragment);
                           694: 					ref(TemplateParameters) ?;
                           695: 				};
                           696: 				% extends {
                           697: 					@ extendedTypes += list, {
                           698: 						expression(TypeExpressions);
                           699: 					};
                           700: 				} ?;
                           701: 				@ contents += block(InterfaceContents);
                           702: 			};
                           703: 		};
                           704: 		statement EnumStatement {
                           705: 			^ ej:EnumStatement {
                           706: 				% enum {
                           707: 					ref(ClassModifiersDef);
                           708: 					@ name = ref(NameFragment);
                           709: 				};
                           710: 				@ contents += block(EnumerationContents);
                           711: 			};
                           712: 		};
                           713: 	};
                           714: 	context AllClassifiers {
                           715: 		include InnerClassifiers;
                           716: 		import AttributeContents = AttributeContents;
                           717: 		statement AttributeDefinition {
                           718: 			^ ej:AttributeDefinition {
                           719: 				% attribute {
                           720: 					modifiers wrapper ej:Modifier.value {
                           721: 						@ visibilityModifier = modifier public;
                           722: 					};
                           723: 					@ name = ref(NameFragment);
                           724: 				};
                           725: 				@ contents += block(AttributeContents);
                           726: 			};
                           727: 		};
                           728: 	};
                           729: 	context default TopLevel {
                           730: 		include AllClassifiers wrapper ej:TopLevelClassifier.classifier;
                           731: 		import PackageNameExpressions = PackageNameExpressions;
                           732: 		/// This is an package statement.
                           733: 		/// <usage>
                           734: 		///    package java.awt;
                           735: 		/// </usage>
                           736: 		statement PackageStatement {
                           737: 			^ ej:PackageStatement {
                           738: 				% package {
                           739: 					@ name = expression(PackageNameExpressions);
                           740: 				};
                           741: 			};
                           742: 		};
                           743: 		/// This is an import statement.
                           744: 		/// <usage>
                           745: 		///    import java.util.List;
                           746: 		///    import all static java.lang.Math;
                           747: 		///    import all java.rmi;
                           748: 		/// </usage>
                           749: 		statement ImportStatement {
                           750: 			^ ej:ImportStatement {
                           751: 				% import {
                           752: 					modifiers wrapper ej:Modifier.value {
                           753: 						@ allModifier = modifier all;
                           754: 						@ staticModifier = modifier static;
                           755: 					};
                           756: 					@ importedPackage = expression(PackageNameExpressions);
                           757: 				};
                           758: 			};
                           759: 		};
                           760: 	};
                           761: };