package sizzle.compiler;
import java.util.ArrayList;
import java.util.List;
import sizzle.parser.syntaxtree.ArrayType;
import sizzle.parser.syntaxtree.Assignment;
import sizzle.parser.syntaxtree.Block;
import sizzle.parser.syntaxtree.BreakStatement;
import sizzle.parser.syntaxtree.BytesLiteral;
import sizzle.parser.syntaxtree.Call;
import sizzle.parser.syntaxtree.CharLiteral;
import sizzle.parser.syntaxtree.Comparison;
import sizzle.parser.syntaxtree.Component;
import sizzle.parser.syntaxtree.Composite;
import sizzle.parser.syntaxtree.Conjunction;
import sizzle.parser.syntaxtree.ContinueStatement;
import sizzle.parser.syntaxtree.Declaration;
import sizzle.parser.syntaxtree.DoStatement;
import sizzle.parser.syntaxtree.EmitStatement;
import sizzle.parser.syntaxtree.ExprList;
import sizzle.parser.syntaxtree.ExprStatement;
import sizzle.parser.syntaxtree.Expression;
import sizzle.parser.syntaxtree.Factor;
import sizzle.parser.syntaxtree.FingerprintLiteral;
import sizzle.parser.syntaxtree.FloatingPointLiteral;
import sizzle.parser.syntaxtree.ForStatement;
import sizzle.parser.syntaxtree.Function;
import sizzle.parser.syntaxtree.FunctionType;
import sizzle.parser.syntaxtree.Identifier;
import sizzle.parser.syntaxtree.IdentifierList;
import sizzle.parser.syntaxtree.IfStatement;
import sizzle.parser.syntaxtree.Index;
import sizzle.parser.syntaxtree.IntegerLiteral;
import sizzle.parser.syntaxtree.MapType;
import sizzle.parser.syntaxtree.Operand;
import sizzle.parser.syntaxtree.OutputType;
import sizzle.parser.syntaxtree.Pair;
import sizzle.parser.syntaxtree.PairList;
import sizzle.parser.syntaxtree.Program;
import sizzle.parser.syntaxtree.ProtoFieldDecl;
import sizzle.parser.syntaxtree.ProtoMember;
import sizzle.parser.syntaxtree.ProtoMemberList;
import sizzle.parser.syntaxtree.ProtoTupleType;
import sizzle.parser.syntaxtree.Regexp;
import sizzle.parser.syntaxtree.RegexpList;
import sizzle.parser.syntaxtree.ResultStatement;
import sizzle.parser.syntaxtree.ReturnStatement;
import sizzle.parser.syntaxtree.Selector;
import sizzle.parser.syntaxtree.SimpleExpr;
import sizzle.parser.syntaxtree.SimpleMember;
import sizzle.parser.syntaxtree.SimpleMemberList;
import sizzle.parser.syntaxtree.SimpleTupleType;
import sizzle.parser.syntaxtree.Start;
import sizzle.parser.syntaxtree.Statement;
import sizzle.parser.syntaxtree.StatementExpr;
import sizzle.parser.syntaxtree.StaticVarDecl;
import sizzle.parser.syntaxtree.StringLiteral;
import sizzle.parser.syntaxtree.SwitchStatement;
import sizzle.parser.syntaxtree.Term;
import sizzle.parser.syntaxtree.TimeLiteral;
import sizzle.parser.syntaxtree.TupleType;
import sizzle.parser.syntaxtree.Type;
import sizzle.parser.syntaxtree.TypeDecl;
import sizzle.parser.syntaxtree.VarDecl;
import sizzle.parser.syntaxtree.WhenStatement;
import sizzle.parser.syntaxtree.WhileStatement;
import sizzle.parser.visitor.GJDepthFirst;
import sizzle.types.SizzleFunction;
import sizzle.types.SizzleType;
public class FunctionFindingVisitor extends GJDepthFirst<SizzleFunction, SymbolTable> {
private final List<SizzleType> formalParameters;
public FunctionFindingVisitor() {
this(new ArrayList<SizzleType>());
}
public FunctionFindingVisitor(final List<SizzleType> formalParameters) {
this.formalParameters = formalParameters;
}
/** {@inheritDoc} */
@Override
public SizzleFunction visit(final Start n, final SymbolTable argu) {
throw new RuntimeException("unimplemented");
}
/** {@inheritDoc} */
@Override
public SizzleFunction visit(final Program n, final SymbolTable argu) {
throw new RuntimeException("unimplemented");
}
/** {@inheritDoc} */
@Override
public SizzleFunction visit(final Declaration n, final SymbolTable argu) {
throw new RuntimeException("unimplemented");
}
/** {@inheritDoc} */
@Override
public SizzleFunction visit(final TypeDecl n, final SymbolTable argu) {
throw new RuntimeException("unimplemented");
}
/** {@inheritDoc} */
@Override
public SizzleFunction visit(final StaticVarDecl n, final SymbolTable argu) {
throw new RuntimeException("unimplemented");
}
/** {@inheritDoc} */
@Override
public SizzleFunction visit(final VarDecl n, final SymbolTable argu) {
throw new RuntimeException("unimplemented");
}
/** {@inheritDoc} */
@Override
public SizzleFunction visit(final Type n, final SymbolTable argu) {
throw new RuntimeException("unimplemented");
}
/** {@inheritDoc} */
@Override
public SizzleFunction visit(final Component n, final SymbolTable argu) {
throw new RuntimeException("unimplemented");
}
/** {@inheritDoc} */
@Override
public SizzleFunction visit(final ArrayType n, final SymbolTable argu) {
throw new RuntimeException("unimplemented");
}
/** {@inheritDoc} */
@Override
public SizzleFunction visit(final TupleType n, final SymbolTable argu) {
throw new RuntimeException("unimplemented");
}
/** {@inheritDoc} */
@Override
public SizzleFunction visit(final SimpleTupleType n, final SymbolTable argu) {
throw new RuntimeException("unimplemented");
}
/** {@inheritDoc} */
@Override
public SizzleFunction visit(final SimpleMemberList n, final SymbolTable argu) {
throw new RuntimeException("unimplemented");
}
/** {@inheritDoc} */
@Override
public SizzleFunction visit(final SimpleMember n, final SymbolTable argu) {
throw new RuntimeException("unimplemented");
}
/** {@inheritDoc} */
@Override
public SizzleFunction visit(final ProtoTupleType n, final SymbolTable argu) {
throw new RuntimeException("unimplemented");
}
/** {@inheritDoc} */
@Override
public SizzleFunction visit(final ProtoMemberList n, final SymbolTable argu) {
throw new RuntimeException("unimplemented");
}
/** {@inheritDoc} */
@Override
public SizzleFunction visit(final ProtoMember n, final SymbolTable argu) {
throw new RuntimeException("unimplemented");
}
/** {@inheritDoc} */
@Override
public SizzleFunction visit(final ProtoFieldDecl n, final SymbolTable argu) {
throw new RuntimeException("unimplemented");
}
/** {@inheritDoc} */
@Override
public SizzleFunction visit(final MapType n, final SymbolTable argu) {
throw new RuntimeException("unimplemented");
}
/** {@inheritDoc} */
@Override
public SizzleFunction visit(final OutputType n, final SymbolTable argu) {
throw new RuntimeException("unimplemented");
}
/** {@inheritDoc} */
@Override
public SizzleFunction visit(final ExprList n, final SymbolTable argu) {
throw new RuntimeException("unimplemented");
}
/** {@inheritDoc} */
@Override
public SizzleFunction visit(final FunctionType n, final SymbolTable argu) {
throw new RuntimeException("unimplemented");
}
/** {@inheritDoc} */
@Override
public SizzleFunction visit(final Statement n, final SymbolTable argu) {
throw new RuntimeException("unimplemented");
}
/** {@inheritDoc} */
@Override
public SizzleFunction visit(final Assignment n, final SymbolTable argu) {
throw new RuntimeException("unimplemented");
}
/** {@inheritDoc} */
@Override
public SizzleFunction visit(final Block n, final SymbolTable argu) {
throw new RuntimeException("unimplemented");
}
/** {@inheritDoc} */
@Override
public SizzleFunction visit(final BreakStatement n, final SymbolTable argu) {
throw new RuntimeException("unimplemented");
}
/** {@inheritDoc} */
@Override
public SizzleFunction visit(final ContinueStatement n, final SymbolTable argu) {
throw new RuntimeException("unimplemented");
}
/** {@inheritDoc} */
@Override
public SizzleFunction visit(final DoStatement n, final SymbolTable argu) {
throw new RuntimeException("unimplemented");
}
/** {@inheritDoc} */
@Override
public SizzleFunction visit(final EmitStatement n, final SymbolTable argu) {
throw new RuntimeException("unimplemented");
}
/** {@inheritDoc} */
@Override
public SizzleFunction visit(final ExprStatement n, final SymbolTable argu) {
throw new RuntimeException("unimplemented");
}
/** {@inheritDoc} */
@Override
public SizzleFunction visit(final ForStatement n, final SymbolTable argu) {
throw new RuntimeException("unimplemented");
}
/** {@inheritDoc} */
@Override
public SizzleFunction visit(final IfStatement n, final SymbolTable argu) {
throw new RuntimeException("unimplemented");
}
/** {@inheritDoc} */
@Override
public SizzleFunction visit(final ResultStatement n, final SymbolTable argu) {
throw new RuntimeException("unimplemented");
}
/** {@inheritDoc} */
@Override
public SizzleFunction visit(final ReturnStatement n, final SymbolTable argu) {
throw new RuntimeException("unimplemented");
}
/** {@inheritDoc} */
@Override
public SizzleFunction visit(final SwitchStatement n, final SymbolTable argu) {
throw new RuntimeException("unimplemented");
}
/** {@inheritDoc} */
@Override
public SizzleFunction visit(final WhenStatement n, final SymbolTable argu) {
throw new RuntimeException("unimplemented");
}
/** {@inheritDoc} */
@Override
public SizzleFunction visit(final IdentifierList n, final SymbolTable argu) {
throw new RuntimeException("unimplemented");
}
/** {@inheritDoc} */
@Override
public SizzleFunction visit(final WhileStatement n, final SymbolTable argu) {
throw new RuntimeException("unimplemented");
}
/** {@inheritDoc} */
@Override
public SizzleFunction visit(final Expression n, final SymbolTable argu) {
throw new RuntimeException("unimplemented");
}
/** {@inheritDoc} */
@Override
public SizzleFunction visit(final Conjunction n, final SymbolTable argu) {
throw new RuntimeException("unimplemented");
}
/** {@inheritDoc} */
@Override
public SizzleFunction visit(final Comparison n, final SymbolTable argu) {
throw new RuntimeException("unimplemented");
}
/** {@inheritDoc} */
@Override
public SizzleFunction visit(final SimpleExpr n, final SymbolTable argu) {
throw new RuntimeException("unimplemented");
}
/** {@inheritDoc} */
@Override
public SizzleFunction visit(final Term n, final SymbolTable argu) {
throw new RuntimeException("unimplemented");
}
/** {@inheritDoc} */
@Override
public SizzleFunction visit(final Factor n, final SymbolTable argu) {
throw new RuntimeException("unimplemented");
}
/** {@inheritDoc} */
@Override
public SizzleFunction visit(final Selector n, final SymbolTable argu) {
throw new RuntimeException("unimplemented");
}
/** {@inheritDoc} */
@Override
public SizzleFunction visit(final Index n, final SymbolTable argu) {
throw new RuntimeException("unimplemented");
}
/** {@inheritDoc} */
@Override
public SizzleFunction visit(final Call n, final SymbolTable argu) {
throw new RuntimeException("unimplemented");
}
/** {@inheritDoc} */
@Override
public SizzleFunction visit(final RegexpList n, final SymbolTable argu) {
throw new RuntimeException("unimplemented");
}
/** {@inheritDoc} */
@Override
public SizzleFunction visit(final Regexp n, final SymbolTable argu) {
throw new RuntimeException("unimplemented");
}
/** {@inheritDoc} */
@Override
public SizzleFunction visit(final Operand n, final SymbolTable argu) {
return n.f0.accept(this, argu);
}
/** {@inheritDoc} */
@Override
public SizzleFunction visit(final Composite n, final SymbolTable argu) {
if (n.f1.present())
return n.f1.accept(this, argu);
return null;
}
/** {@inheritDoc} */
@Override
public SizzleFunction visit(final PairList n, final SymbolTable argu) {
throw new RuntimeException("unimplemented");
}
/** {@inheritDoc} */
@Override
public SizzleFunction visit(final Pair n, final SymbolTable argu) {
throw new RuntimeException("unimplemented");
}
/** {@inheritDoc} */
@Override
public SizzleFunction visit(final Function n, final SymbolTable argu) {
throw new RuntimeException("unimplemented");
}
/** {@inheritDoc} */
@Override
public SizzleFunction visit(final StatementExpr n, final SymbolTable argu) {
throw new RuntimeException("unimplemented");
}
/** {@inheritDoc} */
@Override
public SizzleFunction visit(final Identifier n, final SymbolTable argu) {
final String id = n.f0.tokenImage;
return argu.getFunction(id, this.formalParameters);
}
/** {@inheritDoc} */
@Override
public SizzleFunction visit(final IntegerLiteral n, final SymbolTable argu) {
throw new RuntimeException("unimplemented");
}
/** {@inheritDoc} */
@Override
public SizzleFunction visit(final FingerprintLiteral n, final SymbolTable argu) {
throw new RuntimeException("unimplemented");
}
/** {@inheritDoc} */
@Override
public SizzleFunction visit(final FloatingPointLiteral n, final SymbolTable argu) {
throw new RuntimeException("unimplemented");
}
/** {@inheritDoc} */
@Override
public SizzleFunction visit(final CharLiteral n, final SymbolTable argu) {
throw new RuntimeException("unimplemented");
}
/** {@inheritDoc} */
@Override
public SizzleFunction visit(final StringLiteral n, final SymbolTable argu) {
throw new RuntimeException("unimplemented");
}
/** {@inheritDoc} */
@Override
public SizzleFunction visit(final BytesLiteral n, final SymbolTable argu) {
throw new RuntimeException("unimplemented");
}
/** {@inheritDoc} */
@Override
public SizzleFunction visit(final TimeLiteral n, final SymbolTable argu) {
throw new RuntimeException("unimplemented");
}
}