• DoctypeDeclaration{http://etl.sf.net/etl/doctype/0.2.1}:
    • systemId: "calculator-logic-0_2_1.g.etl"
  • VarStatement{http://etl.sf.net/samples/calculator/vars}:
    • type: let
    • name:
      • Name{http://etl.sf.net/samples/calculator/vars}:
        • literal: dozen1
    • value:
      • Sequence{http://etl.sf.net/samples/calculator}:
        • statements:
          • VarStatement{http://etl.sf.net/samples/calculator/vars}:
            • type: var
            • name:
              • Name{http://etl.sf.net/samples/calculator/vars}:
                • literal: rc
            • value:
              • NumberLiteral{http://etl.sf.net/samples/calculator}:
                • value: 0
          • VarStatement{http://etl.sf.net/samples/calculator/vars}:
            • type: var
            • name:
              • Name{http://etl.sf.net/samples/calculator/vars}:
                • literal: n
            • value:
              • NumberLiteral{http://etl.sf.net/samples/calculator}:
                • value: 12
          • WhileStatement{http://etl.sf.net/samples/calculator/logic}:
            • label: outer
            • condition:
              • BooleanLiteral{http://etl.sf.net/samples/calculator}:
                • value: true
            • body:
              • Sequence{http://etl.sf.net/samples/calculator}:
                • statements:
                  • WhileStatement{http://etl.sf.net/samples/calculator/logic}:
                    • condition:
                      • BooleanLiteral{http://etl.sf.net/samples/calculator}:
                        • value: true
                    • body:
                      • Sequence{http://etl.sf.net/samples/calculator}:
                        • statements:
                          • ExpressionStatement{http://etl.sf.net/samples/calculator}:
                            • value:
                              • IfExpression{http://etl.sf.net/samples/calculator/logic}:
                                • condition:
                                  • LessThen{http://etl.sf.net/samples/calculator/logic}:
                                    • first:
                                      • Name{http://etl.sf.net/samples/calculator/vars}:
                                        • literal: n
                                    • second:
                                      • NumberLiteral{http://etl.sf.net/samples/calculator}:
                                        • value: 1
                                • thenPart:
                                  • Sequence{http://etl.sf.net/samples/calculator}:
                                    • statements:
                                      • BreakStatement{http://etl.sf.net/samples/calculator/logic}:
                                        • label: outer
                                • elsePart:
                                  • Sequence{http://etl.sf.net/samples/calculator}:
                                    • statements:
                                      • ExpressionStatement{http://etl.sf.net/samples/calculator}:
                                        • value:
                                          • Assignment{http://etl.sf.net/samples/calculator/vars}:
                                            • first:
                                              • Name{http://etl.sf.net/samples/calculator/vars}:
                                                • literal: n
                                            • second:
                                              • Minus{http://etl.sf.net/samples/calculator/arith}:
                                                • first:
                                                  • Name{http://etl.sf.net/samples/calculator/vars}:
                                                    • literal: n
                                                • second:
                                                  • NumberLiteral{http://etl.sf.net/samples/calculator}:
                                                    • value: 1
                                      • ExpressionStatement{http://etl.sf.net/samples/calculator}:
                                        • value:
                                          • Assignment{http://etl.sf.net/samples/calculator/vars}:
                                            • first:
                                              • Name{http://etl.sf.net/samples/calculator/vars}:
                                                • literal: rc
                                            • second:
                                              • Plus{http://etl.sf.net/samples/calculator/arith}:
                                                • first:
                                                  • Name{http://etl.sf.net/samples/calculator/vars}:
                                                    • literal: rc
                                                • second:
                                                  • NumberLiteral{http://etl.sf.net/samples/calculator}:
                                                    • value: 1
                                      • ContinueStatement{http://etl.sf.net/samples/calculator/logic}:
                                        • label: outer
          • ExpressionStatement{http://etl.sf.net/samples/calculator}:
            • value:
              • Name{http://etl.sf.net/samples/calculator/vars}:
                • literal: rc
  • AssertStatement{http://etl.sf.net/samples/calculator/logic}:
    • condition:
      • Equal{http://etl.sf.net/samples/calculator/logic}:
        • first:
          • Name{http://etl.sf.net/samples/calculator/vars}:
            • literal: dozen1
        • second:
          • NumberLiteral{http://etl.sf.net/samples/calculator}:
            • value: 12
  • VarStatement{http://etl.sf.net/samples/calculator/vars}:
    • type: let
    • name:
      • Name{http://etl.sf.net/samples/calculator/vars}:
        • literal: dozen2
    • value:
      • Sequence{http://etl.sf.net/samples/calculator}:
        • statements:
          • VarStatement{http://etl.sf.net/samples/calculator/vars}:
            • type: var
            • name:
              • Name{http://etl.sf.net/samples/calculator/vars}:
                • literal: a
            • value:
              • NumberLiteral{http://etl.sf.net/samples/calculator}:
                • value: 420
          • VarStatement{http://etl.sf.net/samples/calculator/vars}:
            • type: var
            • name:
              • Name{http://etl.sf.net/samples/calculator/vars}:
                • literal: b
            • value:
              • NumberLiteral{http://etl.sf.net/samples/calculator}:
                • value: 96
          • WhileStatement{http://etl.sf.net/samples/calculator/logic}:
            • condition:
              • NotEqual{http://etl.sf.net/samples/calculator/logic}:
                • first:
                  • Name{http://etl.sf.net/samples/calculator/vars}:
                    • literal: a
                • second:
                  • NumberLiteral{http://etl.sf.net/samples/calculator}:
                    • value: 0
            • body:
              • Sequence{http://etl.sf.net/samples/calculator}:
                • statements:
                  • ExpressionStatement{http://etl.sf.net/samples/calculator}:
                    • value:
                      • IfExpression{http://etl.sf.net/samples/calculator/logic}:
                        • condition:
                          • LessThen{http://etl.sf.net/samples/calculator/logic}:
                            • first:
                              • Name{http://etl.sf.net/samples/calculator/vars}:
                                • literal: a
                            • second:
                              • Name{http://etl.sf.net/samples/calculator/vars}:
                                • literal: b
                        • thenPart:
                          • Sequence{http://etl.sf.net/samples/calculator}:
                            • statements:
                              • VarStatement{http://etl.sf.net/samples/calculator/vars}:
                                • type: let
                                • name:
                                  • Name{http://etl.sf.net/samples/calculator/vars}:
                                    • literal: t
                                • value:
                                  • Name{http://etl.sf.net/samples/calculator/vars}:
                                    • literal: a
                              • ExpressionStatement{http://etl.sf.net/samples/calculator}:
                                • value:
                                  • Assignment{http://etl.sf.net/samples/calculator/vars}:
                                    • first:
                                      • Name{http://etl.sf.net/samples/calculator/vars}:
                                        • literal: a
                                    • second:
                                      • Name{http://etl.sf.net/samples/calculator/vars}:
                                        • literal: b
                              • ExpressionStatement{http://etl.sf.net/samples/calculator}:
                                • value:
                                  • Assignment{http://etl.sf.net/samples/calculator/vars}:
                                    • first:
                                      • Name{http://etl.sf.net/samples/calculator/vars}:
                                        • literal: b
                                    • second:
                                      • Name{http://etl.sf.net/samples/calculator/vars}:
                                        • literal: t
                  • ExpressionStatement{http://etl.sf.net/samples/calculator}:
                    • value:
                      • Assignment{http://etl.sf.net/samples/calculator/vars}:
                        • first:
                          • Name{http://etl.sf.net/samples/calculator/vars}:
                            • literal: a
                        • second:
                          • Minus{http://etl.sf.net/samples/calculator/arith}:
                            • first:
                              • Name{http://etl.sf.net/samples/calculator/vars}:
                                • literal: a
                            • second:
                              • Name{http://etl.sf.net/samples/calculator/vars}:
                                • literal: b
          • ExpressionStatement{http://etl.sf.net/samples/calculator}:
            • value:
              • Name{http://etl.sf.net/samples/calculator/vars}:
                • literal: b
  • AssertStatement{http://etl.sf.net/samples/calculator/logic}:
    • condition:
      • Equal{http://etl.sf.net/samples/calculator/logic}:
        • first:
          • Name{http://etl.sf.net/samples/calculator/vars}:
            • literal: dozen2
        • second:
          • NumberLiteral{http://etl.sf.net/samples/calculator}:
            • value: 12
  • AssertStatement{http://etl.sf.net/samples/calculator/logic}:
    • condition:
      • Matches{http://etl.sf.net/samples/calculator/logic}:
        • first:
          • StringLiteral{http://etl.sf.net/samples/calculator}:
            • value: "\\"
        • second:
          • RegExLiteral{http://etl.sf.net/samples/calculator}:
            • value: R"\\"
  • AssertStatement{http://etl.sf.net/samples/calculator/logic}:
    • condition:
      • Matches{http://etl.sf.net/samples/calculator/logic}:
        • first:
          • StringLiteral{http://etl.sf.net/samples/calculator}:
            • value: "\\abba\\"
        • second:
          • RegExLiteral{http://etl.sf.net/samples/calculator}:
            • value: R".\w{4,}."
  • AssertStatement{http://etl.sf.net/samples/calculator/logic}:
    • condition:
      • LogicalNot{http://etl.sf.net/samples/calculator/logic}:
        • value:
          • Matches{http://etl.sf.net/samples/calculator/logic}:
            • first:
              • StringLiteral{http://etl.sf.net/samples/calculator}:
                • value: "\\a+ba\\"
            • second:
              • RegExLiteral{http://etl.sf.net/samples/calculator}:
                • value: R".\w{4,}."
  • AssertStatement{http://etl.sf.net/samples/calculator/logic}:
    • condition:
      • Equal{http://etl.sf.net/samples/calculator/logic}:
        • first:
          • StringLiteral{http://etl.sf.net/samples/calculator}:
            • value: "1111"
        • second:
          • StringLiteral{http://etl.sf.net/samples/calculator}:
            • value: "\x31\u0031\U31;\U0000031;"
  • AssertStatement{http://etl.sf.net/samples/calculator/logic}:
    • condition:
      • Equal{http://etl.sf.net/samples/calculator/logic}:
        • first:
          • Identity{http://etl.sf.net/samples/calculator}:
            • value:
              • IfExpression{http://etl.sf.net/samples/calculator/logic}:
                • condition:
                  • Equal{http://etl.sf.net/samples/calculator/logic}:
                    • first:
                      • NumberLiteral{http://etl.sf.net/samples/calculator}:
                        • value: 1
                    • second:
                      • NumberLiteral{http://etl.sf.net/samples/calculator}:
                        • value: 2
                • thenPart:
                  • NumberLiteral{http://etl.sf.net/samples/calculator}:
                    • value: 11
        • second:
          • Name{http://etl.sf.net/samples/calculator/vars}:
            • literal: null
  • AssertStatement{http://etl.sf.net/samples/calculator/logic}:
    • condition:
      • Equal{http://etl.sf.net/samples/calculator/logic}:
        • first:
          • Identity{http://etl.sf.net/samples/calculator}:
            • value:
              • IfExpression{http://etl.sf.net/samples/calculator/logic}:
                • condition:
                  • BooleanLiteral{http://etl.sf.net/samples/calculator}:
                    • value: false
                • thenPart:
                  • NumberLiteral{http://etl.sf.net/samples/calculator}:
                    • value: 11
                • elsePart:
                  • Plus{http://etl.sf.net/samples/calculator/arith}:
                    • first:
                      • NumberLiteral{http://etl.sf.net/samples/calculator}:
                        • value: 11
                    • second:
                      • NumberLiteral{http://etl.sf.net/samples/calculator}:
                        • value: 11
        • second:
          • NumberLiteral{http://etl.sf.net/samples/calculator}:
            • value: 22
  • AssertStatement{http://etl.sf.net/samples/calculator/logic}:
    • condition:
      • Equal{http://etl.sf.net/samples/calculator/logic}:
        • first:
          • Identity{http://etl.sf.net/samples/calculator}:
            • value:
              • IfExpression{http://etl.sf.net/samples/calculator/logic}:
                • condition:
                  • BooleanLiteral{http://etl.sf.net/samples/calculator}:
                    • value: true
                • thenPart:
                  • NumberLiteral{http://etl.sf.net/samples/calculator}:
                    • value: 11
                • elsePart:
                  • Plus{http://etl.sf.net/samples/calculator/arith}:
                    • first:
                      • NumberLiteral{http://etl.sf.net/samples/calculator}:
                        • value: 11
                    • second:
                      • NumberLiteral{http://etl.sf.net/samples/calculator}:
                        • value: 11
        • second:
          • NumberLiteral{http://etl.sf.net/samples/calculator}:
            • value: 11
     1: doctype "calculator-logic-0_2_1.g.etl";
     2: 
     3: let dozen1 = {
     4:     var rc = 0;
     5:     var n = 12;
     6:     while outer (true) {
     7:         while(true) {
     8:             if(n < 1) {
     9:                 break outer;
    10:             } else {
    11:                 n = n - 1;
    12:                 rc = rc + 1;
    13:                 continue outer;
    14:             }; 
    15:         };
    16:     };
    17:     rc;
    18: };
    19: assert dozen1 == 12;
    20: let dozen2 = {
    21:     var a = 420;
    22:     var b = 96;
    23:     while(a != 0) {
    24:         if(a < b) {
    25:             let t = a;
    26:             a = b;
    27:             b = t;
    28:         };
    29:         a = a - b;
    30:     };
    31:     b;
    32: };
    33: 
    34: assert dozen2 == 12;
    35: assert "\\" ==~ R"\\";
    36: assert "\\abba\\" ==~ R".\w{4,}.";
    37: assert ! "\\a+ba\\" ==~ R".\w{4,}.";
    38: assert "1111" == "\x31\u0031\U31;\U0000031;";
    39: assert (if(1==2)  11) == null;
    40: assert (if(false) 11 else 11 + 11) == 22;
    41: assert (if(true)  11 else 11 + 11) == 11;
    42: