summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEuAndreh <eu@euandre.org>2025-07-13 20:03:19 -0300
committerEuAndreh <eu@euandre.org>2025-07-13 20:03:19 -0300
commitc9e5966a7e872692d2e209d69b6d9db4d24c694e (patch)
tree30e46b8a75c022e2695204b742f6ba636beb1729
parentAdd simple test for TRANSITION_FNS (diff)
downloadpaca-c9e5966a7e872692d2e209d69b6d9db4d24c694e.tar.gz
paca-c9e5966a7e872692d2e209d69b6d9db4d24c694e.tar.xz
Add "[" to the possible characters of TRANSITION_FNS.
Introducing "[" now we will start to write the code to parse the character class expressions, i.e. [a-z0-9]. The `context` key will contain a `set` with all the literal characters that were found, and all the ranges too. For parsing the ranges, a `range` key equivalent to the one for the {m,n} range is used. Despite the superficial syntax being simmilar, its logic, semantic and implementation will be different. * src/paca.mjs (TRANSITION_FNS) <"[">: Add new transition function for handling the start of a character class expression. * tests/paca.mjs (TRANSITION_FNS): Add a singular test entry, that exercises the conditionless body of the function.
-rw-r--r--src/paca.mjs12
-rw-r--r--tests/paca.mjs18
2 files changed, 30 insertions, 0 deletions
diff --git a/src/paca.mjs b/src/paca.mjs
index c1bead1..6843c20 100644
--- a/src/paca.mjs
+++ b/src/paca.mjs
@@ -121,6 +121,18 @@ const TRANSITION_FNS = {
where: "from",
},
}),
+ "[": ({ out, _state, _context }, _char, _index, _next) => ({
+ out,
+ state: ConcatStep.CLASS,
+ context: {
+ set: [],
+ range: {
+ from: [],
+ to: [],
+ where: "from",
+ },
+ },
+ }),
};
const stateTransitionOperators = new Set(Object.keys(TRANSITION_FNS));
diff --git a/tests/paca.mjs b/tests/paca.mjs
index b259968..a7cd929 100644
--- a/tests/paca.mjs
+++ b/tests/paca.mjs
@@ -73,6 +73,24 @@ const test_TRANSITION_FNS = t => {
},
);
});
+
+ t.testing("\"[\" only depends on `out`", () => {
+ t.assertEq(
+ TRANSITION_FNS["["]({ out: 123 }, null, null, null),
+ {
+ out: 123,
+ state: "class",
+ context: {
+ set: [],
+ range: {
+ from: [],
+ to: [],
+ where: "from",
+ },
+ },
+ },
+ );
+ });
};
const test_shouldConcat = t => {