• 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}:
    • name:
      • net
      • sf
      • etl
      • samples
      • Forumula
    • content:
      • Namespace{http://etl.sf.net/etl/grammar/0.2.1}:
        • defaultModifier:
          • Modifier{http://etl.sf.net/etl/grammar/0.2.1}:
            • value: default
        • prefix: f
        • uri: "http://etl.sf.net/2008/samples/plans/formula"
      • Context{http://etl.sf.net/etl/grammar/0.2.1}:
        • name: Expressions
        • content:
          • OperatorDefinition{http://etl.sf.net/etl/grammar/0.2.1}:
            • isComposite:
              • Modifier{http://etl.sf.net/etl/grammar/0.2.1}:
                • value: composite
            • name: FloatNumber
            • associativity: f
            • syntax:
              • Let{http://etl.sf.net/etl/grammar/0.2.1}:
                • name: value
                • operator: =
                • expression:
                  • ChoiceOp{http://etl.sf.net/etl/grammar/0.2.1}:
                    • options:
                      • IntegerOp{http://etl.sf.net/etl/grammar/0.2.1}:
                      • options:
                        • FloatOp{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: Identifier
                • associativity: f
                • 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}:
                • OperatorDefinition{http://etl.sf.net/etl/grammar/0.2.1}:
                  • isComposite:
                    • Modifier{http://etl.sf.net/etl/grammar/0.2.1}:
                      • value: composite
                  • name: Unit
                  • associativity: f
                  • syntax:
                    • Let{http://etl.sf.net/etl/grammar/0.2.1}:
                      • name: name
                      • operator: =
                      • expression:
                        • ChoiceOp{http://etl.sf.net/etl/grammar/0.2.1}:
                          • options:
                            • TokenOp{http://etl.sf.net/etl/grammar/0.2.1}:
                              • value: KwH
                          • options:
                            • TokenOp{http://etl.sf.net/etl/grammar/0.2.1}:
                              • value: USD
                • OperatorDefinition{http://etl.sf.net/etl/grammar/0.2.1}:
                  • name: Money
                  • associativity: fx
                  • precedence: 50
                  • text: $
                  • 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: UnaryMinus
                  • associativity: fy
                  • precedence: 100
                  • text: -
                  • 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: Multiply
                  • associativity: yfx
                  • precedence: 200
                  • text: *
                  • syntax:
                    • Let{http://etl.sf.net/etl/grammar/0.2.1}:
                      • name: left
                      • 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: right
                      • 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: Divide
                  • associativity: yfx
                  • precedence: 200
                  • text: /
                  • syntax:
                    • Let{http://etl.sf.net/etl/grammar/0.2.1}:
                      • name: left
                      • 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: right
                      • 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: Plus
                  • associativity: yfx
                  • precedence: 300
                  • text: +
                  • syntax:
                    • Let{http://etl.sf.net/etl/grammar/0.2.1}:
                      • name: left
                      • 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: right
                      • 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: Minus
                  • associativity: yfx
                  • precedence: 300
                  • text: -
                  • syntax:
                    • Let{http://etl.sf.net/etl/grammar/0.2.1}:
                      • name: left
                      • 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: right
                      • 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: Less
                  • associativity: xfx
                  • precedence: 500
                  • text: <
                  • syntax:
                    • Let{http://etl.sf.net/etl/grammar/0.2.1}:
                      • name: left
                      • 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: right
                      • 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: Greater
                  • associativity: xfx
                  • precedence: 500
                  • text: >
                  • syntax:
                    • Let{http://etl.sf.net/etl/grammar/0.2.1}:
                      • name: left
                      • 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: right
                      • 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: If
                  • associativity: fy
                  • precedence: 800
                  • 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: if
                    • Let{http://etl.sf.net/etl/grammar/0.2.1}:
                      • name: condition
                      • 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: then
                      • 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: else
                        • 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
                    • OperatorDefinition{http://etl.sf.net/etl/grammar/0.2.1}:
                      • isComposite:
                        • Modifier{http://etl.sf.net/etl/grammar/0.2.1}:
                          • value: composite
                      • name: Account
                      • associativity: fx
                      • precedence: 1000
                      • 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: account
                        • Let{http://etl.sf.net/etl/grammar/0.2.1}:
                          • name: name
                          • operator: =
                          • expression:
                            • IdentifierOp{http://etl.sf.net/etl/grammar/0.2.1}:
                          • ExpressionStatement{http://etl.sf.net/etl/grammar/0.2.1}:
                            • syntax:
                              • Sequence{http://etl.sf.net/etl/grammar/0.2.1}:
                                • syntax:
                                  • KeywordStatement{http://etl.sf.net/etl/grammar/0.2.1}:
                                    • text: <-
                          • Let{http://etl.sf.net/etl/grammar/0.2.1}:
                            • name: value
                            • operator: =
                            • expression:
                              • OperandOp{http://etl.sf.net/etl/grammar/0.2.1}:
                                • position: right
                   1: doctype public "-//IDN etl.sf.net//ETL//Grammar 0.2.1";
                   2: 
                   3: grammar net.sf.etl.samples.Forumula {
                   4: 	namespace default f = "http://etl.sf.net/2008/samples/plans/formula";
                   5: 
                   6: 	context Expressions {
                   7: 		op composite FloatNumber(f) {
                   8: 			@value = integer | float;
                   9: 		};
                  10: 
                  11: 		op composite Identifier(f) {
                  12: 			@value = identifier;
                  13: 		};
                  14: 
                  15: 
                  16: 		op composite Unit(f) {
                  17: 			@name = token(KwH) | token(USD);
                  18: 		};
                  19: 
                  20: 		op Money(fx,50,$) {
                  21: 			@value = right;
                  22: 		};
                  23: 
                  24: 		op UnaryMinus(fy,100,-) {
                  25: 			@value = right;
                  26: 		};
                  27: 
                  28: 		op Multiply(yfx,200,*) {
                  29: 			@left = left;
                  30: 			@right = right;
                  31: 		};
                  32: 
                  33: 		op Divide(yfx,200,/) {
                  34: 			@left = left;
                  35: 			@right = right;
                  36: 		};
                  37: 
                  38: 		op Plus(yfx,300,+) {
                  39: 			@left = left;
                  40: 			@right = right;
                  41: 		};
                  42: 
                  43: 		op Minus(yfx,300,-) {
                  44: 			@left = left;
                  45: 			@right = right;
                  46: 		};
                  47: 
                  48: 
                  49: 		op Less(xfx,500, < ) {
                  50: 			@left = left;
                  51: 			@right = right;
                  52: 		};
                  53: 
                  54: 		op Greater(xfx,500, > ) {
                  55: 			@left = left;
                  56: 			@right = right;
                  57: 		};
                  58: 
                  59: 		op composite If(fy, 800) {
                  60: 			% if;
                  61: 			@ condition = expression;
                  62: 			% then;
                  63: 			@ thenPart = expression;
                  64: 			% else;
                  65: 			@ elsePart = right;
                  66: 		};
                  67: 
                  68: 		op composite Account(fx, 1000) {
                  69: 			% account;
                  70: 			@ name = identifier;
                  71: 			% <-;
                  72: 			@ value = right;
                  73: 		};
                  74: 	};
                  75: };