diff options
| author | EuAndreh <eu@euandre.org> | 2025-07-13 20:03:19 -0300 |
|---|---|---|
| committer | EuAndreh <eu@euandre.org> | 2025-07-13 20:03:19 -0300 |
| commit | c9e5966a7e872692d2e209d69b6d9db4d24c694e (patch) | |
| tree | 30e46b8a75c022e2695204b742f6ba636beb1729 | |
| parent | Add simple test for TRANSITION_FNS (diff) | |
| download | paca-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.
Diffstat (limited to '')
| -rw-r--r-- | src/paca.mjs | 12 | ||||
| -rw-r--r-- | tests/paca.mjs | 18 |
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 => { |
