use of gov.sandia.n2a.language.parse.ASTConstant in project n2a by frothga.
the class Operator method getFrom.
public static Operator getFrom(SimpleNode node) throws Exception {
Operator result;
if (node instanceof ASTOperator) {
Factory f = operators.get(node.jjtGetValue().toString());
result = f.createInstance();
} else if (node instanceof ASTIdentifier) {
String value = node.jjtGetValue().toString();
if (value.endsWith("()")) {
Factory f = operators.get(value.substring(0, value.length() - 2));
if (// It's either this or an undefined function. In the second case, variable access will fail.
f == null)
// It's either this or an undefined function. In the second case, variable access will fail.
result = new AccessElement();
else
result = f.createInstance();
} else {
result = new AccessVariable();
}
} else if (node instanceof ASTConstant)
result = new Constant();
else if (node instanceof ASTMatrix)
result = new BuildMatrix();
else if (node instanceof ASTList) {
if (node.jjtGetNumChildren() == 1)
return getFrom((SimpleNode) node.jjtGetChild(0));
// Lists can exist elsewhere besides a $type split, but they should be processed out by getOperandsFrom(SimpleNode).
result = new Split();
} else
result = new Operator();
result.getOperandsFrom(node);
return result;
}
use of gov.sandia.n2a.language.parse.ASTConstant in project n2a by frothga.
the class BuildMatrix method getOperandsFrom.
public void getOperandsFrom(SimpleNode node) throws Exception {
int rows = node.jjtGetNumChildren();
int cols = 0;
for (int r = 0; r < rows; r++) {
SimpleNode row = (SimpleNode) node.jjtGetChild(r);
int c = 1;
if (!(row instanceof ASTConstant))
c = row.jjtGetNumChildren();
cols = Math.max(cols, c);
}
operands = new Operator[cols][rows];
for (int r = 0; r < rows; r++) {
SimpleNode row = (SimpleNode) node.jjtGetChild(r);
if (row instanceof ASTConstant) {
operands[0][r] = Operator.getFrom(row);
operands[0][r].parent = this;
} else {
int currentCols = row.jjtGetNumChildren();
for (int c = 0; c < currentCols; c++) {
operands[c][r] = Operator.getFrom((SimpleNode) row.jjtGetChild(c));
operands[c][r].parent = this;
}
}
}
}
Aggregations