use of gov.sandia.n2a.language.parse.ASTList in project n2a by frothga.
the class AccessElement method getOperandsFrom.
public void getOperandsFrom(SimpleNode node) throws ParseException {
if (node.jjtGetNumChildren() != 1)
throw new Error("AST for function has unexpected form");
Object o = node.jjtGetChild(0);
if (!(o instanceof ASTList))
throw new Error("AST for function has unexpected form");
ASTList l = (ASTList) o;
int count = l.jjtGetNumChildren();
operands = new Operator[count + 1];
String value = node.jjtGetValue().toString();
// Remove "()" from the end of name.
operands[0] = new AccessVariable(value.substring(0, value.length() - 2));
for (int i = 0; i < count; i++) {
operands[i + 1] = Operator.getFrom((SimpleNode) l.jjtGetChild(i));
}
}
use of gov.sandia.n2a.language.parse.ASTList in project n2a by frothga.
the class Operator method getFrom.
public static Operator getFrom(SimpleNode node) throws ParseException {
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.ASTList 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.ASTList in project n2a by frothga.
the class Function method getOperandsFrom.
public void getOperandsFrom(SimpleNode node) throws ParseException {
if (node.jjtGetNumChildren() == 0) {
operands = new Operator[0];
return;
}
if (node.jjtGetNumChildren() != 1)
throw new Error("AST for function has unexpected form");
Object o = node.jjtGetChild(0);
if (!(o instanceof ASTList))
throw new Error("AST for function has unexpected form");
ASTList l = (ASTList) o;
int count = l.jjtGetNumChildren();
operands = new Operator[count];
for (int i = 0; i < count; i++) operands[i] = Operator.getFrom((SimpleNode) l.jjtGetChild(i));
}
Aggregations