Advanced Compiler-Compiler Platform
This document describes the correct architecture implementation for Minotaur, focusing on:
src/Minotaur.Core/Models/Visualization/)GraphData.cs - Contains all data models for visualization:
GraphData - Root container for graph visualizationGraphNode - Represents a SymbolNode with visualization propertiesGraphEdge - Represents an edge between nodes with PackedNode infoCodeLocation & Position - Source code location trackingNodeAmbiguityInfo - Information about ambiguous SymbolNodesPackedNodeInfo - Information about each PackedNode alternativeCognitiveGraphVisualization - Complete visualization data with ambiguity supportVisualizationMode - Enum for different visualization modessrc/Minotaur.Core/Services/Visualization/)ICognitiveGraphVisualizer.cs - Interface for visualization service:
GenerateVisualization() - Creates visualization from CognitiveGraphGetAmbiguityPoints() - Identifies all ambiguous nodesGetAllInterpretationPaths() - Returns all possible parse pathsGenerateSingleInterpretation() - Shows only selected PackedNode pathCognitiveGraphVisualizer - Implementation that directly traverses SymbolNode/PackedNode structuressrc/Minotaur.Core/Controllers/Visualization/)VisualizationController.cs - REST API endpoints:
POST /api/visualization - Full visualization with all PackedNode alternativesPOST /api/visualization/ambiguities - List all ambiguity pointsPOST /api/visualization/interpretations - List all interpretation pathsPOST /api/visualization/select-interpretation - Select specific PackedNode pathsrc/Minotaur.UI.Blazor/Components/Shared/)CognitiveGraphVisualizer.razor - Main visualization component:
src/Minotaur.UI.Blazor/wwwroot/js/)cognitiveGraphVisualization.js - D3.js visualization:
src/Minotaur.Tests/Visualization/)CognitiveGraphVisualizerTests.cs - Unit tests for visualizer serviceVisualizationControllerTests.cs - Unit tests for controllerGraphDataModelTests.cs - Unit tests for data modelssrc/Minotaur.Core/Models/Grammar/)TokenDefinition.cs - Defines a token:
RuleDefinition.cs - Defines a production rule:
GrammarDefinition.cs - Complete grammar definition:
src/Minotaur.UI.Blazor/Components/GrammarEditor/)TokenEditor.razor - Token management:
RuleEditor.razor - Rule management:
GrammarPreview.razor - Grammar overview:
TestPanel.razor - Grammar testing:
src/Minotaur.Core/Models/Plugins/)PluginInfo.cs - Plugin metadata:
src/Minotaur.UI.Blazor/Components/PluginManager/)PluginGallery.razor - Available plugins:
InstalledPlugins.razor - Installed plugins:
PluginDetails.razor - Plugin details:
Problem: Traditional AST visualizers force a single unambiguous tree, but Minotaur needs to support evolving languages where ambiguity is a feature.
Solution:
Problem: Need to visualize CognitiveGraph without losing information.
Solution:
Problem: Users need to understand and navigate ambiguity.
Solution:
Problem: Need a flexible editor for defining grammars.
Solution:
Problem: Need extensibility for different languages and features.
Solution:
Minotaur/
├── src/
│ ├── Minotaur.Core/
│ │ ├── Models/
│ │ │ ├── Visualization/
│ │ │ │ └── GraphData.cs
│ │ │ ├── Grammar/
│ │ │ │ ├── TokenDefinition.cs
│ │ │ │ ├── RuleDefinition.cs
│ │ │ │ └── GrammarDefinition.cs
│ │ │ └── Plugins/
│ │ │ └── PluginInfo.cs
│ │ ├── Services/
│ │ │ └── Visualization/
│ │ │ └── ICognitiveGraphVisualizer.cs
│ │ └── Controllers/
│ │ └── Visualization/
│ │ └── VisualizationController.cs
│ │
│ ├── Minotaur.UI.Blazor/
│ │ ├── Components/
│ │ │ ├── Shared/
│ │ │ │ └── CognitiveGraphVisualizer.razor
│ │ │ ├── GrammarEditor/
│ │ │ │ ├── TokenEditor.razor
│ │ │ │ ├── RuleEditor.razor
│ │ │ │ ├── GrammarPreview.razor
│ │ │ │ └── TestPanel.razor
│ │ │ └── PluginManager/
│ │ │ ├── PluginGallery.razor
│ │ │ ├── InstalledPlugins.razor
│ │ │ └── PluginDetails.razor
│ │ └── wwwroot/
│ │ └── js/
│ │ └── cognitiveGraphVisualization.js
│ │
│ └── Minotaur.Tests/
│ └── Visualization/
│ ├── CognitiveGraphVisualizerTests.cs
│ ├── VisualizationControllerTests.cs
│ └── GraphDataModelTests.cs
The visualization system directly uses CognitiveGraph’s native types:
SymbolNode → GraphNodePackedNode → GraphEdge (with PackedNode metadata)PackedNode per SymbolNode → AmbiguityThis architecture provides:
The implementation correctly handles the unique requirements of Minotaur: