-
Notifications
You must be signed in to change notification settings - Fork 56
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);