summaryrefslogtreecommitdiff
path: root/src/paca.mjs
diff options
context:
space:
mode:
Diffstat (limited to 'src/paca.mjs')
-rw-r--r--src/paca.mjs27
1 files changed, 6 insertions, 21 deletions
diff --git a/src/paca.mjs b/src/paca.mjs
index 216dc2e..12eb4b9 100644
--- a/src/paca.mjs
+++ b/src/paca.mjs
@@ -480,11 +480,9 @@ const toPostfix = tokens => {
const emptyNFA = () => {
const startID = 1;
const endID = 2;
- const nextID = 3;
return {
start: startID,
end: endID,
- nextID,
nodes: {
[startID]: {
direct: [ endID ],
@@ -501,11 +499,9 @@ const emptyNFA = () => {
const literal = (edge, id) => {
const startID = id + 0;
const endID = id + 1;
- const nextID = id + 2;
return {
start: startID,
end: endID,
- nextID,
nodes: {
[startID]: {
direct: [],
@@ -524,7 +520,6 @@ const literal = (edge, id) => {
const concat = (lhs, rhs) => ({
start: lhs.start,
end: rhs.end,
- nextID: max(lhs.nextID, rhs.nextID),
nodes: {
...lhs.nodes,
...rhs.nodes,
@@ -536,13 +531,11 @@ const concat = (lhs, rhs) => ({
});
const union = (lhs, rhs) => {
- const startID = max(lhs.nextID, rhs.nextID);
+ const startID = max(lhs.end, rhs.end) + 1;
const endID = startID + 1;
- const nextID = startID + 2;
return {
start: startID,
end: endID,
- nextID,
nodes: {
...lhs.nodes,
...rhs.nodes,
@@ -567,13 +560,11 @@ const union = (lhs, rhs) => {
};
const zeroOrMore = nfa => {
- const startID = nfa.nextID;
- const endID = startID + 1;
- const nextID = startID + 2;
+ const startID = nfa.end + 1;
+ const endID = nfa.end + 2;
return {
start: startID,
end: endID,
- nextID,
nodes: {
...nfa.nodes,
[nfa.end]: {
@@ -598,13 +589,11 @@ const oneOrMore = nfa =>
concat(nfa, zeroOrMore(nfa));
const zeroOrOne = nfa => {
- const startID = nfa.nextID;
- const endID = startID + 1;
- const nextID = startID + 2;
+ const startID = nfa.end + 1;
+ const endID = nfa.end + 2;
return {
start: startID,
end: endID,
- nextID,
nodes: {
...nfa.nodes,
[nfa.end]: {
@@ -650,7 +639,6 @@ const inRange = (ranges, char) => {
const characterClass = ({ set, caret }, id) => {
const start = id + 0;
const end = id + 1;
- const nextID = id + 2;
const { string, object } = Object.groupBy(set, x => typeof x);
const ranges = Object.fromEntries(
compressCharacterRanges((object || []).map(
@@ -665,7 +653,6 @@ const characterClass = ({ set, caret }, id) => {
return {
start,
end,
- nextID,
nodes: {
[start]: {
direct: [],
@@ -688,11 +675,9 @@ const characterClass = ({ set, caret }, id) => {
const wildcard = (_edge, id) => {
const start = id + 0;
const end = id + 1;
- const nextID = id + 2;
return {
start,
end,
- nextID,
nodes: {
[start]: {
direct: [],
@@ -744,7 +729,7 @@ const baseNFA = (token, id) => (
const buildNFAStep = (stack, token) =>
!token.operator
- ? stack.concat(baseNFA(token, last(stack)?.nextID || 1))
+ ? stack.concat(baseNFA(token, (last(stack)?.end || 0) + 1))
: OPERATORS[token.operator](stack);
const buildNFA = tokens =>