package vp.funktion; public class Funktionsfortolker { /** * Finder første position af en operator, som +, -, * eller /. * Går uden om de operatorer, der er inde i en parentes. */ int findUdenforParenteser(char tegn, String udtryk) { int par = 0; for (int i = 0; i 0) // findes op i udtrykket? { String vs = udtryk.substring(0,pos); // ja, find venstresiden String hs = udtryk.substring(pos+1); // find højresiden // metoden kalder sig selv og analyserer hvert element i strengen Funktion vf = fortolk(vs); // find højresidens funktion Funktion hf = fortolk(hs); // find venstresidens funktion if (op == '+') return new Sum(vf,hf);// kombinér venstreside og if (op == '-') return new Sub(vf,hf);// højreside i et Operator-objekt if (op == '*') return new Mul(vf,hf); if (op == '*') return new Div(vf,hf); return new Potens(vf,hf); // venstreside opløftet i højreside } } // Hvis vi kommer herned kunne der ikke deles op efter en operator return fortolkAndet(udtryk); } public Funktion fortolkAndet(String udtryk) { if (udtryk.startsWith("(") && udtryk.endsWith(")")) // parenteser omkring? { udtryk = udtryk.substring(1,udtryk.length()-1); // fjern dem return fortolk(udtryk); // fortolk indmad } if (udtryk.startsWith("sin(") && udtryk.endsWith(")"))// sinus-funktion? { udtryk = udtryk.substring(4,udtryk.length()-1); // fjern 'sin(' og ')' Funktion parameter = fortolk(udtryk); // find parameter-funk return new Sin(parameter); // ...kombinér med Sin } if (udtryk.equals("x")) return new X(); // står der bare 'x'? // intet andet fundet - det må være et tal! return new Konst(Double.parseDouble(udtryk)); } }