Skip to content

Athenizer use cases examples

Yuval Simon edited this page Jun 2, 2017 · 7 revisions

Many times we find ourselves struggling with some complicated, hard for understanding code - not with the Athenizer!
Using the Athenizer would convert some code to much more readable equivalent code.
Here are a few examples of complicated original code and much simpler athenized code:


Original code:

return precedence.greater(host, inner) || precedence.equal(host, inner) || simple(inner) ? inner : parenthesize(inner);

Would be converted by the Athenizer to:

if (precedence.greater(host, inner) || precedence.equal(host, inner) || simple(inner)) {
    return inner;
}
ParenthesizedExpression x1;
x1 = parenthesize(inner);
return x1;

Original code:

return iz.nodeTypeEquals(¢, PREFIX_EXPRESSION) ? level((PrefixExpression) ¢)
    : iz.nodeTypeEquals(¢, PARENTHESIZED_EXPRESSION) ? level(core(¢)) //
        : iz.nodeTypeEquals(¢, INFIX_EXPRESSION) ? level((InfixExpression) ¢) //
            : iz.nodeTypeEquals(¢, NUMBER_LITERAL) ? az.bit(az.numberLiteral(¢).getToken().startsWith("-")) //
                : 0;

Would be converted by the Athenizer after some applications to:

if (iz.nodeTypeEquals(¢, PREFIX_EXPRESSION)) {
  int i1;
  i1 = level((PrefixExpression) ¢);
  return i1;
}
if (iz.nodeTypeEquals(¢, PARENTHESIZED_EXPRESSION)) {
  return level(core(¢));
}
return iz.nodeTypeEquals(¢, INFIX_EXPRESSION) ? level((InfixExpression) ¢)
    : iz.nodeTypeEquals(¢, NUMBER_LITERAL) ? az.bit(az.numberLiteral(¢).getToken().startsWith("-")) : 0;

By applying it even more times we would end up with the code:

if (iz.nodeTypeEquals(¢, PREFIX_EXPRESSION)) {
  int i1;
  i1 = level((PrefixExpression) ¢);
  return i1;
}
if (iz.nodeTypeEquals(¢, PARENTHESIZED_EXPRESSION)) {
  int i2;
  Expression x1;
  x1 = core(¢);
  i2 = level(x1);
  return i2;
}
if (iz.nodeTypeEquals(¢, INFIX_EXPRESSION)) {
  int i3;
  i3 = level((InfixExpression) ¢);
  return i3;
}
if (iz.nodeTypeEquals(¢, NUMBER_LITERAL)) {
  int i4;
  boolean b1;
  String s1;
  NumberLiteral l1;
  l1 = az.numberLiteral(¢);
  s1 = l1.getToken();
  b1 = s1.startsWith("-");
  i4 = az.bit(b1);
  return i4;
}
return 0;

Original code:

final InfixExpression $ = ast.newInfixExpression();
$.setOperator(¢);
$.setLeftOperand(make.plant(left).intoLeft($));
$.setRightOperand(¢ != op.PLUS2 ? make.plant(right).into($)
    : !precedence.greater($, right)
        && !precedence.equal($, right)
        && !iz.simple(right) ? subject.operand(right).parenthesis() : right);

After a few applications:

final InfixExpression $;
$ = ast.newInfixExpression();
$.setOperator(¢);
Expression x1;
PlantingExpression x2;
x2 = make.plant(left);
x1 = x2.intoLeft($);
$.setLeftOperand(x1);
Expression x3 = ¢ != op.PLUS2 ? make.plant(right).into($)
    : !precedence.greater($, right) && !precedence.equal($, right) && !iz.simple(right) ? subject.operand(right).parenthesis() : right;
$.setRightOperand(x3);

After few more applications we would end up with:

final InfixExpression $;
$ = ast.newInfixExpression();
$.setOperator(¢);
Expression x1;
PlantingExpression x2;
x2 = make.plant(left);
x1 = x2.intoLeft($);
$.setLeftOperand(x1);
Expression x3;
if (¢ != op.PLUS2) {
  PlantingExpression x4;
  x4 = make.plant(right);
  x3 = x4.into($);
} else {
  if (!precedence.greater($, right) && !precedence.equal($, right) && !iz.simple(right)) {
    x3 = subject.operand(right).parenthesis();
  } else {
    x3 = right;
  }
}
$.setRightOperand(x3);

Clone this wiki locally