hclang
Version:
Homoiconic C: Programming without a Language
54 lines • 4.41 kB
JavaScript
import { Frame, FrameArray, FrameGroup, FrameLazy, FrameNote, FrameSchema, FrameSymbol, NilContext } from '../frames.js';
const terminate = (pipe, parameter) => {
if ('finish' in pipe && pipe.finish instanceof Function) {
return pipe.finish(parameter);
}
const note = FrameNote.key(pipe.id, pipe);
// console.error("terminate", pipe);
return note;
};
export class Terminal extends Frame {
static end() {
return new Terminal(terminate);
}
;
constructor(data) {
super(NilContext);
this.data = data;
this.is.immediate = true;
}
apply(argument, parameter) {
return this.data(argument, parameter);
}
toData() {
return this.data;
}
}
export const terminals = {};
const perform = (actions) => {
return (source, _parameter) => {
const performer = source;
return performer.perform(actions);
};
};
const addTerminal = (char, key) => {
const action = {};
action[key] = FrameSymbol.for(char);
terminals[char] = new Terminal(perform(action));
};
function addGroup(Grouper) {
const sample = new Grouper([], NilContext);
const open = sample.string_open();
const close = sample.string_close();
terminals[open] = new Terminal(perform({ push: Grouper }));
terminals[close] = new Terminal(perform({ pop: Grouper }));
}
terminals[Frame.kEND] = Terminal.end();
addTerminal('\n', 'end');
addTerminal(',', 'next');
addTerminal(';', 'semi-next');
addGroup(FrameArray);
addGroup(FrameGroup);
addGroup(FrameLazy);
addGroup(FrameSchema);
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVybWluYWxzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2V4ZWN1dGUvdGVybWluYWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBVyxLQUFLLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLFdBQVcsRUFBRSxXQUFXLEVBQXFCLFVBQVUsRUFBRSxNQUFNLGNBQWMsQ0FBQTtBQWFwSixNQUFNLFNBQVMsR0FBbUIsQ0FBQyxJQUFXLEVBQUUsU0FBZ0IsRUFBRSxFQUFFO0lBQ2xFLElBQUksUUFBUSxJQUFJLElBQUksSUFBSSxJQUFJLENBQUMsTUFBTSxZQUFZLFFBQVEsRUFBRTtRQUN2RCxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUE7S0FDOUI7SUFFRCxNQUFNLElBQUksR0FBRyxTQUFTLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLENBQUE7SUFDekMsb0NBQW9DO0lBQ3BDLE9BQU8sSUFBSSxDQUFBO0FBQ2IsQ0FBQyxDQUFBO0FBRUQsTUFBTSxPQUFPLFFBQVMsU0FBUSxLQUFLO0lBQzFCLE1BQU0sQ0FBQyxHQUFHO1FBQ2YsT0FBTyxJQUFJLFFBQVEsQ0FBQyxTQUFTLENBQUMsQ0FBQTtJQUNoQyxDQUFDO0lBQUEsQ0FBQztJQUVGLFlBQXVCLElBQW9CO1FBQ3pDLEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQTtRQURJLFNBQUksR0FBSixJQUFJLENBQWdCO1FBRXpDLElBQUksQ0FBQyxFQUFFLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQTtJQUMxQixDQUFDO0lBRU0sS0FBSyxDQUFFLFFBQWUsRUFBRSxTQUFnQjtRQUM3QyxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLFNBQVMsQ0FBQyxDQUFBO0lBQ3ZDLENBQUM7SUFFUyxNQUFNO1FBQ2QsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFBO0lBQ2xCLENBQUM7Q0FDRjtBQUVELE1BQU0sQ0FBQyxNQUFNLFNBQVMsR0FBWSxFQUNqQyxDQUFBO0FBRUQsTUFBTSxPQUFPLEdBQUcsQ0FBQyxPQUFnQixFQUFFLEVBQUU7SUFDbkMsT0FBTyxDQUFDLE1BQWEsRUFBRSxVQUFpQixFQUFFLEVBQUU7UUFDMUMsTUFBTSxTQUFTLEdBQUcsTUFBb0IsQ0FBQTtRQUN0QyxPQUFPLFNBQVMsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUE7SUFDbkMsQ0FBQyxDQUFBO0FBQ0gsQ0FBQyxDQUFBO0FBRUQsTUFBTSxXQUFXLEdBQUcsQ0FBQyxJQUFZLEVBQUUsR0FBVyxFQUFFLEVBQUU7SUFDaEQsTUFBTSxNQUFNLEdBQVksRUFBRSxDQUFBO0lBQzFCLE1BQU0sQ0FBQyxHQUFHLENBQUMsR0FBRyxXQUFXLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFBO0lBQ25DLFNBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLFFBQVEsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQTtBQUNqRCxDQUFDLENBQUE7QUFFRCxTQUFTLFFBQVEsQ0FBRSxPQUEwQjtJQUMzQyxNQUFNLE1BQU0sR0FBRyxJQUFJLE9BQU8sQ0FBQyxFQUFFLEVBQUUsVUFBVSxDQUFDLENBQUE7SUFDMUMsTUFBTSxJQUFJLEdBQUcsTUFBTSxDQUFDLFdBQVcsRUFBRSxDQUFBO0lBQ2pDLE1BQU0sS0FBSyxHQUFHLE1BQU0sQ0FBQyxZQUFZLEVBQUUsQ0FBQTtJQUNuQyxTQUFTLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxRQUFRLENBQUMsT0FBTyxDQUFDLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUMsQ0FBQTtJQUMxRCxTQUFTLENBQUMsS0FBSyxDQUFDLEdBQUcsSUFBSSxRQUFRLENBQUMsT0FBTyxDQUFDLEVBQUUsR0FBRyxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUMsQ0FBQTtBQUM1RCxDQUFDO0FBRUQsU0FBUyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUE7QUFDdEMsV0FBVyxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQTtBQUN4QixXQUFXLENBQUMsR0FBRyxFQUFFLE1BQU0sQ0FBQyxDQUFBO0FBQ3hCLFdBQVcsQ0FBQyxHQUFHLEVBQUUsV0FBVyxDQUFDLENBQUE7QUFDN0IsUUFBUSxDQUFDLFVBQVUsQ0FBQyxDQUFBO0FBQ3BCLFFBQVEsQ0FBQyxVQUFVLENBQUMsQ0FBQTtBQUNwQixRQUFRLENBQUMsU0FBUyxDQUFDLENBQUE7QUFDbkIsUUFBUSxDQUFDLFdBQVcsQ0FBQyxDQUFBIn0=