@stevenvo780/st-lang 4.9.0 → 4.10.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (121) hide show
  1. package/dist/logic/profiles/natural-deduction-nk/formula.d.ts +18 -0
  2. package/dist/logic/profiles/natural-deduction-nk/formula.d.ts.map +1 -0
  3. package/dist/logic/profiles/natural-deduction-nk/formula.js +102 -0
  4. package/dist/logic/profiles/natural-deduction-nk/formula.js.map +1 -0
  5. package/dist/logic/profiles/natural-deduction-nk/index.d.ts +5 -0
  6. package/dist/logic/profiles/natural-deduction-nk/index.d.ts.map +1 -0
  7. package/dist/logic/profiles/natural-deduction-nk/index.js +28 -0
  8. package/dist/logic/profiles/natural-deduction-nk/index.js.map +1 -0
  9. package/dist/logic/profiles/natural-deduction-nk/prover.d.ts +49 -0
  10. package/dist/logic/profiles/natural-deduction-nk/prover.d.ts.map +1 -0
  11. package/dist/logic/profiles/natural-deduction-nk/prover.js +557 -0
  12. package/dist/logic/profiles/natural-deduction-nk/prover.js.map +1 -0
  13. package/dist/logic/profiles/natural-deduction-nk/types.d.ts +48 -0
  14. package/dist/logic/profiles/natural-deduction-nk/types.d.ts.map +1 -0
  15. package/dist/logic/profiles/natural-deduction-nk/types.js +35 -0
  16. package/dist/logic/profiles/natural-deduction-nk/types.js.map +1 -0
  17. package/dist/reasoning/automata/dfa.d.ts +17 -0
  18. package/dist/reasoning/automata/dfa.d.ts.map +1 -0
  19. package/dist/reasoning/automata/dfa.js +276 -0
  20. package/dist/reasoning/automata/dfa.js.map +1 -0
  21. package/dist/reasoning/automata/index.d.ts +8 -0
  22. package/dist/reasoning/automata/index.d.ts.map +1 -0
  23. package/dist/reasoning/automata/index.js +64 -0
  24. package/dist/reasoning/automata/index.js.map +1 -0
  25. package/dist/reasoning/automata/languages.d.ts +10 -0
  26. package/dist/reasoning/automata/languages.d.ts.map +1 -0
  27. package/dist/reasoning/automata/languages.js +78 -0
  28. package/dist/reasoning/automata/languages.js.map +1 -0
  29. package/dist/reasoning/automata/nfa.d.ts +8 -0
  30. package/dist/reasoning/automata/nfa.d.ts.map +1 -0
  31. package/dist/reasoning/automata/nfa.js +122 -0
  32. package/dist/reasoning/automata/nfa.js.map +1 -0
  33. package/dist/reasoning/automata/pda.d.ts +10 -0
  34. package/dist/reasoning/automata/pda.d.ts.map +1 -0
  35. package/dist/reasoning/automata/pda.js +169 -0
  36. package/dist/reasoning/automata/pda.js.map +1 -0
  37. package/dist/reasoning/automata/regex.d.ts +6 -0
  38. package/dist/reasoning/automata/regex.d.ts.map +1 -0
  39. package/dist/reasoning/automata/regex.js +259 -0
  40. package/dist/reasoning/automata/regex.js.map +1 -0
  41. package/dist/reasoning/automata/types.d.ts +69 -0
  42. package/dist/reasoning/automata/types.d.ts.map +1 -0
  43. package/dist/reasoning/automata/types.js +29 -0
  44. package/dist/reasoning/automata/types.js.map +1 -0
  45. package/dist/reasoning/computability/index.d.ts +239 -0
  46. package/dist/reasoning/computability/index.d.ts.map +1 -0
  47. package/dist/reasoning/computability/index.js +851 -0
  48. package/dist/reasoning/computability/index.js.map +1 -0
  49. package/dist/reasoning/number-theory/crt.d.ts +9 -0
  50. package/dist/reasoning/number-theory/crt.d.ts.map +1 -0
  51. package/dist/reasoning/number-theory/crt.js +39 -0
  52. package/dist/reasoning/number-theory/crt.js.map +1 -0
  53. package/dist/reasoning/number-theory/diophantine.d.ts +10 -0
  54. package/dist/reasoning/number-theory/diophantine.d.ts.map +1 -0
  55. package/dist/reasoning/number-theory/diophantine.js +87 -0
  56. package/dist/reasoning/number-theory/diophantine.js.map +1 -0
  57. package/dist/reasoning/number-theory/factorization.d.ts +12 -0
  58. package/dist/reasoning/number-theory/factorization.d.ts.map +1 -0
  59. package/dist/reasoning/number-theory/factorization.js +136 -0
  60. package/dist/reasoning/number-theory/factorization.js.map +1 -0
  61. package/dist/reasoning/number-theory/gcd.d.ts +8 -0
  62. package/dist/reasoning/number-theory/gcd.d.ts.map +1 -0
  63. package/dist/reasoning/number-theory/gcd.js +51 -0
  64. package/dist/reasoning/number-theory/gcd.js.map +1 -0
  65. package/dist/reasoning/number-theory/index.d.ts +9 -0
  66. package/dist/reasoning/number-theory/index.d.ts.map +1 -0
  67. package/dist/reasoning/number-theory/index.js +46 -0
  68. package/dist/reasoning/number-theory/index.js.map +1 -0
  69. package/dist/reasoning/number-theory/modular.d.ts +6 -0
  70. package/dist/reasoning/number-theory/modular.d.ts.map +1 -0
  71. package/dist/reasoning/number-theory/modular.js +75 -0
  72. package/dist/reasoning/number-theory/modular.js.map +1 -0
  73. package/dist/reasoning/number-theory/primality.d.ts +6 -0
  74. package/dist/reasoning/number-theory/primality.d.ts.map +1 -0
  75. package/dist/reasoning/number-theory/primality.js +144 -0
  76. package/dist/reasoning/number-theory/primality.js.map +1 -0
  77. package/dist/reasoning/number-theory/symbols.d.ts +3 -0
  78. package/dist/reasoning/number-theory/symbols.d.ts.map +1 -0
  79. package/dist/reasoning/number-theory/symbols.js +57 -0
  80. package/dist/reasoning/number-theory/symbols.js.map +1 -0
  81. package/dist/reasoning/real-analysis/index.d.ts +127 -0
  82. package/dist/reasoning/real-analysis/index.d.ts.map +1 -0
  83. package/dist/reasoning/real-analysis/index.js +638 -0
  84. package/dist/reasoning/real-analysis/index.js.map +1 -0
  85. package/dist/reasoning/topology/index.d.ts +41 -0
  86. package/dist/reasoning/topology/index.d.ts.map +1 -0
  87. package/dist/reasoning/topology/index.js +739 -0
  88. package/dist/reasoning/topology/index.js.map +1 -0
  89. package/dist/tests/logic/profiles/natural-deduction-nk/nk.test.d.ts +2 -0
  90. package/dist/tests/logic/profiles/natural-deduction-nk/nk.test.d.ts.map +1 -0
  91. package/dist/tests/logic/profiles/natural-deduction-nk/nk.test.js +288 -0
  92. package/dist/tests/logic/profiles/natural-deduction-nk/nk.test.js.map +1 -0
  93. package/dist/tests/reasoning/automata/automata.test.d.ts +2 -0
  94. package/dist/tests/reasoning/automata/automata.test.d.ts.map +1 -0
  95. package/dist/tests/reasoning/automata/automata.test.js +310 -0
  96. package/dist/tests/reasoning/automata/automata.test.js.map +1 -0
  97. package/dist/tests/reasoning/computability/computability.test.d.ts +2 -0
  98. package/dist/tests/reasoning/computability/computability.test.d.ts.map +1 -0
  99. package/dist/tests/reasoning/computability/computability.test.js +246 -0
  100. package/dist/tests/reasoning/computability/computability.test.js.map +1 -0
  101. package/dist/tests/reasoning/number-theory/number-theory.test.d.ts +2 -0
  102. package/dist/tests/reasoning/number-theory/number-theory.test.d.ts.map +1 -0
  103. package/dist/tests/reasoning/number-theory/number-theory.test.js +170 -0
  104. package/dist/tests/reasoning/number-theory/number-theory.test.js.map +1 -0
  105. package/dist/tests/reasoning/real-analysis/real-analysis.test.d.ts +2 -0
  106. package/dist/tests/reasoning/real-analysis/real-analysis.test.d.ts.map +1 -0
  107. package/dist/tests/reasoning/real-analysis/real-analysis.test.js +197 -0
  108. package/dist/tests/reasoning/real-analysis/real-analysis.test.js.map +1 -0
  109. package/dist/tests/reasoning/topology/topology.test.d.ts +2 -0
  110. package/dist/tests/reasoning/topology/topology.test.d.ts.map +1 -0
  111. package/dist/tests/reasoning/topology/topology.test.js +327 -0
  112. package/dist/tests/reasoning/topology/topology.test.js.map +1 -0
  113. package/dist/tests/tooling/exporters/lean4/lean4-exporter.test.d.ts +2 -0
  114. package/dist/tests/tooling/exporters/lean4/lean4-exporter.test.d.ts.map +1 -0
  115. package/dist/tests/tooling/exporters/lean4/lean4-exporter.test.js +473 -0
  116. package/dist/tests/tooling/exporters/lean4/lean4-exporter.test.js.map +1 -0
  117. package/dist/tooling/exporters/lean4/index.d.ts +47 -0
  118. package/dist/tooling/exporters/lean4/index.d.ts.map +1 -0
  119. package/dist/tooling/exporters/lean4/index.js +423 -0
  120. package/dist/tooling/exporters/lean4/index.js.map +1 -0
  121. package/package.json +1 -1
