Source: 10.js

/** This module contains classes for some examples in chapter ten.
  *
  * @module Ten
  * @author © 2024 Axel T. Schreiner <axel@schreiner-family.net>
  * @version 2024-02-26
  */

/** [Example 10/07](../?mode=stack&eg=10/07): immediate evaluation. */
class Actions07 {
  /** `expr: add | subtract | ... | '(' expr ')' | number;` */
  expr (... arg) {
    return arg.length > 1 ? arg[1] : arg[0];
  }
  
  /** `add: expr '+' expr;` */
  add (a, x, b) { return a + b; }
  
  /** `subtract: expr '-' expr;` */
  subtract (a, x, b) { return a - b; }
  
  /** `multiply: expr '*' expr;` */
  multiply (a, x, b) { return a * b; }
  
  /** `divide:   expr '/' expr;` */
  divide   (a, x, b) { return a / b; }
  
  /** `power:    expr '**' expr;` */
  power    (a, x, b) { return a ** b; }
  
  /** `number:   Number;` */
  number   (number)  { return parseInt(number, 10); }
}

/** [Example 10/09](../?mode=stack&eg=10/09): unary minus. */
class Actions09 extends Actions07 {
  minus (x, a) { return - a; }
}

export {
  Actions07,
  Actions09
};