UNPKG

hclang

Version:

Homoiconic C: Programming without a Language

54 lines 4.41 kB
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=