23
CS269: HW/SW Engineering of Embedded Systems, Winter02
How to write a back-end?
public interface Backend {
    void invoke(List args, List sources);
}
public class SimulatorBackend implements Backend {
    public abstract void invoke(List args, List sources) {
         List flags = inspectArguments(args);
         Iterator iter = sources.iterator();
         while (iter.hasNext()) {
             CompileUnitNode ast = iter.next();
             String code = ast.accept(new SimulatorVisitor(),flags);
             printSimulationCode(code);
         }
    }
}
•STEPS
•1. Write a class implements Backend
•2. Write method invoke() in that class
–define the arguments
–design necessary visitors
•3. Write visitors to traverse ASTs
•4. Add flags to compiler command-line
•
public class SimulatorVisitor extends MetaModelVisitor {
    public Object visitProcessDeclNode(
ProcessDeclNode node, List args) { ... }
    public Object visitAwaitStatementNode(
AwaitStatementNode node, List args) { ... }
    ...
}