prolog-trace-viz 1.1.2 → 2.0.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.
- package/README.md +43 -30
- package/dist/analyzer.d.ts.map +1 -1
- package/dist/analyzer.js +268 -96
- package/dist/analyzer.js.map +1 -1
- package/dist/build-info.d.ts +3 -3
- package/dist/build-info.js +3 -3
- package/dist/clauses.d.ts +11 -0
- package/dist/clauses.d.ts.map +1 -1
- package/dist/clauses.js +12 -0
- package/dist/clauses.js.map +1 -1
- package/dist/cli.d.ts +4 -6
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +2 -25
- package/dist/cli.js.map +1 -1
- package/dist/index.js +80 -22
- package/dist/index.js.map +1 -1
- package/dist/markdown-generator.d.ts +24 -0
- package/dist/markdown-generator.d.ts.map +1 -0
- package/dist/markdown-generator.js +124 -0
- package/dist/markdown-generator.js.map +1 -0
- package/dist/parser.d.ts +12 -1
- package/dist/parser.d.ts.map +1 -1
- package/dist/parser.js +67 -35
- package/dist/parser.js.map +1 -1
- package/dist/timeline-formatter.d.ts +9 -0
- package/dist/timeline-formatter.d.ts.map +1 -0
- package/dist/timeline-formatter.js +149 -0
- package/dist/timeline-formatter.js.map +1 -0
- package/dist/timeline.d.ts +148 -0
- package/dist/timeline.d.ts.map +1 -0
- package/dist/timeline.js +601 -0
- package/dist/timeline.js.map +1 -0
- package/dist/tree-formatter.d.ts +13 -0
- package/dist/tree-formatter.d.ts.map +1 -0
- package/dist/tree-formatter.js +136 -0
- package/dist/tree-formatter.js.map +1 -0
- package/dist/tree.d.ts +75 -0
- package/dist/tree.d.ts.map +1 -0
- package/dist/tree.js +267 -0
- package/dist/tree.js.map +1 -0
- package/dist/wrapper.d.ts +8 -1
- package/dist/wrapper.d.ts.map +1 -1
- package/dist/wrapper.js +41 -17
- package/dist/wrapper.js.map +1 -1
- package/package.json +1 -1
- package/tracer.pl +127 -16
|
@@ -0,0 +1,149 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Timeline Formatter - Formats timeline steps into markdown
|
|
3
|
+
*/
|
|
4
|
+
/**
|
|
5
|
+
* Format timeline steps into markdown
|
|
6
|
+
*/
|
|
7
|
+
export function formatTimeline(steps) {
|
|
8
|
+
const lines = [];
|
|
9
|
+
for (const step of steps) {
|
|
10
|
+
lines.push(...formatStep(step));
|
|
11
|
+
lines.push('');
|
|
12
|
+
}
|
|
13
|
+
return lines.join('\n');
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Format a single timeline step
|
|
17
|
+
*/
|
|
18
|
+
function formatStep(step) {
|
|
19
|
+
const lines = [];
|
|
20
|
+
// Step header with box drawing
|
|
21
|
+
lines.push(`┌─ Step ${step.stepNumber}: ${step.port.toUpperCase()} ${step.goal}`);
|
|
22
|
+
// Add subgoal marker for CALL steps only
|
|
23
|
+
if (step.port === 'call' && step.subgoalLabel) {
|
|
24
|
+
lines.push(`│ ◀── Solving subgoal ${step.subgoalLabel}`);
|
|
25
|
+
}
|
|
26
|
+
// Format based on port type
|
|
27
|
+
switch (step.port) {
|
|
28
|
+
case 'call':
|
|
29
|
+
lines.push(...formatCallStep(step));
|
|
30
|
+
break;
|
|
31
|
+
case 'exit':
|
|
32
|
+
lines.push(...formatExitStep(step));
|
|
33
|
+
break;
|
|
34
|
+
case 'redo':
|
|
35
|
+
lines.push(...formatRedoStep(step));
|
|
36
|
+
break;
|
|
37
|
+
case 'fail':
|
|
38
|
+
lines.push(...formatFailStep(step));
|
|
39
|
+
break;
|
|
40
|
+
}
|
|
41
|
+
lines.push('└─');
|
|
42
|
+
return lines;
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Format CALL step
|
|
46
|
+
*/
|
|
47
|
+
function formatCallStep(step) {
|
|
48
|
+
const lines = [];
|
|
49
|
+
// Show pattern match if clause available
|
|
50
|
+
if (step.clause) {
|
|
51
|
+
lines.push('│ ');
|
|
52
|
+
lines.push('│ Pattern Match:');
|
|
53
|
+
lines.push(`│ Goal: ${step.goal}`);
|
|
54
|
+
lines.push(`│ Head: ${step.clause.head}`);
|
|
55
|
+
// Show unifications if any
|
|
56
|
+
if (step.unifications.length > 0) {
|
|
57
|
+
for (const unif of step.unifications) {
|
|
58
|
+
lines.push(`│ ├─ ${unif.variable} = ${unif.value}`);
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
lines.push('│ ');
|
|
62
|
+
// Display clause head and body separately
|
|
63
|
+
if (step.clause.body && step.clause.body !== 'true') {
|
|
64
|
+
// Clause with body
|
|
65
|
+
lines.push(`│ Clause: ${step.clause.head} :- ${step.clause.body} [line ${step.clause.line}]`);
|
|
66
|
+
}
|
|
67
|
+
else {
|
|
68
|
+
// Fact (no body)
|
|
69
|
+
lines.push(`│ Clause: ${step.clause.head} [line ${step.clause.line}] (fact)`);
|
|
70
|
+
}
|
|
71
|
+
// Show spawned subgoals
|
|
72
|
+
if (step.subgoals.length > 0) {
|
|
73
|
+
lines.push('│ Spawns subgoals:');
|
|
74
|
+
for (const subgoal of step.subgoals) {
|
|
75
|
+
lines.push(`│ ${subgoal.label} ${subgoal.goal}`);
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
return lines;
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* Format EXIT step
|
|
83
|
+
*/
|
|
84
|
+
function formatExitStep(step) {
|
|
85
|
+
const lines = [];
|
|
86
|
+
// Show completed subgoal marker
|
|
87
|
+
if (step.subgoalLabel) {
|
|
88
|
+
lines.push(`│ ◀── Completed subgoal ${step.subgoalLabel}`);
|
|
89
|
+
}
|
|
90
|
+
// Show bindings
|
|
91
|
+
if (step.unifications.length > 0) {
|
|
92
|
+
lines.push('│ Bindings:');
|
|
93
|
+
for (const unif of step.unifications) {
|
|
94
|
+
lines.push(`│ ${unif.variable} = ${unif.value}`);
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
// Show return-to reference
|
|
98
|
+
if (step.returnsTo) {
|
|
99
|
+
lines.push(`│ Returns to: Step ${step.returnsTo}`);
|
|
100
|
+
}
|
|
101
|
+
// Show variable flow notes
|
|
102
|
+
if (step.variableFlowNotes && step.variableFlowNotes.length > 0) {
|
|
103
|
+
for (const note of step.variableFlowNotes) {
|
|
104
|
+
lines.push(`│ Note: ${note}`);
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
// Show general note (if any)
|
|
108
|
+
if (step.note) {
|
|
109
|
+
lines.push(`│ Note: ${step.note}`);
|
|
110
|
+
}
|
|
111
|
+
// Show next subgoal
|
|
112
|
+
if (step.nextSubgoal) {
|
|
113
|
+
lines.push(`│ Next: ${step.nextSubgoal}`);
|
|
114
|
+
}
|
|
115
|
+
return lines;
|
|
116
|
+
}
|
|
117
|
+
/**
|
|
118
|
+
* Format REDO step
|
|
119
|
+
*/
|
|
120
|
+
function formatRedoStep(step) {
|
|
121
|
+
const lines = [];
|
|
122
|
+
if (step.note) {
|
|
123
|
+
lines.push(`│ ${step.note}`);
|
|
124
|
+
}
|
|
125
|
+
if (step.clause) {
|
|
126
|
+
lines.push(`│ Trying clause: ${step.clause.head} [line ${step.clause.line}]`);
|
|
127
|
+
}
|
|
128
|
+
return lines;
|
|
129
|
+
}
|
|
130
|
+
/**
|
|
131
|
+
* Format FAIL step
|
|
132
|
+
*/
|
|
133
|
+
function formatFailStep(step) {
|
|
134
|
+
const lines = [];
|
|
135
|
+
lines.push('│ Failure');
|
|
136
|
+
if (step.note) {
|
|
137
|
+
lines.push(`│ ${step.note}`);
|
|
138
|
+
}
|
|
139
|
+
return lines;
|
|
140
|
+
}
|
|
141
|
+
/**
|
|
142
|
+
* Format built-in predicates concisely
|
|
143
|
+
*/
|
|
144
|
+
function isBuiltIn(goal) {
|
|
145
|
+
const builtins = ['>', '<', '>=', '=<', '=:=', '=\\=', 'is', '=', '\\=', 'true'];
|
|
146
|
+
const predicate = goal.match(/^([^(]+)/)?.[1];
|
|
147
|
+
return predicate ? builtins.includes(predicate) : false;
|
|
148
|
+
}
|
|
149
|
+
//# sourceMappingURL=timeline-formatter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"timeline-formatter.js","sourceRoot":"","sources":["../src/timeline-formatter.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH;;GAEG;AACH,MAAM,UAAU,cAAc,CAAC,KAAqB;IAClD,MAAM,KAAK,GAAa,EAAE,CAAC;IAE3B,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,KAAK,CAAC,IAAI,CAAC,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC;QAChC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACjB,CAAC;IAED,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC;AAED;;GAEG;AACH,SAAS,UAAU,CAAC,IAAkB;IACpC,MAAM,KAAK,GAAa,EAAE,CAAC;IAE3B,+BAA+B;IAC/B,KAAK,CAAC,IAAI,CAAC,WAAW,IAAI,CAAC,UAAU,KAAK,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;IAElF,yCAAyC;IACzC,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;QAC9C,KAAK,CAAC,IAAI,CAAC,0BAA0B,IAAI,CAAC,YAAY,EAAE,CAAC,CAAC;IAC5D,CAAC;IAED,4BAA4B;IAC5B,QAAQ,IAAI,CAAC,IAAI,EAAE,CAAC;QAClB,KAAK,MAAM;YACT,KAAK,CAAC,IAAI,CAAC,GAAG,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC;YACpC,MAAM;QACR,KAAK,MAAM;YACT,KAAK,CAAC,IAAI,CAAC,GAAG,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC;YACpC,MAAM;QACR,KAAK,MAAM;YACT,KAAK,CAAC,IAAI,CAAC,GAAG,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC;YACpC,MAAM;QACR,KAAK,MAAM;YACT,KAAK,CAAC,IAAI,CAAC,GAAG,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC;YACpC,MAAM;IACV,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAEjB,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;GAEG;AACH,SAAS,cAAc,CAAC,IAAkB;IACxC,MAAM,KAAK,GAAa,EAAE,CAAC;IAE3B,yCAAyC;IACzC,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;QAChB,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAClB,KAAK,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;QAChC,KAAK,CAAC,IAAI,CAAC,cAAc,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;QACtC,KAAK,CAAC,IAAI,CAAC,cAAc,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC;QAE7C,2BAA2B;QAC3B,IAAI,IAAI,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACjC,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;gBACrC,KAAK,CAAC,IAAI,CAAC,WAAW,IAAI,CAAC,QAAQ,MAAM,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC;YACzD,CAAC;QACH,CAAC;QAED,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAElB,0CAA0C;QAC1C,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;YACpD,mBAAmB;YACnB,KAAK,CAAC,IAAI,CAAC,cAAc,IAAI,CAAC,MAAM,CAAC,IAAI,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,UAAU,IAAI,CAAC,MAAM,CAAC,IAAI,GAAG,CAAC,CAAC;QACjG,CAAC;aAAM,CAAC;YACN,iBAAiB;YACjB,KAAK,CAAC,IAAI,CAAC,cAAc,IAAI,CAAC,MAAM,CAAC,IAAI,UAAU,IAAI,CAAC,MAAM,CAAC,IAAI,UAAU,CAAC,CAAC;QACjF,CAAC;QAED,wBAAwB;QACxB,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC7B,KAAK,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC;YAClC,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;gBACpC,KAAK,CAAC,IAAI,CAAC,QAAQ,OAAO,CAAC,KAAK,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;YACtD,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;GAEG;AACH,SAAS,cAAc,CAAC,IAAkB;IACxC,MAAM,KAAK,GAAa,EAAE,CAAC;IAE3B,gCAAgC;IAChC,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;QACtB,KAAK,CAAC,IAAI,CAAC,4BAA4B,IAAI,CAAC,YAAY,EAAE,CAAC,CAAC;IAC9D,CAAC;IAED,gBAAgB;IAChB,IAAI,IAAI,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACjC,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;QAC3B,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;YACrC,KAAK,CAAC,IAAI,CAAC,QAAQ,IAAI,CAAC,QAAQ,MAAM,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC;QACtD,CAAC;IACH,CAAC;IAED,2BAA2B;IAC3B,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;QACnB,KAAK,CAAC,IAAI,CAAC,uBAAuB,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC;IACtD,CAAC;IAED,2BAA2B;IAC3B,IAAI,IAAI,CAAC,iBAAiB,IAAI,IAAI,CAAC,iBAAiB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAChE,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,iBAAiB,EAAE,CAAC;YAC1C,KAAK,CAAC,IAAI,CAAC,YAAY,IAAI,EAAE,CAAC,CAAC;QACjC,CAAC;IACH,CAAC;IAED,6BAA6B;IAC7B,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;QACd,KAAK,CAAC,IAAI,CAAC,YAAY,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;IACtC,CAAC;IAED,oBAAoB;IACpB,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;QACrB,KAAK,CAAC,IAAI,CAAC,YAAY,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC;IAC7C,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;GAEG;AACH,SAAS,cAAc,CAAC,IAAkB;IACxC,MAAM,KAAK,GAAa,EAAE,CAAC;IAE3B,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;QACd,KAAK,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;IAChC,CAAC;IAED,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;QAChB,KAAK,CAAC,IAAI,CAAC,qBAAqB,IAAI,CAAC,MAAM,CAAC,IAAI,UAAU,IAAI,CAAC,MAAM,CAAC,IAAI,GAAG,CAAC,CAAC;IACjF,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;GAEG;AACH,SAAS,cAAc,CAAC,IAAkB;IACxC,MAAM,KAAK,GAAa,EAAE,CAAC;IAE3B,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;IAEzB,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;QACd,KAAK,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;IAChC,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;GAEG;AACH,SAAS,SAAS,CAAC,IAAY;IAC7B,MAAM,QAAQ,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;IACjF,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IAC9C,OAAO,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;AAC1D,CAAC"}
|
|
@@ -0,0 +1,148 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Timeline Builder - Constructs a flat, sequential timeline from trace events
|
|
3
|
+
*/
|
|
4
|
+
import { SourceClauseMap } from './clauses.js';
|
|
5
|
+
export interface TimelineStep {
|
|
6
|
+
stepNumber: number;
|
|
7
|
+
port: 'call' | 'exit' | 'redo' | 'fail';
|
|
8
|
+
level: number;
|
|
9
|
+
goal: string;
|
|
10
|
+
clause?: {
|
|
11
|
+
head: string;
|
|
12
|
+
body: string;
|
|
13
|
+
line: number;
|
|
14
|
+
};
|
|
15
|
+
unifications: Array<{
|
|
16
|
+
variable: string;
|
|
17
|
+
value: string;
|
|
18
|
+
}>;
|
|
19
|
+
subgoals: Array<{
|
|
20
|
+
label: string;
|
|
21
|
+
goal: string;
|
|
22
|
+
}>;
|
|
23
|
+
subgoalLabel?: string;
|
|
24
|
+
returnsTo?: number;
|
|
25
|
+
note?: string;
|
|
26
|
+
nextSubgoal?: string;
|
|
27
|
+
variableFlowNotes?: string[];
|
|
28
|
+
}
|
|
29
|
+
export interface TraceEvent {
|
|
30
|
+
port: 'call' | 'exit' | 'redo' | 'fail';
|
|
31
|
+
level: number;
|
|
32
|
+
goal: string;
|
|
33
|
+
predicate: string;
|
|
34
|
+
arguments?: any[];
|
|
35
|
+
clause?: {
|
|
36
|
+
head: string;
|
|
37
|
+
body: string;
|
|
38
|
+
line: number;
|
|
39
|
+
};
|
|
40
|
+
parent_info?: {
|
|
41
|
+
level: number;
|
|
42
|
+
goal: string;
|
|
43
|
+
};
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Timeline Builder class - processes trace events into timeline steps
|
|
47
|
+
*/
|
|
48
|
+
export declare class TimelineBuilder {
|
|
49
|
+
private events;
|
|
50
|
+
private sourceClauseMap?;
|
|
51
|
+
private steps;
|
|
52
|
+
private stepCounter;
|
|
53
|
+
private callStack;
|
|
54
|
+
private subgoalMap;
|
|
55
|
+
private parentSubgoals;
|
|
56
|
+
private completedSubgoals;
|
|
57
|
+
constructor(events: TraceEvent[], sourceClauseMap?: SourceClauseMap | undefined);
|
|
58
|
+
/**
|
|
59
|
+
* Check if a predicate is part of tracer infrastructure and should be filtered
|
|
60
|
+
*/
|
|
61
|
+
private isTracerPredicate;
|
|
62
|
+
/**
|
|
63
|
+
* Build the complete timeline from trace events
|
|
64
|
+
*/
|
|
65
|
+
build(): TimelineStep[];
|
|
66
|
+
/**
|
|
67
|
+
* Backfill clause information from EXIT events to their corresponding CALL events
|
|
68
|
+
*/
|
|
69
|
+
private backfillClauseInfo;
|
|
70
|
+
/**
|
|
71
|
+
* Update subgoal tracking markers based on execution flow
|
|
72
|
+
* This must run after backfillClauseInfo so we have all subgoals defined
|
|
73
|
+
*/
|
|
74
|
+
private updateSubgoalTracking;
|
|
75
|
+
/**
|
|
76
|
+
* Add variable flow tracking notes to steps
|
|
77
|
+
* This shows how variables from parent clauses flow into child goals
|
|
78
|
+
*/
|
|
79
|
+
private addVariableFlowNotes;
|
|
80
|
+
/**
|
|
81
|
+
* Extract the value of a variable from a goal based on its position in the clause head
|
|
82
|
+
*/
|
|
83
|
+
private extractVariableValueFromGoal;
|
|
84
|
+
/**
|
|
85
|
+
* Get source clause from the source clause map
|
|
86
|
+
*/
|
|
87
|
+
private getSourceClause;
|
|
88
|
+
/**
|
|
89
|
+
* Find the matching EXIT step for a CALL step
|
|
90
|
+
*/
|
|
91
|
+
private findMatchingExit;
|
|
92
|
+
/**
|
|
93
|
+
* Process a single trace event
|
|
94
|
+
*/
|
|
95
|
+
private processEvent;
|
|
96
|
+
/**
|
|
97
|
+
* Extract subgoals from a clause body
|
|
98
|
+
*/
|
|
99
|
+
private extractSubgoals;
|
|
100
|
+
/**
|
|
101
|
+
* Process CALL event
|
|
102
|
+
*/
|
|
103
|
+
private processCall;
|
|
104
|
+
/**
|
|
105
|
+
* Extract pattern match bindings by comparing goal with clause head
|
|
106
|
+
* Uses structural decomposition - not heuristics, just comparing known data
|
|
107
|
+
*/
|
|
108
|
+
private extractPatternMatchBindings;
|
|
109
|
+
/**
|
|
110
|
+
* Recursively extract bindings by comparing pattern term with value term
|
|
111
|
+
* This is structural decomposition, not unification - we're just comparing strings
|
|
112
|
+
*/
|
|
113
|
+
private extractBindingsFromTermPair;
|
|
114
|
+
/**
|
|
115
|
+
* Check if a term is a simple variable
|
|
116
|
+
*/
|
|
117
|
+
private isSimpleVariable;
|
|
118
|
+
/**
|
|
119
|
+
* Find the main operator in a term
|
|
120
|
+
* Returns null if no operator found
|
|
121
|
+
*/
|
|
122
|
+
private findOperator;
|
|
123
|
+
/**
|
|
124
|
+
* Parse a list pattern
|
|
125
|
+
*/
|
|
126
|
+
private parseListPattern;
|
|
127
|
+
/**
|
|
128
|
+
* Extract unifications by comparing CALL and EXIT goals
|
|
129
|
+
*/
|
|
130
|
+
private extractUnifications;
|
|
131
|
+
/**
|
|
132
|
+
* Split arguments respecting parentheses and brackets
|
|
133
|
+
*/
|
|
134
|
+
private splitArguments;
|
|
135
|
+
/**
|
|
136
|
+
* Process EXIT event
|
|
137
|
+
*/
|
|
138
|
+
private processExit;
|
|
139
|
+
/**
|
|
140
|
+
* Process REDO event
|
|
141
|
+
*/
|
|
142
|
+
private processRedo;
|
|
143
|
+
/**
|
|
144
|
+
* Process FAIL event
|
|
145
|
+
*/
|
|
146
|
+
private processFail;
|
|
147
|
+
}
|
|
148
|
+
//# sourceMappingURL=timeline.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"timeline.d.ts","sourceRoot":"","sources":["../src/timeline.ts"],"names":[],"mappings":"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"}
|