Public
Edited
Apr 18, 2024
Paused
1 star
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
grammar = ohm.grammar(`
BracketParsingGrammar {
Start = (text | Tag)*
text = ( ~bracketStart any)+
Tag = bracketStart InnerContent bracketEnd
bracketStart = "{{"
bracketEnd = "}}"
InnerContent = (~(bracketEnd) any)*
}
`)
Insert cell
semantics = grammar.createSemantics().addOperation("eval", {
text: function (e) {
//console.log(`Text: ${e.sourceString}|`);
return this.sourceString;
},
Start: function (e) {
const results = e.eval();
//console.log(`Start: `, results);
return results.join(""); // results come back comma delimited?
},
InnerContent: function (e) {
//console.log(`InnerContent: ${e.sourceString}`);
return this.sourceString;
},
Tag: function (_openBrackets, content, _closeBrackets) {
const results = content.eval();
//console.log(`Tag: ${results}`);
switch (results.toLowerCase()) {
case "willkommen()":
return "Hallo Welt";
case "uuid()":
return uuidv4();
case "today()":
return new Date().toISOString();
default:
return "UNKNOWN";
}
}
})
Insert cell
Insert cell
Insert cell
Insert cell
ohm = require("https://unpkg.com/ohm-js@15/dist/ohm.min.js")
Insert cell
uuidv5 = (await import('uuid@8.2.0/dist/esm-browser/v5.js')).default
Insert cell

Purpose-built for displays of data

Observable is your go-to platform for exploring data and creating expressive data visualizations. Use reactive JavaScript notebooks for prototyping and a collaborative canvas for visual data exploration and dashboard creation.
Learn more