4-2-1e

Пример описания языка на Рефале: интерпретатор арифметических выражений

 

Fact {
    0  = 1;
    sN = <MUL (sN) <Fact <SUB (sN) 1>>>;
}


Fact {
    0  = 1;
    sN = <Int (sN)'*'Fact((sN)'-'1)>;
}


Int {
    sN               = sN;
    eX '+' eY        = <ADD (<Int eX>) <Int eY>>;
    eX '-' eY '-' eZ = <Int (eX '-' eY) '-' eZ>;
    eX '-' eY        = <SUB (<Int eX>) <Int eY>>;
    eX '*' eY        = <MUL (<Int eX>) <Int eY>>;
    (eX)             = <Int eX>;
    sF (eX)          = <Apply sF <Int eX>>;
}

Apply {
    Fact eN = <Fact eN>;
}