/** * @typedef {Notcl.Command[]} Notcl.Script * @typedef {Notcl.Word[]} Notcl.Command * @typedef {object} Notcl.Word * @property {string} text */ var Notcl = (() => { const InterCommandWhitespace = Peg.Regex(/[^\S\n;]*/y); const Comment = Peg.Regex(/#.*\n/y); const PreWordWhitespace = Peg.Regex(/[^\S\n;]*/y); const BasicWord = Peg.Map(Peg.Regex(/[^\s;]+/y), ([word]) => ({ text: word, })); const Word = Peg.Map( Peg.Sequence(PreWordWhitespace, BasicWord), ([_, word]) => word ); return { /** * Parse out a Notcl script into an easier-to-interpret representation. * No script is actually executed yet. * * @param {string} code * @returns Script */ parse(code) { /* Preprocess */ // fold line endings code = code.replace(/(?