UNPKG

hclang

Version:

Homoiconic C: Programming without a Language

63 lines 4.51 kB
import { Frame, FrameString, FrameSymbol } from '../frames.js'; import { getSyntax } from './syntax.js'; export class LexPipe extends Frame { constructor(out) { const syntax = getSyntax(); syntax[Frame.kOUT] = out; super(syntax); this.level = 0; } lex_string(input) { const source = new FrameString(input); return this.lex(source); } lex(source) { return source.reduce(this); } finish(_parameter) { const output = FrameSymbol.end(); const out = this.get(Frame.kOUT); out.call(output); return this; } perform(action) { const parser = this.get(Frame.kOUT); for (const [key, value] of Object.entries(action)) { switch (key) { case 'semi-next': { parser.next(true); break; } case 'next': { parser.next(false); break; } case 'end': { parser.finish(value); break; } case 'push': { const next_parser = parser.push(value); this.set(Frame.kOUT, next_parser); this.level += 1; break; } case 'pop': { if (this.level === 0) { console.error('LexPipe.perform.pop.failed: already at top level'); break; } if (!parser.canPop(value)) { break; } const next_parser = parser.pop(value); this.set(Frame.kOUT, next_parser); this.level -= 1; break; } } } return this; } } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGV4LXBpcGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvZXhlY3V0ZS9sZXgtcGlwZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsS0FBSyxFQUFFLFdBQVcsRUFBRSxXQUFXLEVBQUUsTUFBTSxjQUFjLENBQUE7QUFFOUQsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGFBQWEsQ0FBQTtBQUd2QyxNQUFNLE9BQU8sT0FBUSxTQUFRLEtBQUs7SUFHaEMsWUFBYSxHQUFVO1FBQ3JCLE1BQU0sTUFBTSxHQUFHLFNBQVMsRUFBRSxDQUFBO1FBQzFCLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFBO1FBQ3hCLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQTtRQUNiLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFBO0lBQ2hCLENBQUM7SUFFTSxVQUFVLENBQUUsS0FBYTtRQUM5QixNQUFNLE1BQU0sR0FBRyxJQUFJLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQTtRQUNyQyxPQUFPLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUE7SUFDekIsQ0FBQztJQUVNLEdBQUcsQ0FBRSxNQUFtQjtRQUM3QixPQUFPLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUE7SUFDNUIsQ0FBQztJQUVNLE1BQU0sQ0FBRSxVQUFpQjtRQUM5QixNQUFNLE1BQU0sR0FBRyxXQUFXLENBQUMsR0FBRyxFQUFFLENBQUE7UUFDaEMsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUE7UUFDaEMsR0FBRyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQTtRQUNoQixPQUFPLElBQUksQ0FBQTtJQUNiLENBQUM7SUFFTSxPQUFPLENBQUUsTUFBZTtRQUM3QixNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQWMsQ0FBQTtRQUNoRCxLQUFLLE1BQU0sQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLElBQUksTUFBTSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsRUFBRTtZQUNqRCxRQUFRLEdBQUcsRUFBRTtnQkFDWCxLQUFLLFdBQVcsQ0FBQyxDQUFDO29CQUNoQixNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFBO29CQUNqQixNQUFLO2lCQUNOO2dCQUNELEtBQUssTUFBTSxDQUFDLENBQUM7b0JBQ1gsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQTtvQkFDbEIsTUFBSztpQkFDTjtnQkFDRCxLQUFLLEtBQUssQ0FBQyxDQUFDO29CQUNWLE1BQU0sQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUE7b0JBQ3BCLE1BQUs7aUJBQ047Z0JBQ0QsS0FBSyxNQUFNLENBQUMsQ0FBQztvQkFDWCxNQUFNLFdBQVcsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFBO29CQUN0QyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsV0FBVyxDQUFDLENBQUE7b0JBQ2pDLElBQUksQ0FBQyxLQUFLLElBQUksQ0FBQyxDQUFBO29CQUNmLE1BQUs7aUJBQ047Z0JBQ0QsS0FBSyxLQUFLLENBQUMsQ0FBQztvQkFDVixJQUFJLElBQUksQ0FBQyxLQUFLLEtBQUssQ0FBQyxFQUFFO3dCQUNwQixPQUFPLENBQUMsS0FBSyxDQUFDLGtEQUFrRCxDQUFDLENBQUE7d0JBQ2pFLE1BQUs7cUJBQ047b0JBQ0QsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEVBQUU7d0JBQ3pCLE1BQUs7cUJBQ047b0JBQ0QsTUFBTSxXQUFXLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQTtvQkFDckMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLFdBQVcsQ0FBQyxDQUFBO29CQUNqQyxJQUFJLENBQUMsS0FBSyxJQUFJLENBQUMsQ0FBQTtvQkFDZixNQUFLO2lCQUNOO2FBQ0Y7U0FDRjtRQUNELE9BQU8sSUFBSSxDQUFBO0lBQ2IsQ0FBQztDQUNGIn0=