Java Objekt in C++-Routine auswerten?

Und wozu dann der Zirkus mit antlr? du musst eine eval-Funktion schreiben, und zwar rekursiv über deinen Baum…

etwa

evalop(left,right,op)

gegeben durch eval(left)+eval(right) und op=„+“

gegeben durch eval(left)eval(right) und op=""

usw.

Irgendwo musst du ja die strings durch die arithmetischen Operationen von Java ersetzen - irgendwo ist wohl auch eine Funktion, die eine String in eine double-Variable verwandelt.

Soo ich bins nochmal.
Ich weiß jetzt endlich wie ichs machen muss.

Ich habe in Java einen Differentiator.java der nur den native-call macht. Dann habe ich eine differentiate Methode auf der „C-Seite“, die so aussieht:

		double h = 2;
		double temp = (f(x + h) - f(x - h)) / (2 * h);
		while (true) {
			h /= 2;
			if (abs(temp - (f(x + h) - f(x - h)) / (2 * h)) > EPS) {
				temp = (f(x + h) - f(x - h)) / (2 * h);
				printf("%f
", h);

			} else {
				break;
			}
		}
		return temp;
	}```

Ich stecke also oben eine Function rein, die ich mir vorher aus dem Javaobjekt "gewrappt" habe. Der ()-Operator eines "gewrappten" JavaFunction Objekts ist dann so überladen:
```double operator()(double x) const{
return env->CallDoubleMethod(instance,fct,x);
}

Wobei „instance“ das JavaObjekt ist und „fct“ die eval-Methode des Java Functionsobjekts, die ich über die Reflection API „rauskriegen“ muss.
Wenn ich also in der differentiate Methode f(x+h) rufe, macht der überladene ()-Operator wieder einen Javacall und führt die eval-Function aus. Jetzt wo ichs verstanden hab, ist es nicht mehr sooo schwer und ich verusche mich heute an der Umsetzung :slight_smile:

Grüße

Soo, es läuft jetzt alles ziemlich gut. Danke nochmal an alle :stuck_out_tongue_winking_eye: