2023-07-28 14:09:23 -07:00
|
|
|
#ifndef _BYTECODE_H
|
|
|
|
#define _BYTECODE_H
|
|
|
|
|
|
|
|
#include "format.h"
|
|
|
|
|
|
|
|
/// a * b <=> b * a
|
|
|
|
void comm(void);
|
|
|
|
/// a * (b * c) => (a * b) * c
|
|
|
|
void assocl(void);
|
|
|
|
/// (a * b) * c => a * (b * c)
|
|
|
|
void assocr(void);
|
|
|
|
/// a * (b + c) => (a * b) + (a * c)
|
|
|
|
void distr(void);
|
2023-07-28 20:03:10 -07:00
|
|
|
/// (a + b) * c => (a * c) + (b * c)
|
|
|
|
void distl(void);
|
2023-07-28 14:09:23 -07:00
|
|
|
/// (a * b) + (a * c) => a * (b + c)
|
|
|
|
void factr(void);
|
2023-07-28 20:03:10 -07:00
|
|
|
/// (a * c) + (b * c) => (a + b) * c
|
|
|
|
void factl(void);
|
2023-07-28 14:09:23 -07:00
|
|
|
/// (a => b) => (a * c => b * c)
|
|
|
|
void mapl_begin(void);
|
|
|
|
void mapl_end(void);
|
|
|
|
/// (b => c) => (a * b => a * c)
|
|
|
|
void mapr_begin(void);
|
|
|
|
void mapr_end(void);
|
|
|
|
/// a => a * 1
|
|
|
|
void unitir(void);
|
2023-07-28 20:03:10 -07:00
|
|
|
/// a => 1 * a
|
|
|
|
void unitil(void);
|
2023-07-28 14:09:23 -07:00
|
|
|
/// a * 1 => a
|
|
|
|
void uniter(void);
|
2023-07-28 20:03:10 -07:00
|
|
|
/// 1 * a => a
|
|
|
|
void unitel(void);
|
2023-07-28 14:09:23 -07:00
|
|
|
/// a + b <=> b + a
|
|
|
|
void comm_plus(void);
|
|
|
|
/// a + (b + c) => (a + b) + c
|
|
|
|
void assocl_plus(void);
|
|
|
|
/// (a + b) + c => a + (b + c)
|
|
|
|
void assocr_plus(void);
|
|
|
|
/// (a => b) => (a + c => b + c)
|
|
|
|
void mapl_plus_begin(void);
|
|
|
|
void mapl_plus_end(void);
|
|
|
|
/// (b => c) => (a + b => a + c)
|
|
|
|
void mapr_plus_begin(void);
|
|
|
|
void mapr_plus_end(void);
|
|
|
|
/// a => a + b
|
|
|
|
void inl(void);
|
|
|
|
/// b => a + b
|
|
|
|
void inr(void);
|
|
|
|
/// a + a => a
|
|
|
|
void out(void);
|
2023-07-28 20:03:10 -07:00
|
|
|
/// end the program
|
|
|
|
void halt(void);
|
2023-07-28 14:09:23 -07:00
|
|
|
symbol init_bytecode(void);
|
|
|
|
void finish_bytecode(void);
|
|
|
|
|
2023-07-28 20:03:10 -07:00
|
|
|
void jump(symbol sym);
|
|
|
|
void jump_if(symbol a, symbol b);
|
|
|
|
|
2023-07-28 14:09:23 -07:00
|
|
|
#endif
|