• DoctypeDeclaration{http://etl.sf.net/etl/doctype/0.2.1}:
    • systemId: "../grammars/EJ.g.etl"
  • TopLevelClassifier{http://etl.sf.net/2006/samples/ej/0.1}:
    • classifier:
      • EnumStatement{http://etl.sf.net/2006/samples/ej/0.1}:
        • documentation:
          • DocumentationLine{http://etl.sf.net/2006/samples/ej/0.1}:
            • text: /// the samples are taken from corresponding JSR
          • DocumentationLine{http://etl.sf.net/2006/samples/ej/0.1}:
            • text: /// simple enum
        • visibilityModifier:
          • Modifier{http://etl.sf.net/2006/samples/ej/0.1}:
            • value: public
        • name:
          • Identifier{http://etl.sf.net/2006/samples/ej/0.1}:
            • value: Season
        • contents:
          • EnumLiteral{http://etl.sf.net/2006/samples/ej/0.1}:
            • name:
              • Identifier{http://etl.sf.net/2006/samples/ej/0.1}:
                • value: winter
          • EnumLiteral{http://etl.sf.net/2006/samples/ej/0.1}:
            • name:
              • Identifier{http://etl.sf.net/2006/samples/ej/0.1}:
                • value: spring
          • EnumLiteral{http://etl.sf.net/2006/samples/ej/0.1}:
            • name:
              • Identifier{http://etl.sf.net/2006/samples/ej/0.1}:
                • value: summer
          • EnumLiteral{http://etl.sf.net/2006/samples/ej/0.1}:
            • name:
              • Identifier{http://etl.sf.net/2006/samples/ej/0.1}:
                • value: fall
  • TopLevelClassifier{http://etl.sf.net/2006/samples/ej/0.1}:
    • classifier:
      • EnumStatement{http://etl.sf.net/2006/samples/ej/0.1}:
        • documentation:
          • DocumentationLine{http://etl.sf.net/2006/samples/ej/0.1}:
            • text: /// enum with value
        • visibilityModifier:
          • Modifier{http://etl.sf.net/2006/samples/ej/0.1}:
            • value: public
        • name:
          • Identifier{http://etl.sf.net/2006/samples/ej/0.1}:
            • value: Coin
        • contents:
          • EnumLiteral{http://etl.sf.net/2006/samples/ej/0.1}:
            • name:
              • Identifier{http://etl.sf.net/2006/samples/ej/0.1}:
                • value: penny
            • args:
              • IntegerLiteral{http://etl.sf.net/2006/samples/ej/0.1}:
                • value: 1
          • EnumLiteral{http://etl.sf.net/2006/samples/ej/0.1}:
            • name:
              • Identifier{http://etl.sf.net/2006/samples/ej/0.1}:
                • value: nickel
            • args:
              • IntegerLiteral{http://etl.sf.net/2006/samples/ej/0.1}:
                • value: 5
          • EnumLiteral{http://etl.sf.net/2006/samples/ej/0.1}:
            • name:
              • Identifier{http://etl.sf.net/2006/samples/ej/0.1}:
                • value: dime
            • args:
              • IntegerLiteral{http://etl.sf.net/2006/samples/ej/0.1}:
                • value: 10
          • EnumLiteral{http://etl.sf.net/2006/samples/ej/0.1}:
            • name:
              • Identifier{http://etl.sf.net/2006/samples/ej/0.1}:
                • value: quarter
            • args:
              • IntegerLiteral{http://etl.sf.net/2006/samples/ej/0.1}:
                • value: 25
          • ConstructorStatement{http://etl.sf.net/2006/samples/ej/0.1}:
            • name:
              • Identifier{http://etl.sf.net/2006/samples/ej/0.1}:
                • value: Coin
            • parameters:
              • Parameter{http://etl.sf.net/2006/samples/ej/0.1}:
                • classifier:
                  • PrimitiveType{http://etl.sf.net/2006/samples/ej/0.1}:
                    • name: int
                • name:
                  • Identifier{http://etl.sf.net/2006/samples/ej/0.1}:
                    • value: value
            • body:
              • MethodBlock{http://etl.sf.net/2006/samples/ej/0.1}:
                • content:
                  • ExpressionStatement{http://etl.sf.net/2006/samples/ej/0.1}:
                    • expression:
                      • AssignmentOp{http://etl.sf.net/2006/samples/ej/0.1}:
                        • leftHandSide:
                          • AccessOp{http://etl.sf.net/2006/samples/ej/0.1}:
                            • accessed:
                              • ThisReference{http://etl.sf.net/2006/samples/ej/0.1}:
                                • name: this
                            • feature:
                              • Identifier{http://etl.sf.net/2006/samples/ej/0.1}:
                                • value: value
                        • value:
                          • Identifier{http://etl.sf.net/2006/samples/ej/0.1}:
                            • value: value
          • FieldStatement{http://etl.sf.net/2006/samples/ej/0.1}:
            • visibilityModifier:
              • Modifier{http://etl.sf.net/2006/samples/ej/0.1}:
                • value: private
            • finalModifier:
              • Modifier{http://etl.sf.net/2006/samples/ej/0.1}:
                • value: final
            • classifier:
              • PrimitiveType{http://etl.sf.net/2006/samples/ej/0.1}:
                • name: int
            • variables:
              • Variable{http://etl.sf.net/2006/samples/ej/0.1}:
                • name:
                  • Identifier{http://etl.sf.net/2006/samples/ej/0.1}:
                    • value: value
          • MethodStatement{http://etl.sf.net/2006/samples/ej/0.1}:
            • visibilityModifier:
              • Modifier{http://etl.sf.net/2006/samples/ej/0.1}:
                • value: public
            • returnType:
              • PrimitiveType{http://etl.sf.net/2006/samples/ej/0.1}:
                • name: int
            • name:
              • Identifier{http://etl.sf.net/2006/samples/ej/0.1}:
                • value: value
            • body:
              • MethodBlock{http://etl.sf.net/2006/samples/ej/0.1}:
                • content:
                  • ReturnStatement{http://etl.sf.net/2006/samples/ej/0.1}:
                    • value:
                      • Identifier{http://etl.sf.net/2006/samples/ej/0.1}:
                        • value: value
  • TopLevelClassifier{http://etl.sf.net/2006/samples/ej/0.1}:
    • classifier:
      • EnumStatement{http://etl.sf.net/2006/samples/ej/0.1}:
        • documentation:
          • DocumentationLine{http://etl.sf.net/2006/samples/ej/0.1}:
            • text: /// abstract enum sample
        • visibilityModifier:
          • Modifier{http://etl.sf.net/2006/samples/ej/0.1}:
            • value: public
        • abstractModifier:
          • Modifier{http://etl.sf.net/2006/samples/ej/0.1}:
            • value: abstract
        • name:
          • Identifier{http://etl.sf.net/2006/samples/ej/0.1}:
            • value: Operation
        • contents:
          • EnumLiteral{http://etl.sf.net/2006/samples/ej/0.1}:
            • name:
              • Identifier{http://etl.sf.net/2006/samples/ej/0.1}:
                • value: plus
            • body:
              • ClassBlock{http://etl.sf.net/2006/samples/ej/0.1}:
                • content:
                  • MethodStatement{http://etl.sf.net/2006/samples/ej/0.1}:
                    • returnType:
                      • PrimitiveType{http://etl.sf.net/2006/samples/ej/0.1}:
                        • name: double
                    • name:
                      • Identifier{http://etl.sf.net/2006/samples/ej/0.1}:
                        • value: eval
                    • parameters:
                      • Parameter{http://etl.sf.net/2006/samples/ej/0.1}:
                        • classifier:
                          • PrimitiveType{http://etl.sf.net/2006/samples/ej/0.1}:
                            • name: double
                        • name:
                          • Identifier{http://etl.sf.net/2006/samples/ej/0.1}:
                            • value: x
                    • parameters:
                      • Parameter{http://etl.sf.net/2006/samples/ej/0.1}:
                        • classifier:
                          • PrimitiveType{http://etl.sf.net/2006/samples/ej/0.1}:
                            • name: double
                        • name:
                          • Identifier{http://etl.sf.net/2006/samples/ej/0.1}:
                            • value: y
                    • body:
                      • MethodBlock{http://etl.sf.net/2006/samples/ej/0.1}:
                        • content:
                          • ReturnStatement{http://etl.sf.net/2006/samples/ej/0.1}:
                            • value:
                              • PlusOp{http://etl.sf.net/2006/samples/ej/0.1}:
                                • summands:
                                  • Identifier{http://etl.sf.net/2006/samples/ej/0.1}:
                                    • value: x
                                • summands:
                                  • Identifier{http://etl.sf.net/2006/samples/ej/0.1}:
                                    • value: y
          • EnumLiteral{http://etl.sf.net/2006/samples/ej/0.1}:
            • name:
              • Identifier{http://etl.sf.net/2006/samples/ej/0.1}:
                • value: minus
            • body:
              • ClassBlock{http://etl.sf.net/2006/samples/ej/0.1}:
                • content:
                  • MethodStatement{http://etl.sf.net/2006/samples/ej/0.1}:
                    • returnType:
                      • PrimitiveType{http://etl.sf.net/2006/samples/ej/0.1}:
                        • name: double
                    • name:
                      • Identifier{http://etl.sf.net/2006/samples/ej/0.1}:
                        • value: eval
                    • parameters:
                      • Parameter{http://etl.sf.net/2006/samples/ej/0.1}:
                        • classifier:
                          • PrimitiveType{http://etl.sf.net/2006/samples/ej/0.1}:
                            • name: double
                        • name:
                          • Identifier{http://etl.sf.net/2006/samples/ej/0.1}:
                            • value: x
                    • parameters:
                      • Parameter{http://etl.sf.net/2006/samples/ej/0.1}:
                        • classifier:
                          • PrimitiveType{http://etl.sf.net/2006/samples/ej/0.1}:
                            • name: double
                        • name:
                          • Identifier{http://etl.sf.net/2006/samples/ej/0.1}:
                            • value: y
                    • body:
                      • MethodBlock{http://etl.sf.net/2006/samples/ej/0.1}:
                        • content:
                          • ReturnStatement{http://etl.sf.net/2006/samples/ej/0.1}:
                            • value:
                              • MinusOp{http://etl.sf.net/2006/samples/ej/0.1}:
                                • minuend:
                                  • Identifier{http://etl.sf.net/2006/samples/ej/0.1}:
                                    • value: x
                                • subtrahend:
                                  • Identifier{http://etl.sf.net/2006/samples/ej/0.1}:
                                    • value: y
          • EnumLiteral{http://etl.sf.net/2006/samples/ej/0.1}:
            • name:
              • Identifier{http://etl.sf.net/2006/samples/ej/0.1}:
                • value: times
            • body:
              • ClassBlock{http://etl.sf.net/2006/samples/ej/0.1}:
                • content:
                  • MethodStatement{http://etl.sf.net/2006/samples/ej/0.1}:
                    • returnType:
                      • PrimitiveType{http://etl.sf.net/2006/samples/ej/0.1}:
                        • name: double
                    • name:
                      • Identifier{http://etl.sf.net/2006/samples/ej/0.1}:
                        • value: eval
                    • parameters:
                      • Parameter{http://etl.sf.net/2006/samples/ej/0.1}:
                        • classifier:
                          • PrimitiveType{http://etl.sf.net/2006/samples/ej/0.1}:
                            • name: double
                        • name:
                          • Identifier{http://etl.sf.net/2006/samples/ej/0.1}:
                            • value: x
                    • parameters:
                      • Parameter{http://etl.sf.net/2006/samples/ej/0.1}:
                        • classifier:
                          • PrimitiveType{http://etl.sf.net/2006/samples/ej/0.1}:
                            • name: double
                        • name:
                          • Identifier{http://etl.sf.net/2006/samples/ej/0.1}:
                            • value: y
                    • body:
                      • MethodBlock{http://etl.sf.net/2006/samples/ej/0.1}:
                        • content:
                          • ReturnStatement{http://etl.sf.net/2006/samples/ej/0.1}:
                            • value:
                              • MultiplyOp{http://etl.sf.net/2006/samples/ej/0.1}:
                                • multipliers:
                                  • Identifier{http://etl.sf.net/2006/samples/ej/0.1}:
                                    • value: x
                                • multipliers:
                                  • Identifier{http://etl.sf.net/2006/samples/ej/0.1}:
                                    • value: y
          • EnumLiteral{http://etl.sf.net/2006/samples/ej/0.1}:
            • name:
              • Identifier{http://etl.sf.net/2006/samples/ej/0.1}:
                • value: divided_by
            • body:
              • ClassBlock{http://etl.sf.net/2006/samples/ej/0.1}:
                • content:
                  • MethodStatement{http://etl.sf.net/2006/samples/ej/0.1}:
                    • returnType:
                      • PrimitiveType{http://etl.sf.net/2006/samples/ej/0.1}:
                        • name: double
                    • name:
                      • Identifier{http://etl.sf.net/2006/samples/ej/0.1}:
                        • value: eval
                    • parameters:
                      • Parameter{http://etl.sf.net/2006/samples/ej/0.1}:
                        • classifier:
                          • PrimitiveType{http://etl.sf.net/2006/samples/ej/0.1}:
                            • name: double
                        • name:
                          • Identifier{http://etl.sf.net/2006/samples/ej/0.1}:
                            • value: x
                    • parameters:
                      • Parameter{http://etl.sf.net/2006/samples/ej/0.1}:
                        • classifier:
                          • PrimitiveType{http://etl.sf.net/2006/samples/ej/0.1}:
                            • name: double
                        • name:
                          • Identifier{http://etl.sf.net/2006/samples/ej/0.1}:
                            • value: y
                    • body:
                      • MethodBlock{http://etl.sf.net/2006/samples/ej/0.1}:
                        • content:
                          • ReturnStatement{http://etl.sf.net/2006/samples/ej/0.1}:
                            • value:
                              • DivideOp{http://etl.sf.net/2006/samples/ej/0.1}:
                                • dividend:
                                  • Identifier{http://etl.sf.net/2006/samples/ej/0.1}:
                                    • value: x
                                • divisor:
                                  • Identifier{http://etl.sf.net/2006/samples/ej/0.1}:
                                    • value: y
          • MethodStatement{http://etl.sf.net/2006/samples/ej/0.1}:
            • documentation:
              • DocumentationLine{http://etl.sf.net/2006/samples/ej/0.1}:
                • text: /// Perform arithmetic operation represented by this constant
            • abstractModifier:
              • Modifier{http://etl.sf.net/2006/samples/ej/0.1}:
                • value: abstract
            • returnType:
              • PrimitiveType{http://etl.sf.net/2006/samples/ej/0.1}:
                • name: double
            • name:
              • Identifier{http://etl.sf.net/2006/samples/ej/0.1}:
                • value: eval
            • parameters:
              • Parameter{http://etl.sf.net/2006/samples/ej/0.1}:
                • classifier:
                  • PrimitiveType{http://etl.sf.net/2006/samples/ej/0.1}:
                    • name: double
                • name:
                  • Identifier{http://etl.sf.net/2006/samples/ej/0.1}:
                    • value: x
            • parameters:
              • Parameter{http://etl.sf.net/2006/samples/ej/0.1}:
                • classifier:
                  • PrimitiveType{http://etl.sf.net/2006/samples/ej/0.1}:
                    • name: double
                • name:
                  • Identifier{http://etl.sf.net/2006/samples/ej/0.1}:
                    • value: y
          • MethodStatement{http://etl.sf.net/2006/samples/ej/0.1}:
            • visibilityModifier:
              • Modifier{http://etl.sf.net/2006/samples/ej/0.1}:
                • value: public
            • staticModifier:
              • Modifier{http://etl.sf.net/2006/samples/ej/0.1}:
                • value: static
            • returnType:
              • PrimitiveType{http://etl.sf.net/2006/samples/ej/0.1}:
                • name: void
            • name:
              • Identifier{http://etl.sf.net/2006/samples/ej/0.1}:
                • value: main
            • parameters:
              • Parameter{http://etl.sf.net/2006/samples/ej/0.1}:
                • classifier:
                  • ApplySquareOp{http://etl.sf.net/2006/samples/ej/0.1}:
                    • functor:
                      • PrimitiveType{http://etl.sf.net/2006/samples/ej/0.1}:
                        • name: array
                    • args:
                      • Identifier{http://etl.sf.net/2006/samples/ej/0.1}:
                        • value: String
                • name:
                  • Identifier{http://etl.sf.net/2006/samples/ej/0.1}:
                    • value: args
            • body:
              • MethodBlock{http://etl.sf.net/2006/samples/ej/0.1}:
                • content:
                  • LocalVarStatement{http://etl.sf.net/2006/samples/ej/0.1}:
                    • classifier:
                      • PrimitiveType{http://etl.sf.net/2006/samples/ej/0.1}:
                        • name: double
                    • variables:
                      • Variable{http://etl.sf.net/2006/samples/ej/0.1}:
                        • name:
                          • Identifier{http://etl.sf.net/2006/samples/ej/0.1}:
                            • value: x
                        • initialValue:
                          • ApplyRoundOp{http://etl.sf.net/2006/samples/ej/0.1}:
                            • functor:
                              • AccessOp{http://etl.sf.net/2006/samples/ej/0.1}:
                                • accessed:
                                  • Identifier{http://etl.sf.net/2006/samples/ej/0.1}:
                                    • value: Double
                                • feature:
                                  • Identifier{http://etl.sf.net/2006/samples/ej/0.1}:
                                    • value: parseDouble
                            • args:
                              • ApplySquareOp{http://etl.sf.net/2006/samples/ej/0.1}:
                                • functor:
                                  • Identifier{http://etl.sf.net/2006/samples/ej/0.1}:
                                    • value: args
                                • args:
                                  • IntegerLiteral{http://etl.sf.net/2006/samples/ej/0.1}:
                                    • value: 0
                  • LocalVarStatement{http://etl.sf.net/2006/samples/ej/0.1}:
                    • classifier:
                      • PrimitiveType{http://etl.sf.net/2006/samples/ej/0.1}:
                        • name: double
                    • variables:
                      • Variable{http://etl.sf.net/2006/samples/ej/0.1}:
                        • name:
                          • Identifier{http://etl.sf.net/2006/samples/ej/0.1}:
                            • value: y
                        • initialValue:
                          • ApplyRoundOp{http://etl.sf.net/2006/samples/ej/0.1}:
                            • functor:
                              • AccessOp{http://etl.sf.net/2006/samples/ej/0.1}:
                                • accessed:
                                  • Identifier{http://etl.sf.net/2006/samples/ej/0.1}:
                                    • value: Double
                                • feature:
                                  • Identifier{http://etl.sf.net/2006/samples/ej/0.1}:
                                    • value: parseDouble
                            • args:
                              • ApplySquareOp{http://etl.sf.net/2006/samples/ej/0.1}:
                                • functor:
                                  • Identifier{http://etl.sf.net/2006/samples/ej/0.1}:
                                    • value: args
                                • args:
                                  • IntegerLiteral{http://etl.sf.net/2006/samples/ej/0.1}:
                                    • value: 1
                  • ForStatement{http://etl.sf.net/2006/samples/ej/0.1}:
                    • initVariableDeclaration:
                      • LocalVarStatement{http://etl.sf.net/2006/samples/ej/0.1}:
                        • classifier:
                          • ApplySquareOp{http://etl.sf.net/2006/samples/ej/0.1}:
                            • functor:
                              • Identifier{http://etl.sf.net/2006/samples/ej/0.1}:
                                • value: Iterator
                            • args:
                              • Identifier{http://etl.sf.net/2006/samples/ej/0.1}:
                                • value: Operation
                        • variables:
                          • Variable{http://etl.sf.net/2006/samples/ej/0.1}:
                            • name:
                              • Identifier{http://etl.sf.net/2006/samples/ej/0.1}:
                                • value: i
                            • initialValue:
                              • ApplyRoundOp{http://etl.sf.net/2006/samples/ej/0.1}:
                                • functor:
                                  • AccessOp{http://etl.sf.net/2006/samples/ej/0.1}:
                                    • accessed:
                                      • Identifier{http://etl.sf.net/2006/samples/ej/0.1}:
                                        • value: VALUES
                                    • feature:
                                      • Identifier{http://etl.sf.net/2006/samples/ej/0.1}:
                                        • value: iterator
                    • condition:
                      • ApplyRoundOp{http://etl.sf.net/2006/samples/ej/0.1}:
                        • functor:
                          • AccessOp{http://etl.sf.net/2006/samples/ej/0.1}:
                            • accessed:
                              • Identifier{http://etl.sf.net/2006/samples/ej/0.1}:
                                • value: i
                            • feature:
                              • Identifier{http://etl.sf.net/2006/samples/ej/0.1}:
                                • value: hasNext
                    • body:
                      • MethodBlock{http://etl.sf.net/2006/samples/ej/0.1}:
                        • content:
                          • LocalVarStatement{http://etl.sf.net/2006/samples/ej/0.1}:
                            • classifier:
                              • Identifier{http://etl.sf.net/2006/samples/ej/0.1}:
                                • value: Operation
                            • variables:
                              • Variable{http://etl.sf.net/2006/samples/ej/0.1}:
                                • name:
                                  • Identifier{http://etl.sf.net/2006/samples/ej/0.1}:
                                    • value: op
                                • initialValue:
                                  • ApplyRoundOp{http://etl.sf.net/2006/samples/ej/0.1}:
                                    • functor:
                                      • AccessOp{http://etl.sf.net/2006/samples/ej/0.1}:
                                        • accessed:
                                          • Identifier{http://etl.sf.net/2006/samples/ej/0.1}:
                                            • value: i
                                        • feature:
                                          • Identifier{http://etl.sf.net/2006/samples/ej/0.1}:
                                            • value: next
                          • ExpressionStatement{http://etl.sf.net/2006/samples/ej/0.1}:
                            • expression:
                              • ApplyRoundOp{http://etl.sf.net/2006/samples/ej/0.1}:
                                • functor:
                                  • AccessOp{http://etl.sf.net/2006/samples/ej/0.1}:
                                    • accessed:
                                      • AccessOp{http://etl.sf.net/2006/samples/ej/0.1}:
                                        • accessed:
                                          • Identifier{http://etl.sf.net/2006/samples/ej/0.1}:
                                            • value: System
                                        • feature:
                                          • Identifier{http://etl.sf.net/2006/samples/ej/0.1}:
                                            • value: out
                                    • feature:
                                      • Identifier{http://etl.sf.net/2006/samples/ej/0.1}:
                                        • value: println
                                • args:
                                  • PlusOp{http://etl.sf.net/2006/samples/ej/0.1}:
                                    • summands:
                                      • PlusOp{http://etl.sf.net/2006/samples/ej/0.1}:
                                        • summands:
                                          • PlusOp{http://etl.sf.net/2006/samples/ej/0.1}:
                                            • summands:
                                              • PlusOp{http://etl.sf.net/2006/samples/ej/0.1}:
                                                • summands:
                                                  • PlusOp{http://etl.sf.net/2006/samples/ej/0.1}:
                                                    • summands:
                                                      • PlusOp{http://etl.sf.net/2006/samples/ej/0.1}:
                                                        • summands:
                                                          • Identifier{http://etl.sf.net/2006/samples/ej/0.1}:
                                                            • value: x
                                                        • summands:
                                                          • StringLiteral{http://etl.sf.net/2006/samples/ej/0.1}:
                                                            • value: " "
                                                    • summands:
                                                      • Identifier{http://etl.sf.net/2006/samples/ej/0.1}:
                                                        • value: op
                                                • summands:
                                                  • StringLiteral{http://etl.sf.net/2006/samples/ej/0.1}:
                                                    • value: " "
                                            • summands:
                                              • Identifier{http://etl.sf.net/2006/samples/ej/0.1}:
                                                • value: y
                                        • summands:
                                          • StringLiteral{http://etl.sf.net/2006/samples/ej/0.1}:
                                            • value: " = "
                                    • summands:
                                      • ApplyRoundOp{http://etl.sf.net/2006/samples/ej/0.1}:
                                        • functor:
                                          • AccessOp{http://etl.sf.net/2006/samples/ej/0.1}:
                                            • accessed:
                                              • Identifier{http://etl.sf.net/2006/samples/ej/0.1}:
                                                • value: op
                                            • feature:
                                              • Identifier{http://etl.sf.net/2006/samples/ej/0.1}:
                                                • value: eval
                                        • args:
                                          • Identifier{http://etl.sf.net/2006/samples/ej/0.1}:
                                            • value: x
                                          • Identifier{http://etl.sf.net/2006/samples/ej/0.1}:
                                            • value: y
     1: doctype "../grammars/EJ.g.etl";
     2: /// the samples are taken from corresponding JSR
     3: /// simple enum
     4: enum public Season { 
     5:   literal winter; 
     6:   literal  spring; 
     7:   literal  summer; 
     8:   literal fall; 
     9: };
    10: /// enum with value
    11: enum public Coin {
    12:     literal penny(1); literal  nickel(5); literal dime(10); literal quarter(25);
    13:     maker Coin(int value) { this.value = value; };
    14:     var private final int value;
    15:     to public int value() { return value; };
    16: };
    17: /// abstract enum sample
    18: enum public abstract Operation {
    19:     literal plus {
    20:       to double eval(double x, double y) { return x + y; };
    21:     };
    22:     literal minus {
    23:       to double eval(double x, double y) { return x - y; };
    24:     };
    25:     literal times {
    26:       to double eval(double x, double y) { return x * y; };
    27:     };
    28:     literal divided_by {
    29:       to double eval(double x, double y) { return x / y; };
    30:     };
    31: 
    32:     /// Perform arithmetic operation represented by this constant
    33:     to abstract double eval(double x, double y);
    34: 
    35:     to public static void main(array[String] args) {
    36:         var double x = Double.parseDouble(args[0]);
    37:         var double y = Double.parseDouble(args[1]);
    38: 
    39:         for (var Iterator[Operation] i = VALUES.iterator() : 
    40:              i.hasNext() : ) 
    41:         {
    42:             var Operation op = i.next();
    43:             System.out.println(x + " " + op + " " + y + 
    44:               " = " + op.eval(x, y));
    45:         };
    46:     };
    47: };