• 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 abstract grammar contains definition of some
      • DocumentationLine{http://etl.sf.net/etl/grammar/0.2.1}:
        • text: /// common operators. This grammar intentionally leaves out
      • DocumentationLine{http://etl.sf.net/etl/grammar/0.2.1}:
        • text: /// assignment operators, literals, and value creation operators.
    • abstractModifier:
      • Modifier{http://etl.sf.net/etl/grammar/0.2.1}:
        • value: abstract
    • name:
      • net
      • sf
      • etl
      • samples
      • ej
      • CommonOperators
    • content:
      • Namespace{http://etl.sf.net/etl/grammar/0.2.1}:
        • prefix: c
        • uri: "http://etl.sf.net/2006/samples/ej/0.1"
      • Context{http://etl.sf.net/etl/grammar/0.2.1}:
        • abstractModifier:
          • Modifier{http://etl.sf.net/etl/grammar/0.2.1}:
            • value: abstract
        • name: CommonOperators
        • content:
          • OperatorDefinition{http://etl.sf.net/etl/grammar/0.2.1}:
            • name: UnaryMinusOp
            • 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: c
                        • name: UnaryMinusOp
                    • 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: UnaryPlusOp
            • 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: c
                        • name: UnaryPlusOp
                    • 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: MultiplyOp
            • associativity: yfx
            • precedence: 400
            • 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: c
                        • name: MultiplyOp
                    • syntax:
                      • Sequence{http://etl.sf.net/etl/grammar/0.2.1}:
                        • syntax:
                          • Let{http://etl.sf.net/etl/grammar/0.2.1}:
                            • name: multipliers
                            • 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: multipliers
                            • 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: DivideOp
            • associativity: yfx
            • precedence: 400
            • 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: c
                        • name: DivideOp
                    • syntax:
                      • Sequence{http://etl.sf.net/etl/grammar/0.2.1}:
                        • syntax:
                          • Let{http://etl.sf.net/etl/grammar/0.2.1}:
                            • name: dividend
                            • 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: divisor
                            • 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: RemainderOp
            • associativity: yfx
            • precedence: 400
            • 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: c
                        • name: RemainderOp
                    • syntax:
                      • Sequence{http://etl.sf.net/etl/grammar/0.2.1}:
                        • syntax:
                          • Let{http://etl.sf.net/etl/grammar/0.2.1}:
                            • name: dividend
                            • 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: divisor
                            • 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: PlusOp
            • associativity: yfx
            • precedence: 500
            • 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: c
                        • name: PlusOp
                    • syntax:
                      • Sequence{http://etl.sf.net/etl/grammar/0.2.1}:
                        • syntax:
                          • Let{http://etl.sf.net/etl/grammar/0.2.1}:
                            • name: summands
                            • 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: summands
                            • 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: MinusOp
            • associativity: yfx
            • precedence: 500
            • 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: c
                        • name: MinusOp
                    • syntax:
                      • Sequence{http://etl.sf.net/etl/grammar/0.2.1}:
                        • syntax:
                          • Let{http://etl.sf.net/etl/grammar/0.2.1}:
                            • name: minuend
                            • 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: subtrahend
                            • 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: LeftShiftOp
            • associativity: yfx
            • precedence: 600
            • 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: c
                        • name: LeftShiftOp
                    • 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: distance
                            • 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: RightShiftOp
            • associativity: yfx
            • precedence: 600
            • 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: c
                        • name: RightShiftOp
                    • 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: distance
                            • 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: ZeroExtensionRightShiftOp
            • associativity: yfx
            • precedence: 600
            • 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: c
                        • name: ZeroExtensionRightShiftOp
                    • 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: distance
                            • 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: BitwiseComplementOp
            • 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: c
                        • name: BitwiseComplementOp
                    • 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: LogicalComplementOp
            • 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: c
                        • name: LogicalComplementOp
                    • 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: BitwiseAndOp
            • associativity: yfx
            • precedence: 900
            • 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: c
                        • name: BitwiseAndOp
                    • syntax:
                      • Sequence{http://etl.sf.net/etl/grammar/0.2.1}:
                        • syntax:
                          • Let{http://etl.sf.net/etl/grammar/0.2.1}:
                            • name: value1
                            • 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: value2
                            • 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: BitwiseXorOp
            • associativity: yfx
            • precedence: 1000
            • 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: c
                        • name: BitwiseXorOp
                    • syntax:
                      • Sequence{http://etl.sf.net/etl/grammar/0.2.1}:
                        • syntax:
                          • Let{http://etl.sf.net/etl/grammar/0.2.1}:
                            • name: value1
                            • 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: value2
                            • 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: BitwiseOrOp
            • associativity: yfx
            • precedence: 1100
            • 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: c
                        • name: BitwiseOrOp
                    • syntax:
                      • Sequence{http://etl.sf.net/etl/grammar/0.2.1}:
                        • syntax:
                          • Let{http://etl.sf.net/etl/grammar/0.2.1}:
                            • name: value1
                            • 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: value2
                            • 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: ConditionalAndOp
            • associativity: yfx
            • precedence: 1200
            • 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: c
                        • name: ConditionalAndOp
                    • syntax:
                      • Sequence{http://etl.sf.net/etl/grammar/0.2.1}:
                        • syntax:
                          • Let{http://etl.sf.net/etl/grammar/0.2.1}:
                            • name: value1
                            • 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: value2
                            • 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: ConditionalOrOp
            • associativity: xfx
            • precedence: 1300
            • 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: c
                        • name: ConditionalOrOp
                    • syntax:
                      • Sequence{http://etl.sf.net/etl/grammar/0.2.1}:
                        • syntax:
                          • Let{http://etl.sf.net/etl/grammar/0.2.1}:
                            • name: value1
                            • 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: value2
                            • 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: LessThenOp
            • associativity: xfx
            • precedence: 700
            • 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: c
                        • name: LessThenOp
                    • syntax:
                      • Sequence{http://etl.sf.net/etl/grammar/0.2.1}:
                        • syntax:
                          • Let{http://etl.sf.net/etl/grammar/0.2.1}:
                            • name: value1
                            • 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: value2
                            • 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: LessOrEqualOp
            • associativity: yfx
            • precedence: 700
            • 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: c
                        • name: LessOrEqualOp
                    • syntax:
                      • Sequence{http://etl.sf.net/etl/grammar/0.2.1}:
                        • syntax:
                          • Let{http://etl.sf.net/etl/grammar/0.2.1}:
                            • name: value1
                            • 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: value2
                            • 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: GreaterThenOpOp
            • associativity: yfx
            • precedence: 700
            • 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: c
                        • name: GreaterThenOp
                    • syntax:
                      • Sequence{http://etl.sf.net/etl/grammar/0.2.1}:
                        • syntax:
                          • Let{http://etl.sf.net/etl/grammar/0.2.1}:
                            • name: value1
                            • 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: value2
                            • 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: GreaterOrEqualOp
            • associativity: yfx
            • precedence: 700
            • 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: c
                        • name: GreaterOrEqualOp
                    • syntax:
                      • Sequence{http://etl.sf.net/etl/grammar/0.2.1}:
                        • syntax:
                          • Let{http://etl.sf.net/etl/grammar/0.2.1}:
                            • name: value1
                            • 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: value2
                            • 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: EqualOp
            • associativity: xfx
            • precedence: 800
            • 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: c
                        • name: EqualOp
                    • syntax:
                      • Sequence{http://etl.sf.net/etl/grammar/0.2.1}:
                        • syntax:
                          • Let{http://etl.sf.net/etl/grammar/0.2.1}:
                            • name: value1
                            • 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: value2
                            • 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: NotEqualOp
            • associativity: xfx
            • precedence: 800
            • 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: c
                        • name: NotEqualOp
                    • syntax:
                      • Sequence{http://etl.sf.net/etl/grammar/0.2.1}:
                        • syntax:
                          • Let{http://etl.sf.net/etl/grammar/0.2.1}:
                            • name: value1
                            • 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: value2
                            • operator: =
                            • expression:
                              • OperandOp{http://etl.sf.net/etl/grammar/0.2.1}:
                                • position: right
          • OperatorDefinition{http://etl.sf.net/etl/grammar/0.2.1}:
            • isComposite:
              • Modifier{http://etl.sf.net/etl/grammar/0.2.1}:
                • value: composite
            • name: ConditionalOp
            • associativity: xfy
            • precedence: 1400
            • 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: c
                        • name: ConditionalOp
                    • syntax:
                      • Sequence{http://etl.sf.net/etl/grammar/0.2.1}:
                        • syntax:
                          • Let{http://etl.sf.net/etl/grammar/0.2.1}:
                            • name: condition
                            • operator: =
                            • expression:
                              • OperandOp{http://etl.sf.net/etl/grammar/0.2.1}:
                                • position: left
                          • 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: thenPart
                                    • operator: =
                                    • expression:
                                      • ExpressionRef{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: elsePart
                              • operator: =
                              • expression:
                                • OperandOp{http://etl.sf.net/etl/grammar/0.2.1}:
                                  • position: right
         1: 
         2: doctype public "-//IDN etl.sf.net//ETL//Grammar 0.2.1";
         3: /// This abstract grammar contains definition of some 
         4: /// common operators. This grammar intentionally leaves out
         5: /// assignment operators, literals, and value creation operators.
         6: grammar abstract net.sf.etl.samples.ej.CommonOperators {
         7: 	namespace c = "http://etl.sf.net/2006/samples/ej/0.1";
         8: 	context abstract CommonOperators {
         9: 		op UnaryMinusOp(fy, 200, -) {
        10: 			^ c:UnaryMinusOp {
        11: 				@ value = right;
        12: 			};
        13: 		};
        14: 		op UnaryPlusOp(fy, 200, +) {
        15: 			^ c:UnaryPlusOp {
        16: 				@ value = right;
        17: 			};
        18: 		};
        19: 		op MultiplyOp(yfx, 400, *) {
        20: 			^ c:MultiplyOp {
        21: 				@ multipliers += left;
        22: 				@ multipliers += right;
        23: 			};
        24: 		};
        25: 		op DivideOp(yfx, 400, /) {
        26: 			^ c:DivideOp {
        27: 				@ dividend = left;
        28: 				@ divisor = right;
        29: 			};
        30: 		};
        31: 		op RemainderOp(yfx, 400, %) {
        32: 			^ c:RemainderOp {
        33: 				@ dividend = left;
        34: 				@ divisor = right;
        35: 			};
        36: 		};
        37: 		op PlusOp(yfx, 500, +) {
        38: 			^ c:PlusOp {
        39: 				@ summands += left;
        40: 				@ summands += right;
        41: 			};
        42: 		};
        43: 		op MinusOp(yfx, 500, -) {
        44: 			^ c:MinusOp {
        45: 				@ minuend = left;
        46: 				@ subtrahend = right;
        47: 			};
        48: 		};
        49: 		op LeftShiftOp(yfx, 600, <<) {
        50: 			^ c:LeftShiftOp {
        51: 				@ value = left;
        52: 				@ distance = right;
        53: 			};
        54: 		};
        55: 		op RightShiftOp(yfx, 600, >>) {
        56: 			^ c:RightShiftOp {
        57: 				@ value = left;
        58: 				@ distance = right;
        59: 			};
        60: 		};
        61: 		op ZeroExtensionRightShiftOp(yfx, 600, >>>) {
        62: 			^ c:ZeroExtensionRightShiftOp {
        63: 				@ value = left;
        64: 				@ distance = right;
        65: 			};
        66: 		};
        67: 		op BitwiseComplementOp(fy, 200, ~) {
        68: 			^ c:BitwiseComplementOp {
        69: 				@ value = right;
        70: 			};
        71: 		};
        72: 		op LogicalComplementOp(fy, 200, !) {
        73: 			^ c:LogicalComplementOp {
        74: 				@ value = right;
        75: 			};
        76: 		};
        77: 		op BitwiseAndOp(yfx, 900, &) {
        78: 			^ c:BitwiseAndOp {
        79: 				@ value1 = left;
        80: 				@ value2 = right;
        81: 			};
        82: 		};
        83: 		op BitwiseXorOp(yfx, 1000, ^) {
        84: 			^ c:BitwiseXorOp {
        85: 				@ value1 = left;
        86: 				@ value2 = right;
        87: 			};
        88: 		};
        89: 		op BitwiseOrOp(yfx, 1100, |) {
        90: 			^ c:BitwiseOrOp {
        91: 				@ value1 = left;
        92: 				@ value2 = right;
        93: 			};
        94: 		};
        95: 		op ConditionalAndOp(yfx, 1200, &&) {
        96: 			^ c:ConditionalAndOp {
        97: 				@ value1 = left;
        98: 				@ value2 = right;
        99: 			};
       100: 		};
       101: 		op ConditionalOrOp(xfx, 1300, ||) {
       102: 			^ c:ConditionalOrOp {
       103: 				@ value1 = left;
       104: 				@ value2 = right;
       105: 			};
       106: 		};
       107: 		op LessThenOp(xfx, 700, <) {
       108: 			^ c:LessThenOp {
       109: 				@ value1 = left;
       110: 				@ value2 = right;
       111: 			};
       112: 		};
       113: 		op LessOrEqualOp(yfx, 700, <=) {
       114: 			^ c:LessOrEqualOp {
       115: 				@ value1 = left;
       116: 				@ value2 = right;
       117: 			};
       118: 		};
       119: 		op GreaterThenOpOp(yfx, 700, >) {
       120: 			^ c:GreaterThenOp {
       121: 				@ value1 = left;
       122: 				@ value2 = right;
       123: 			};
       124: 		};
       125: 		op GreaterOrEqualOp(yfx, 700, >=) {
       126: 			^ c:GreaterOrEqualOp {
       127: 				@ value1 = left;
       128: 				@ value2 = right;
       129: 			};
       130: 		};
       131: 		op EqualOp(xfx, 800, ==) {
       132: 			^ c:EqualOp {
       133: 				@ value1 = left;
       134: 				@ value2 = right;
       135: 			};
       136: 		};
       137: 		op NotEqualOp(xfx, 800, !=) {
       138: 			^ c:NotEqualOp {
       139: 				@ value1 = left;
       140: 				@ value2 = right;
       141: 			};
       142: 		};
       143: 		op composite ConditionalOp(xfy, 1400) {
       144: 			^ c:ConditionalOp {
       145: 				@ condition = left;
       146: 				% ? {
       147: 					@ thenPart = expression;
       148: 					% :{
       149: 					};
       150: 				};
       151: 				@ elsePart = right;
       152: 			};
       153: 		};
       154: 	};
       155: };