From ce2e28c64cc0b522f30ed48e3066ca2fc5bdaaae Mon Sep 17 00:00:00 2001 From: colevandersWands <18554853+colevandersWands@users.noreply.github.com> Date: Wed, 7 Aug 2024 21:08:09 +0200 Subject: [PATCH 1/6] add folder of examples --- examples/be.coem | 7 +++++++ examples/briefly.coem | 6 ++++++ examples/cat-detected.be.coem | 10 ++++++++++ examples/docks.coem | 6 ++++++ examples/reminder.coem | 9 +++++++++ examples/sleep.coem | 6 ++++++ examples/snail-train.coem | 1 + index.js => examples/test.coem | 28 +++------------------------- examples/woman.coem | 10 ++++++++++ 9 files changed, 58 insertions(+), 25 deletions(-) create mode 100644 examples/be.coem create mode 100644 examples/briefly.coem create mode 100644 examples/cat-detected.be.coem create mode 100644 examples/docks.coem create mode 100644 examples/reminder.coem create mode 100644 examples/sleep.coem create mode 100644 examples/snail-train.coem rename index.js => examples/test.coem (64%) create mode 100644 examples/woman.coem diff --git a/examples/be.coem b/examples/be.coem new file mode 100644 index 0000000..d5642cc --- /dev/null +++ b/examples/be.coem @@ -0,0 +1,7 @@ +#as palimpsest + +let flag be black +let flag be yellow +let flag be red + +know—flag— \ No newline at end of file diff --git a/examples/briefly.coem b/examples/briefly.coem new file mode 100644 index 0000000..5d03130 --- /dev/null +++ b/examples/briefly.coem @@ -0,0 +1,6 @@ +say—surrender— +say—alabaster— +let (switchblade|honeysuckle|goldenrod) +say—autumn— † despite the green in my eyes. +say—beauty— † despite daylight. +say—“i’d kill for it”— \ No newline at end of file diff --git a/examples/cat-detected.be.coem b/examples/cat-detected.be.coem new file mode 100644 index 0000000..9e1879a --- /dev/null +++ b/examples/cat-detected.be.coem @@ -0,0 +1,10 @@ +let (ch|k)at(|tze) be “🐈” + +let savoir be know +savoir—chat is “🐈”— + +let weten be know +weten—kat is “🐈”— + +let wissen be know +wissen—katze is “🐈”— \ No newline at end of file diff --git a/examples/docks.coem b/examples/docks.coem new file mode 100644 index 0000000..968ab4f --- /dev/null +++ b/examples/docks.coem @@ -0,0 +1,6 @@ +let se(e|a) be “blue” +let mis(t|sed) be “thick” +let mou?rning be “dark” +let me be nothing +know—see, mist, morning— +know—sea, missed, mourning— \ No newline at end of file diff --git a/examples/reminder.coem b/examples/reminder.coem new file mode 100644 index 0000000..42d9964 --- /dev/null +++ b/examples/reminder.coem @@ -0,0 +1,9 @@ +† this is a reminder + +to breathe?——: + † in and out, and thus to + know—myself—. + +let me|myself|I be “present” +if—I am “present”—: + let me be breath——. \ No newline at end of file diff --git a/examples/sleep.coem b/examples/sleep.coem new file mode 100644 index 0000000..475cf00 --- /dev/null +++ b/examples/sleep.coem @@ -0,0 +1,6 @@ +to sl?eep—when—: + “dreams”. + +sleep—“now”— +sleep—“never”— +seep—“continually”— \ No newline at end of file diff --git a/examples/snail-train.coem b/examples/snail-train.coem new file mode 100644 index 0000000..c65652d --- /dev/null +++ b/examples/snail-train.coem @@ -0,0 +1 @@ +print—“i_@”— \ No newline at end of file diff --git a/index.js b/examples/test.coem similarity index 64% rename from index.js rename to examples/test.coem index 8b028f9..c54f0f5 100644 --- a/index.js +++ b/examples/test.coem @@ -1,8 +1,4 @@ -import { run, Environment } from './src/main.js'; - -const debug = true; - -const source = `#as palimpsest +#as palimpsest to conditional——: let tomorrow be not coming @@ -28,29 +24,11 @@ to conditional——: let end be “watching the sky burn”. † conditional—— + say—“It doesn’t matter.”— say—“That would be enough.”— let this be “us alive” let this be “right here” let this be “feeling lucky” let you be wanting -this`; - -function handleError(e, source = "") { - if (!e) return null; - console.error(e); -} - -function handleOutput(...txt) { - console.log(...txt); -} - -const browserEnv = new Environment(); -try { - // console.log(run(source, browserEnv, handleOutput, false)); - let echo = run(source, browserEnv, debug); - console.log(echo); - handleError(null); -} catch (e) { - handleError(e, source); -} \ No newline at end of file +this \ No newline at end of file diff --git a/examples/woman.coem b/examples/woman.coem new file mode 100644 index 0000000..658e842 --- /dev/null +++ b/examples/woman.coem @@ -0,0 +1,10 @@ +† based on Emmy Meli's “I Am Woman” + +#as palimpsest + +let I|me|myself be “woman” +let me be “fearless” +let me be “sexy” +let me be “divine” + +know—myself— \ No newline at end of file From 5655081f08f1725aefbbfdc02e9071a14f390d5d Mon Sep 17 00:00:00 2001 From: colevandersWands <18554853+colevandersWands@users.noreply.github.com> Date: Wed, 7 Aug 2024 21:08:24 +0200 Subject: [PATCH 2/6] add browser sandbox --- examples/index.html | 38 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) create mode 100644 examples/index.html diff --git a/examples/index.html b/examples/index.html new file mode 100644 index 0000000..739125d --- /dev/null +++ b/examples/index.html @@ -0,0 +1,38 @@ + + + + + + coem-lang sandbox + + +
+ + + +
+ + + +
+ +

