From a98333f4b0582fc4c6e16f436d0c826dc0689478 Mon Sep 17 00:00:00 2001 From: "Brady J. Garvin" <bgarvin@cse.unl.edu> Date: Thu, 26 Oct 2023 12:17:47 -0500 Subject: [PATCH] Recorded work for Thursday. --- syntactic-monoids/src/attributes.js | 52 +++++++++++++++++++++++--- syntactic-monoids/src/quotes.js | 58 +++++++++++++++++++++++++++++ 2 files changed, 105 insertions(+), 5 deletions(-) diff --git a/syntactic-monoids/src/attributes.js b/syntactic-monoids/src/attributes.js index 2dd5bfb..a31947a 100644 --- a/syntactic-monoids/src/attributes.js +++ b/syntactic-monoids/src/attributes.js @@ -1,6 +1,10 @@ -// TODO: placeholder +const READY = 0; +const KEY = 1; +const AFTER_EQUALS = 2; +const VALUE = 3; +const INVALID = 4; -const STATE_COUNT = 0; +const STATE_COUNT = 5; class MonoidElement { constructor(states) { @@ -8,14 +12,52 @@ class MonoidElement { } get valid() { - return false; // TODO: stub + const finalState = this.states[READY]; + return finalState === READY || finalState === VALUE; } } -export const IDENTITY_ELEMENT = new MonoidElement([]); // TODO: placeholder +export const IDENTITY_ELEMENT = new MonoidElement([ + READY, + KEY, + AFTER_EQUALS, + VALUE, + INVALID, +]); + +const SPACE = new MonoidElement([ + READY, + INVALID, + INVALID, + READY, + INVALID, +]); + +const EQUALS = new MonoidElement([ + INVALID, + AFTER_EQUALS, + INVALID, + INVALID, + INVALID, +]); + +const OTHER = new MonoidElement([ + KEY, + KEY, + VALUE, + VALUE, + INVALID, +]); export function encodeAsMonoidElement(character) { - return IDENTITY_ELEMENT; // TODO: stub + switch (character) { + case ' ': + return SPACE; + case '=': + return EQUALS; + default: + return OTHER; + } } export function combineMonoidElements(left, right) { diff --git a/syntactic-monoids/src/quotes.js b/syntactic-monoids/src/quotes.js index e69de29..2c204b3 100644 --- a/syntactic-monoids/src/quotes.js +++ b/syntactic-monoids/src/quotes.js @@ -0,0 +1,58 @@ +const UNQUOTED = 0; +const QUOTED = 1; +const ESCAPED = 2; + +const STATE_COUNT = 3; + +class MonoidElement { + constructor(states) { + this.states = states; + } + + get valid() { + return this.states[UNQUOTED] === UNQUOTED; + } +} + +export const IDENTITY_ELEMENT = new MonoidElement([ + UNQUOTED, + QUOTED, + ESCAPED, +]); + +const QUOTE = new MonoidElement([ + QUOTED, + UNQUOTED, + QUOTED, +]); + +const BACKSLASH = new MonoidElement([ + UNQUOTED, + ESCAPED, + QUOTED, +]); + +const OTHER = new MonoidElement([ + UNQUOTED, + QUOTED, + QUOTED, +]); + +export function encodeAsMonoidElement(character) { + switch (character) { + case '"': + return QUOTE; + case '\\': + return BACKSLASH; + default: + return OTHER; + } +} + +export function combineMonoidElements(left, right) { + const states = []; + for (let i = 0; i < STATE_COUNT; ++i) { + states.push(right.states[left.states[i]]); + } + return new MonoidElement(states); +} -- GitLab