@@ -0,0 +1,122 @@
1
+ "use strict";
2
+ // ============================================================
3
+ // ST Automata — NFA + subset construction
4
+ // ============================================================
5
+ //
6
+ // · epsilonClosure(M, S) — cierre-ε de un set de estados.
7
+ // · nfaAccepts(M, w) — simulación BFS sobre el frontier.
8
+ // · nfaToDfa(M) — subset construction.
9
+ // ============================================================
10
+ Object.defineProperty(exports, "__esModule", { value: true });
11
+ exports.epsilonClosure = epsilonClosure;
12
+ exports.nfaAccepts = nfaAccepts;
13
+ exports.nfaToDfa = nfaToDfa;
14
+ const types_1 = require("./types");
15
+ const epsOf = (M) => M.epsilon ?? types_1.EPSILON;
16
+ /** Cierre-ε: el menor conjunto T ⊇ S cerrado bajo transiciones ε. */
17
+ function epsilonClosure(M, states) {
18
+ const eps = epsOf(M);
19
+ const closure = new Set(states);
20
+ const stack = [...states];
21
+ while (stack.length > 0) {
22
+ const s = stack.pop();
23
+ if (s === undefined)
24
+ break;
25
+ const row = M.transitions.get(s);
26
+ if (!row)
27
+ continue;
28
+ const nextSet = row.get(eps);
29
+ if (!nextSet)
30
+ continue;
31
+ for (const n of nextSet) {
32
+ if (!closure.has(n)) {
33
+ closure.add(n);
34
+ stack.push(n);
35
+ }
36
+ }
37
+ }
38
+ return closure;
39
+ }
40
+ /** Step de la simulación: a partir de un set de estados, consumir un
41
+ * símbolo y luego cerrar bajo ε. */
42
+ function nfaStep(M, states, sym) {
43
+ const out = new Set();
44
+ for (const s of states) {
45
+ const row = M.transitions.get(s);
46
+ if (!row)
47
+ continue;
48
+ const nextSet = row.get(sym);
49
+ if (!nextSet)
50
+ continue;
51
+ for (const n of nextSet)
52
+ out.add(n);
53
+ }
54
+ return epsilonClosure(M, out);
55
+ }
56
+ function nfaAccepts(M, input) {
57
+ let current = epsilonClosure(M, new Set([M.initial]));
58
+ for (const ch of input) {
59
+ current = nfaStep(M, current, ch);
60
+ if (current.size === 0)
61
+ return false;
62
+ }
63
+ for (const s of current)
64
+ if (M.accept.has(s))
65
+ return true;
66
+ return false;
67
+ }
68
+ /** Subset construction: cada estado del DFA = subconjunto cerrado por ε
69
+ * de estados del NFA. Sólo se generan estados alcanzables. */
70
+ function nfaToDfa(M) {
71
+ const eps = epsOf(M);
72
+ const encode = (set) => {
73
+ return '{' + [...set].sort().join(',') + '}';
74
+ };
75
+ // Alfabeto del DFA = alfabeto del NFA sin ε.
76
+ const alphabet = new Set();
77
+ for (const a of M.alphabet)
78
+ if (a !== eps)
79
+ alphabet.add(a);
80
+ const startSet = epsilonClosure(M, new Set([M.initial]));
81
+ const startKey = encode(startSet);
82
+ const states = new Set([startKey]);
83
+ const transitions = new Map();
84
+ const accept = new Set();
85
+ const subsetOf = new Map();
86
+ subsetOf.set(startKey, startSet);
87
+ if ([...startSet].some((s) => M.accept.has(s)))
88
+ accept.add(startKey);
89
+ const queue = [startKey];
90
+ while (queue.length > 0) {
91
+ const key = queue.shift();
92
+ if (key === undefined)
93
+ break;
94
+ const subset = subsetOf.get(key);
95
+ if (!subset)
96
+ continue;
97
+ const row = new Map();
98
+ transitions.set(key, row);
99
+ for (const a of alphabet) {
100
+ const next = nfaStep(M, subset, a);
101
+ if (next.size === 0)
102
+ continue;
103
+ const nextKey = encode(next);
104
+ row.set(a, nextKey);
105
+ if (!states.has(nextKey)) {
106
+ states.add(nextKey);
107
+ subsetOf.set(nextKey, next);
108
+ if ([...next].some((s) => M.accept.has(s)))
109
+ accept.add(nextKey);
110
+ queue.push(nextKey);
111
+ }
112
+ }
113
+ }
114
+ return {
115
+ states,
116
+ alphabet,
117
+ transitions,
118
+ initial: startKey,
119
+ accept,
120
+ };
121
+ }
122
+ //# sourceMappingURL=nfa.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"nfa.js","sourceRoot":"","sources":["../../../src/reasoning/automata/nfa.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ import type { PDA, Symbol } from './types';
2
+ /** ¿`M` acepta `input`?
3
+ * `maxSteps` cota el número de configuraciones expandidas. */
4
+ export declare function pdaAccepts(M: PDA, input: string, maxSteps?: number): boolean;
5
+ /** PDA que acepta palíndromes pares e impares sobre {a, b} usando un
6
+ * marcador no determinista (transición ε al "espejo"). */
7
+ export declare function pdaPalindromes(alphabet?: ReadonlyArray<Symbol>): PDA;
8
+ /** PDA que acepta paréntesis balanceados (alfabeto '(' ')'). */
9
+ export declare function pdaBalancedParens(): PDA;
10
+ //# sourceMappingURL=pda.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pda.d.ts","sourceRoot":"","sources":["../../../src/reasoning/automata/pda.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAE,GAAG,EAAiB,MAAM,EAAE,MAAM,SAAS,CAAC;AAW1D;+DAC+D;AAC/D,wBAAgB,UAAU,CAAC,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,SAAU,GAAG,OAAO,CAmD7E;AAID;2DAC2D;AAC3D,wBAAgB,cAAc,CAAC,QAAQ,GAAE,aAAa,CAAC,MAAM,CAAc,GAAG,GAAG,CAmEhF;AAED,gEAAgE;AAChE,wBAAgB,iBAAiB,IAAI,GAAG,CAsBvC"}
@@ -0,0 +1,169 @@
1
+ "use strict";
2
+ // ============================================================
3
+ // ST Automata — PDA (Pushdown Automaton)
4
+ // ============================================================
5
+ //
6
+ // Aceptación por estado final, con simulación no determinista.
7
+ //
8
+ // Una configuración es (state, posición de entrada, pila como string).
9
+ // Se exploran con BFS pero con memoización de configuraciones vistas
10
+ // para evitar bucles ε. Si la búsqueda explota, `maxDepth` corta.
11
+ // ============================================================
12
+ Object.defineProperty(exports, "__esModule", { value: true });
13
+ exports.pdaAccepts = pdaAccepts;
14
+ exports.pdaPalindromes = pdaPalindromes;
15
+ exports.pdaBalancedParens = pdaBalancedParens;
16
+ const types_1 = require("./types");
17
+ const configKey = (c) => `${c.state}|${c.pos}|${c.stack}`;
18
+ /** ¿`M` acepta `input`?
19
+ * `maxSteps` cota el número de configuraciones expandidas. */
20
+ function pdaAccepts(M, input, maxSteps = 100_000) {
21
+ const start = {
22
+ state: M.initial,
23
+ pos: 0,
24
+ stack: M.initialStack,
25
+ };
26
+ const queue = [start];
27
+ const seen = new Set([configKey(start)]);
28
+ let steps = 0;
29
+ while (queue.length > 0) {
30
+ if (steps++ > maxSteps)
31
+ return false;
32
+ const cfg = queue.shift();
33
+ if (!cfg)
34
+ break;
35
+ // Aceptación por estado final con input consumido.
36
+ if (cfg.pos === input.length && M.accept.has(cfg.state))
37
+ return true;
38
+ const top = cfg.stack.length > 0 ? cfg.stack[cfg.stack.length - 1] : undefined;
39
+ for (const t of M.transitions) {
40
+ if (t.state !== cfg.state)
41
+ continue;
42
+ // Symbol de entrada.
43
+ if (t.read !== types_1.EPSILON) {
44
+ if (cfg.pos >= input.length)
45
+ continue;
46
+ if (input[cfg.pos] !== t.read)
47
+ continue;
48
+ }
49
+ // Pop.
50
+ if (t.popTop !== types_1.EPSILON) {
51
+ if (top === undefined)
52
+ continue;
53
+ if (top !== t.popTop)
54
+ continue;
55
+ }
56
+ const newStack = t.popTop !== types_1.EPSILON ? cfg.stack.slice(0, -1) : cfg.stack;
57
+ // pushTop: el último elemento queda en la cima → simplemente
58
+ // concatenar la string en orden.
59
+ const pushed = t.pushTop.join('');
60
+ const finalStack = newStack + pushed;
61
+ const newPos = t.read !== types_1.EPSILON ? cfg.pos + 1 : cfg.pos;
62
+ const next = {
63
+ state: t.nextState,
64
+ pos: newPos,
65
+ stack: finalStack,
66
+ };
67
+ const key = configKey(next);
68
+ if (seen.has(key))
69
+ continue;
70
+ seen.add(key);
71
+ queue.push(next);
72
+ }
73
+ }
74
+ return false;
75
+ }
76
+ // ── Lenguajes estándar libres de contexto ────────────────────
77
+ /** PDA que acepta palíndromes pares e impares sobre {a, b} usando un
78
+ * marcador no determinista (transición ε al "espejo"). */
79
+ function pdaPalindromes(alphabet = ['a', 'b']) {
80
+ const Z = '$';
81
+ // Estados:
82
+ // q0: empujando la primera mitad.
83
+ // q1: comparando contra la segunda mitad.
84
+ // q2: accept.
85
+ const states = new Set(['q0', 'q1', 'q2']);
86
+ const stackAlphabet = new Set([Z, ...alphabet]);
87
+ const alpha = new Set(alphabet);
88
+ const transitions = [];
89
+ // q0 → q0, leer x, push x (apilar)
90
+ for (const x of alphabet) {
91
+ transitions.push({
92
+ state: 'q0',
93
+ read: x,
94
+ popTop: types_1.EPSILON,
95
+ nextState: 'q0',
96
+ pushTop: [x],
97
+ });
98
+ }
99
+ // q0 → q1, ε, ε, [] (cambio al modo comparar, palíndrome par)
100
+ transitions.push({
101
+ state: 'q0',
102
+ read: types_1.EPSILON,
103
+ popTop: types_1.EPSILON,
104
+ nextState: 'q1',
105
+ pushTop: [],
106
+ });
107
+ // q0 → q1, leer x, ε, [] (skip carácter central, palíndrome impar)
108
+ for (const x of alphabet) {
109
+ transitions.push({
110
+ state: 'q0',
111
+ read: x,
112
+ popTop: types_1.EPSILON,
113
+ nextState: 'q1',
114
+ pushTop: [],
115
+ });
116
+ }
117
+ // q1 → q1, leer x, pop x, [] (matchear segunda mitad)
118
+ for (const x of alphabet) {
119
+ transitions.push({
120
+ state: 'q1',
121
+ read: x,
122
+ popTop: x,
123
+ nextState: 'q1',
124
+ pushTop: [],
125
+ });
126
+ }
127
+ // q1 → q2, ε, pop Z, [Z] (stack vuelve a $)
128
+ transitions.push({
129
+ state: 'q1',
130
+ read: types_1.EPSILON,
131
+ popTop: Z,
132
+ nextState: 'q2',
133
+ pushTop: [Z],
134
+ });
135
+ return {
136
+ states,
137
+ alphabet: alpha,
138
+ stackAlphabet,
139
+ transitions,
140
+ initial: 'q0',
141
+ initialStack: Z,
142
+ accept: new Set(['q2']),
143
+ };
144
+ }
145
+ /** PDA que acepta paréntesis balanceados (alfabeto '(' ')'). */
146
+ function pdaBalancedParens() {
147
+ const Z = '$';
148
+ const states = new Set(['q0', 'q1']);
149
+ const alpha = new Set(['(', ')']);
150
+ const stackAlphabet = new Set([Z, '(']);
151
+ const transitions = [
152
+ // Abrir paréntesis: push '('.
153
+ { state: 'q0', read: '(', popTop: types_1.EPSILON, nextState: 'q0', pushTop: ['('] },
154
+ // Cerrar paréntesis: pop '('.
155
+ { state: 'q0', read: ')', popTop: '(', nextState: 'q0', pushTop: [] },
156
+ // Aceptar al ver $ en la cima (todo balanceado) — sin tocar pila.
157
+ { state: 'q0', read: types_1.EPSILON, popTop: Z, nextState: 'q1', pushTop: [Z] },
158
+ ];
159
+ return {
160
+ states,
161
+ alphabet: alpha,
162
+ stackAlphabet,
163
+ transitions,
164
+ initial: 'q0',
165
+ initialStack: Z,
166
+ accept: new Set(['q1']),
167
+ };
168
+ }
169
+ //# sourceMappingURL=pda.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pda.js","sourceRoot":"","sources":["../../../src/reasoning/automata/pda.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ import type { NFA, Regex } from './types';
2
+ export declare function parseRegex(s: string): Regex;
3
+ export declare function regexToNfa(r: Regex): NFA;
4
+ /** Atajo: ¿la expresión regular `r` matchea exactamente `s`? */
5
+ export declare function regexMatches(r: Regex, s: string): boolean;
6
+ //# sourceMappingURL=regex.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"regex.d.ts","sourceRoot":"","sources":["../../../src/reasoning/automata/regex.ts"],"names":[],"mappings":"AAkBA,OAAO,KAAK,EAAE,GAAG,EAAE,KAAK,EAAU,MAAM,SAAS,CAAC;AA+FlD,wBAAgB,UAAU,CAAC,CAAC,EAAE,MAAM,GAAG,KAAK,CAO3C;AAoHD,wBAAgB,UAAU,CAAC,CAAC,EAAE,KAAK,GAAG,GAAG,CAwCxC;AAED,gEAAgE;AAChE,wBAAgB,YAAY,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,GAAG,OAAO,CAGzD"}
@@ -0,0 +1,259 @@
1
+ "use strict";
2
+ // ============================================================
3
+ // ST Automata — Regex parsing + Thompson construction
4
+ // ============================================================
5
+ //
6
+ // Gramática soportada (precedencia: postfix > concat > '|'):
7
+ //
8
+ // expr := term ( '|' term )*
9
+ // term := factor* (concatenación implícita)
10
+ // factor := atom ( '*' | '+' | '?' )*
11
+ // atom := char | '(' expr ')' | '∅' (vacío) | 'ε'
12
+ //
13
+ // Caracteres reservados: ( ) | * + ? → escapar con '\'.
14
+ // '∅' y 'ε' son atómicos opcionales (no son obligatorios para parsear).
15
+ //
16
+ // `regexToNfa` construye un NFA por la construcción de Thompson:
17
+ // para cada operador un fragmento con un único initial y un único accept.
18
+ // ============================================================
19
+ Object.defineProperty(exports, "__esModule", { value: true });
20
+ exports.parseRegex = parseRegex;
21
+ exports.regexToNfa = regexToNfa;
22
+ exports.regexMatches = regexMatches;
23
+ const types_1 = require("./types");
24
+ const nfa_1 = require("./nfa");
25
+ function peek(c) {
26
+ return c.i < c.s.length ? c.s[c.i] : undefined;
27
+ }
28
+ function consume(c) {
29
+ const ch = peek(c);
30
+ if (ch !== undefined)
31
+ c.i++;
32
+ return ch;
33
+ }
34
+ function expect(c, ch) {
35
+ const got = consume(c);
36
+ if (got !== ch)
37
+ throw new Error(`parseRegex: esperaba "${ch}" en pos ${c.i - 1}, vi "${got ?? 'EOF'}"`);
38
+ }
39
+ const POSTFIX = new Set(['*', '+', '?']);
40
+ const SPECIAL = new Set(['(', ')', '|', '*', '+', '?', '\\']);
41
+ function parseExpr(c) {
42
+ let left = parseTerm(c);
43
+ while (peek(c) === '|') {
44
+ consume(c);
45
+ const right = parseTerm(c);
46
+ left = { kind: 'union', left, right };
47
+ }
48
+ return left;
49
+ }
50
+ function parseTerm(c) {
51
+ // term puede ser vacío → ε.
52
+ const atoms = [];
53
+ while (true) {
54
+ const ch = peek(c);
55
+ if (ch === undefined || ch === '|' || ch === ')')
56
+ break;
57
+ atoms.push(parseFactor(c));
58
+ }
59
+ if (atoms.length === 0)
60
+ return { kind: 'epsilon' };
61
+ return atoms.reduce((acc, r) => ({ kind: 'concat', left: acc, right: r }));
62
+ }
63
+ function parseFactor(c) {
64
+ let atom = parseAtom(c);
65
+ while (true) {
66
+ const ch = peek(c);
67
+ if (ch === undefined || !POSTFIX.has(ch))
68
+ break;
69
+ consume(c);
70
+ if (ch === '*')
71
+ atom = { kind: 'star', arg: atom };
72
+ else if (ch === '+')
73
+ atom = { kind: 'plus', arg: atom };
74
+ else if (ch === '?')
75
+ atom = { kind: 'optional', arg: atom };
76
+ }
77
+ return atom;
78
+ }
79
+ function parseAtom(c) {
80
+ const ch = peek(c);
81
+ if (ch === undefined)
82
+ throw new Error('parseRegex: EOF inesperado en atom');
83
+ if (ch === '(') {
84
+ consume(c);
85
+ const inner = parseExpr(c);
86
+ expect(c, ')');
87
+ return inner;
88
+ }
89
+ if (ch === '\\') {
90
+ consume(c);
91
+ const esc = consume(c);
92
+ if (esc === undefined)
93
+ throw new Error('parseRegex: escape colgante');
94
+ return { kind: 'char', c: esc };
95
+ }
96
+ if (ch === '∅') {
97
+ consume(c);
98
+ return { kind: 'empty' };
99
+ }
100
+ if (ch === 'ε') {
101
+ consume(c);
102
+ return { kind: 'epsilon' };
103
+ }
104
+ if (SPECIAL.has(ch)) {
105
+ throw new Error(`parseRegex: caracter "${ch}" reservado en pos ${c.i}`);
106
+ }
107
+ consume(c);
108
+ return { kind: 'char', c: ch };
109
+ }
110
+ function parseRegex(s) {
111
+ const c = { s, i: 0 };
112
+ const r = parseExpr(c);
113
+ if (c.i !== s.length) {
114
+ throw new Error(`parseRegex: tokens restantes en pos ${c.i}: "${s.slice(c.i)}"`);
115
+ }
116
+ return r;
117
+ }
118
+ function emptyFragment(initial, accept) {
119
+ return { initial, accept, edges: new Map(), alphabet: new Set() };
120
+ }
121
+ function addEdge(frag, from, sym, to) {
122
+ let row = frag.edges.get(from);
123
+ if (!row) {
124
+ row = new Map();
125
+ frag.edges.set(from, row);
126
+ }
127
+ let set = row.get(sym);
128
+ if (!set) {
129
+ set = new Set();
130
+ row.set(sym, set);
131
+ }
132
+ set.add(to);
133
+ if (sym !== types_1.EPSILON)
134
+ frag.alphabet.add(sym);
135
+ }
136
+ function mergeEdges(into, other) {
137
+ for (const [from, row] of other.edges) {
138
+ for (const [sym, set] of row) {
139
+ for (const to of set)
140
+ addEdge(into, from, sym, to);
141
+ }
142
+ }
143
+ for (const a of other.alphabet)
144
+ into.alphabet.add(a);
145
+ }
146
+ function buildFragment(r, fresh) {
147
+ if (r.kind === 'epsilon') {
148
+ const init = fresh();
149
+ const acc = fresh();
150
+ const frag = emptyFragment(init, acc);
151
+ addEdge(frag, init, types_1.EPSILON, acc);
152
+ return frag;
153
+ }
154
+ if (r.kind === 'empty') {
155
+ // Lenguaje vacío: dos estados sin conexión. No hay camino al accept.
156
+ const init = fresh();
157
+ const acc = fresh();
158
+ return emptyFragment(init, acc);
159
+ }
160
+ if (r.kind === 'char') {
161
+ const init = fresh();
162
+ const acc = fresh();
163
+ const frag = emptyFragment(init, acc);
164
+ addEdge(frag, init, r.c, acc);
165
+ return frag;
166
+ }
167
+ if (r.kind === 'concat') {
168
+ const A = buildFragment(r.left, fresh);
169
+ const B = buildFragment(r.right, fresh);
170
+ const frag = emptyFragment(A.initial, B.accept);
171
+ mergeEdges(frag, A);
172
+ mergeEdges(frag, B);
173
+ addEdge(frag, A.accept, types_1.EPSILON, B.initial);
174
+ return frag;
175
+ }
176
+ if (r.kind === 'union') {
177
+ const A = buildFragment(r.left, fresh);
178
+ const B = buildFragment(r.right, fresh);
179
+ const init = fresh();
180
+ const acc = fresh();
181
+ const frag = emptyFragment(init, acc);
182
+ mergeEdges(frag, A);
183
+ mergeEdges(frag, B);
184
+ addEdge(frag, init, types_1.EPSILON, A.initial);
185
+ addEdge(frag, init, types_1.EPSILON, B.initial);
186
+ addEdge(frag, A.accept, types_1.EPSILON, acc);
187
+ addEdge(frag, B.accept, types_1.EPSILON, acc);
188
+ return frag;
189
+ }
190
+ if (r.kind === 'star') {
191
+ const A = buildFragment(r.arg, fresh);
192
+ const init = fresh();
193
+ const acc = fresh();
194
+ const frag = emptyFragment(init, acc);
195
+ mergeEdges(frag, A);
196
+ addEdge(frag, init, types_1.EPSILON, A.initial);
197
+ addEdge(frag, init, types_1.EPSILON, acc);
198
+ addEdge(frag, A.accept, types_1.EPSILON, A.initial);
199
+ addEdge(frag, A.accept, types_1.EPSILON, acc);
200
+ return frag;
201
+ }
202
+ if (r.kind === 'plus') {
203
+ // a+ = a · a*
204
+ return buildFragment({ kind: 'concat', left: r.arg, right: { kind: 'star', arg: r.arg } }, fresh);
205
+ }
206
+ if (r.kind === 'optional') {
207
+ // a? = a | ε
208
+ return buildFragment({ kind: 'union', left: r.arg, right: { kind: 'epsilon' } }, fresh);
209
+ }
210
+ // Exhaustivo.
211
+ const _exhaustive = r;
212
+ return _exhaustive;
213
+ }
214
+ function regexToNfa(r) {
215
+ let counter = 0;
216
+ const fresh = () => counter++;
217
+ const frag = buildFragment(r, fresh);
218
+ // Convertir entero → string para encajar con NFA.
219
+ const stateName = (n) => `s${n}`;
220
+ const states = new Set();
221
+ const transitions = new Map();
222
+ // Asegurar que todos los estados conocidos estén poblados, incluso los
223
+ // que sólo aparecen como destino.
224
+ const seen = new Set();
225
+ for (const [from, row] of frag.edges) {
226
+ seen.add(from);
227
+ for (const set of row.values())
228
+ for (const to of set)
229
+ seen.add(to);
230
+ }
231
+ seen.add(frag.initial);
232
+ seen.add(frag.accept);
233
+ for (const n of seen)
234
+ states.add(stateName(n));
235
+ for (const [from, row] of frag.edges) {
236
+ const newRow = new Map();
237
+ for (const [sym, set] of row) {
238
+ const newSet = new Set();
239
+ for (const to of set)
240
+ newSet.add(stateName(to));
241
+ newRow.set(sym, newSet);
242
+ }
243
+ transitions.set(stateName(from), newRow);
244
+ }
245
+ return {
246
+ states,
247
+ alphabet: frag.alphabet,
248
+ transitions,
249
+ initial: stateName(frag.initial),
250
+ accept: new Set([stateName(frag.accept)]),
251
+ epsilon: types_1.EPSILON,
252
+ };
253
+ }
254
+ /** Atajo: ¿la expresión regular `r` matchea exactamente `s`? */
255
+ function regexMatches(r, s) {
256
+ const nfa = regexToNfa(r);
257
+ return (0, nfa_1.nfaAccepts)(nfa, s);
258
+ }
259
+ //# sourceMappingURL=regex.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"regex.js","sourceRoot":"","sources":["../../../src/reasoning/automata/regex.ts"],"names":[],"mappings":"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"}