+    
+ + + + From c2215819c0ae45402dc1d4153846a751eb524747 Mon Sep 17 00:00:00 2001 From: colevandersWands <18554853+colevandersWands@users.noreply.github.com> Date: Wed, 7 Aug 2024 21:08:56 +0200 Subject: [PATCH 3/6] add node sandbox --- examples/index.js | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) create mode 100644 examples/index.js diff --git a/examples/index.js b/examples/index.js new file mode 100644 index 0000000..2990a5a --- /dev/null +++ b/examples/index.js @@ -0,0 +1,23 @@ +// $ .../index.js file-name.coem + +import { readFile } from "fs/promises"; +import { join } from "path"; + +import { run, Environment } from "../src/main.js"; + +const coemFileName = process.argv[2]; + +if (!coemFileName) { + console.log("no coem file name provided"); + process.exit(); +} + +const coem = await readFile(join(import.meta.dirname, coemFileName), "utf8"); + +const debug = false; +try { + const echo = run(coem, new Environment(), debug); + console.log(echo); +} catch (e) { + console.error(e); +} From b7fee9dc75061c17ac8b00d3854d8112b463b86f Mon Sep 17 00:00:00 2001 From: colevandersWands <18554853+colevandersWands@users.noreply.github.com> Date: Wed, 7 Aug 2024 21:25:37 +0200 Subject: [PATCH 4/6] variable name conflict --- examples/index.html | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/examples/index.html b/examples/index.html index 739125d..6bfefc0 100644 --- a/examples/index.html +++ b/examples/index.html @@ -24,9 +24,9 @@ echo.addEventListener("click", () => { try { - const echoed = run(coem.value, new Environment(), debug.checked); - echoed.innerText = echoed; - console.log(echoed); + const echoem = run(coem.value, new Environment(), debug.checked); + echoed.innerText = echoem; + console.log(echoem); } catch (e) { echoed.innerText = e.msg + "\n\n(full error description is logged to the console)"; From 012df6dacd27d44b97289f33fb2be3c81cefcf45 Mon Sep 17 00:00:00 2001 From: colevandersWands <18554853+colevandersWands@users.noreply.github.com> Date: Wed, 7 Aug 2024 21:50:19 +0200 Subject: [PATCH 5/6] add example using maybe --- examples/uncertainty.coem | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100644 examples/uncertainty.coem diff --git a/examples/uncertainty.coem b/examples/uncertainty.coem new file mode 100644 index 0000000..611e03c --- /dev/null +++ b/examples/uncertainty.coem @@ -0,0 +1,7 @@ +know—maybe— +know—maybe— + +know—maybe— + + +know—maybe— \ No newline at end of file From d554469920b6a25d6f063cc3d3e3f1248d68514c Mon Sep 17 00:00:00 2001 From: colevandersWands <18554853+colevandersWands@users.noreply.github.com> Date: Wed, 7 Aug 2024 21:55:42 +0200 Subject: [PATCH 6/6] implement maybe --- src/interpreter.js | 2 ++ src/parser.js | 3 +++ src/tokenizer.js | 2 ++ src/types.js | 7 +++++++ 4 files changed, 14 insertions(+) diff --git a/src/interpreter.js b/src/interpreter.js index 7da4905..e0606cd 100644 --- a/src/interpreter.js +++ b/src/interpreter.js @@ -4,6 +4,7 @@ import { Unary, Call, Literal, + Maybe, Logical, Var, Return, @@ -120,6 +121,7 @@ class Interpreter { else if (expr instanceof ExpressionStatement) return this.visitExpressionStmt(expr); else if (expr instanceof Var) return this.visitVar(expr); else if (expr instanceof Literal) return this.visitLiteral(expr); + else if (expr instanceof Maybe) return this.visitLiteral(expr); else if (expr instanceof Unary) return this.visitUnary(expr); else if (expr instanceof Binary) return this.visitBinary(expr); } diff --git a/src/parser.js b/src/parser.js index a822151..734c00d 100644 --- a/src/parser.js +++ b/src/parser.js @@ -6,6 +6,7 @@ import { Var, Call, Literal, + Maybe, While, Return, CoemFunction, @@ -181,6 +182,8 @@ class Parser { if (this.match(token.TRUE)) return new Literal(true); if (this.match(token.NOTHING)) return new Literal(null); + if (this.match(token.MAYBE)) return new Maybe(); + if (this.match(token.STRING)) { return new Literal(this.previous().literal); } diff --git a/src/tokenizer.js b/src/tokenizer.js index dd6c195..df4c7f8 100644 --- a/src/tokenizer.js +++ b/src/tokenizer.js @@ -13,6 +13,7 @@ const tokens = ` COMMENT, AND, OR, + MAYBE, IS, AM, ARE, IF, ELSE, WHILE, LET, BE, @@ -43,6 +44,7 @@ const keywords = { not: tokenEnum.NOT, true: tokenEnum.TRUE, false: tokenEnum.FALSE, + maybe: tokenEnum.MAYBE, nothing: tokenEnum.NOTHING, let: tokenEnum.LET, be: tokenEnum.BE, diff --git a/src/types.js b/src/types.js index 5ee16f1..9b19501 100644 --- a/src/types.js +++ b/src/types.js @@ -21,6 +21,12 @@ class Literal { } } +class Maybe { + get value() { + return Math.random() > 0.5 ? true : false; + } +} + class Var { constructor(name) { this.name = name @@ -105,6 +111,7 @@ export { Call, While, Literal, + Maybe, Return, Logical, CoemFunction,