/* * To change this license header, choose License Headers in Project Properties. * To change this template file, choose Tools | Templates * and open the template in the editor. */ package IntermediaryCode; import java.util.HashMap; import templates.FunctionInterface; /** * * @author EUGENIO CARVALHO */ public class IRTemplate implements templates.TemplateDescription { public HashMap Formats() throws Exception { return new HashMap() { { String base = "{[PAD(global.position,G.addressLen,' ')]':'}" + "{[T(1)]}" + "{[PAD(block.position,G.addressLen,' ')]':'}" + "{[T(2)]}"; String end = "{[T(3)]}" + "{' T< '[type]' >'} " + "{' --'[comment]}" + "{[T(2)]}" + "{[basicBlock]}"; put("label", "{[T(2)]}{'<'[label]'>'}':'"); put("alloc", "{[T(3)]} 'alloc ' {[TYPE('p1')]', '} {[numElements]' '} {[p1]}" + end); put("assign", base + "{[dst]}' := '{[p1]' '}{[op]' '}{[p2]}" + end); put("pointer_assign", base + "{[dst.pointer]}{[dst]' := '}{[op]' '}{[p1]}" + end); put("unary", base + " {[dst]} ' := '{[op]' '}{[p1]}" + end); // put("copy", base + "{'('[dst.type]')'} {[dst]} ' := '{[p1]}" + end); put("copy", base + " {[dst]} ' := '{[p1]}" + end); put("load", base + "'load '{[TYPE('p1')]' '}{[p1]', '}{[dst]}" + end); put("store", base + "'store '{[TYPE('dst')]' '}{[dst]', '}{[p1]}" + end); put("jump", base + " 'goto ' {'<'[label]'>'}" + end); put("branch", base + " 'if '{[p1]} {' '[op]' '}{[p2]} ' goto ' {'<'[label]'>'}" + end); // put("call", base + " {[dst]' := '} 'call <' {[funcname]} '>, ' {[nump]}" + end); put("call", base + "'call' {' <'[funcname]'>'} {', '[nump]}" + end); put("return", base + " 'return '{[p1]}" + end); put("push_param", base + " 'push_param '{[p1]}" + end); put("push_return", base + " 'push_return '{[p1]}" + end); put("pop_param", base + " 'pop_param '{[p1]}" + end); put("pop_return", base + " 'pop_return '{[p1]}" + end); } }; } public HashMap Functions() throws Exception { return new HashMap() { { put("TYPE", (ctx, args) -> { String attr = args.get(0) + ".type"; if (!ctx.Has(attr)) { return ""; } return "(" + ctx.Get(args.get(0) + ".type") + ")"; }); } }; } }