Arithmetische Auswertung
Zum Auswerten der arithmetischen Ausdrücke organisiert man die Funktionen so um, dass sie den Wert des entsprechenden Teilausdrucks als Funktionswert zurückliefern. Der Gesamtwert eines beliebigen arithmetischen Ausdrucks entspricht damit dem Funktionswert der Parser-Funktion expression:
{
double result;
result=term();
while (token=="+" || token=="-")
if (token=="+") {
token=gettoken();
result+=term();
}
else {
token=gettoken();
result-=term();
}
return(result);
}
double term()
{
double result;
result=factor();
while (token=="*" || token=="/")
if (token=="*") {
token=gettoken();
result*=factor();
}
else {
token=gettoken();
result/=factor();
}
return(result);
}
double factor()
{
double result;
if (token=="(") {
token=gettoken();
result=expression();
if (token!=")") error(1);
token=gettoken();
}
else {
result=value();
}
return(result);
}
double value()
{
double result;
if (!is_value(token)) error(2);
result=get_value(token);
token=gettoken();
return(result);
}
Die arithmetischen Ausdrücke und deren Auswertung stellen nur einen kleinen Auschnitt aus dem Gesamtsprachumfang eines Compilers dar. Sie sind allerdings der zentrale Bestandteil eines jeden Compilers. Damit verdeutlicht der obige Parser, wie ein solcher Compiler im Kern aufgebaut ist.
Als weiterführende Literatur nach dieser kurzen Einführung sei das Buch Compilerbau von Niklas Wirth empfohlen.
← Ein Beispiel-Parser | ●