use of gov.sandia.n2a.language.parse.ASTIdentifier in project n2a by frothga.
the class Split method getOperandsFrom.
public void getOperandsFrom(SimpleNode node) throws ParseException {
if (!(node instanceof ASTList))
throw new Error("AST for type list has unexpected form");
ASTList l = (ASTList) node;
int count = l.jjtGetNumChildren();
names = new String[count];
for (int i = 0; i < count; i++) {
SimpleNode n = (SimpleNode) l.jjtGetChild(i);
if (!(n instanceof ASTIdentifier))
throw new ParseException("Items in $type list must all be part names.");
names[i] = n.jjtGetValue().toString();
}
}
use of gov.sandia.n2a.language.parse.ASTIdentifier 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;
}
Aggregations