Skip to content

Commit c210f0e

Browse files
committed
✨ feat: adicionar diagramas de circuitos digitais com componente React customizado
Implementadas 3 figuras de circuitos digitais usando componente React SVG: **Figuras Implementadas:** - ✅ Figura 3.25: Meio-somador (half-adder) com portas XOR e AND - ✅ Figura 3.26: Somador completo (full-adder) construído com dois meio-somadores - ✅ Figura 3.27: Somador com propagação de vai-um (ripple-carry adder) de 3 bits **Componente React:** - Localização: src/components/CircuitDiagram/ - Tecnologia: SVG customizado sem dependências externas - Recursos: - Definições de portas lógicas (AND, OR, XOR, NOT) - Roteamento automático de fios com setas - Labels coloridos para entradas e saídas - Suporte a modo escuro - Design responsivo - Estilização consistente com tema Docusaurus **Arquivos Modificados:** - docs/chapter-3/3.3.4.mdx: Adicionadas 3 visualizações de circuitos - MISSING_IMAGES.md: Atualizado status (21 concluídos, 4+ faltando) - src/components/CircuitDiagram/index.jsx: Componente principal - src/components/CircuitDiagram/styles.module.css: Estilos e tema **Progresso Geral:** - Total implementado: 21 diagramas - 17 Mermaid.js - 3 React Components (novos) - 2 SVG baixados do upstream - Seções completas: 9 de 11 páginas rastreadas - Build testado e funcionando Relacionado: Implementação de diagramas técnicos para simulador de circuitos digitais
1 parent 4ee5d89 commit c210f0e

4 files changed

Lines changed: 453 additions & 23 deletions

File tree

MISSING_IMAGES.md

Lines changed: 43 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,8 @@
55
This report tracks figures/diagrams in the SICP JavaScript translation. Many missing diagrams have been implemented using Mermaid.js for inline rendering.
66

77
**Status Update:**
8-
-**18 diagrams implemented** (17 Mermaid.js + 2 downloaded SVGs)
9-
-**7+ diagrams still missing**
8+
-**21 diagrams implemented** (17 Mermaid.js + 3 React Components + 2 downloaded SVGs)
9+
-**4+ diagrams still missing**
1010
- 📊 **Total figures tracked:** ~25+
1111

1212
---
@@ -48,14 +48,14 @@ This report tracks figures/diagrams in the SICP JavaScript translation. Many mis
4848

4949
---
5050

51-
### 3.3.4 Digital Circuit Simulator
51+
### 3.3.4 Digital Circuit Simulator ✅ COMPLETE
5252
**File:** `docs/chapter-3/3.3.4.mdx`
53-
**Missing Images (3):**
54-
- **Figure 3.25** - Half-adder circuit diagram
55-
- **Figure 3.26** - Full-adder circuit diagram
56-
- **Figure 3.27** - Ripple-carry adder circuit diagram
53+
**Implemented with React Components (3):**
54+
- **Figure 3.25** - Half-adder circuit diagram
55+
- **Figure 3.26** - Full-adder circuit diagram
56+
- **Figure 3.27** - Ripple-carry adder circuit diagram
5757

58-
**Context:** Digital logic circuit diagrams showing gate connections and signal flow.
58+
**Implementation:** Custom SVG-based React component (`src/components/CircuitDiagram`) with interactive logic gate visualizations. Includes AND, OR, XOR gates with proper wire routing and signal labels.
5959

6060
---
6161

@@ -137,15 +137,15 @@ This report tracks figures/diagrams in the SICP JavaScript translation. Many mis
137137
| 3.3.1 | Mutable Lists | ✅ Complete | 6 Mermaid | High |
138138
| 3.3.2 | Queues | ✅ Complete | 3 Mermaid | High |
139139
| 3.3.3 | Tables | ✅ Complete | 2 Mermaid | High |
140-
| 3.3.4 | Digital Circuits | ⏳ Missing | 3 SVG needed | High |
140+
| 3.3.4 | Digital Circuits | ✅ Complete | 3 React Components | High |
141141
| 3.3.5 | Constraints | ✅ Complete | 1 Mermaid | High |
142142
| 3.5.3 | Streams | ⏳ Missing | 1+ diagrams | Medium |
143143
| 3.5.4 | Delayed Evaluation | ⏳ Missing | 3+ diagrams | Medium |
144144
| 4.1 | Evaluator | ✅ Complete | 1 Mermaid | High |
145145
| 4.1.2 | Syntax | ✅ Complete | 1 Mermaid | Medium |
146146
| 4.1.5 | Data as Programs | ✅ Complete | 2 Mermaid | High |
147147
| 4.4.4 | Query System | ✅ Complete | 2 SVG (downloaded) | Medium |
148-
| **TOTAL** | **11 pages** | **8 complete** | **18 done, 7+ todo** | |
148+
| **TOTAL** | **11 pages** | **9 complete** | **21 done, 4+ todo** | |
149149

150150
---
151151

@@ -194,27 +194,47 @@ All markdown references have been updated to use the new paths.
194194

195195
---
196196

197-
## Mermaid.js Implementation
197+
## Implementation Summary
198198

199199
### What Was Implemented
200200

201-
Successfully implemented **17 diagrams** using Mermaid.js inline rendering:
201+
Successfully implemented **21 diagrams** using multiple techniques:
202202

203-
**Chapter 3.3 - Data Structures (12 diagrams):**
204-
- ✅ Figures 3.12-3.17: Mutable list structures with box-and-pointer notation
205-
- ✅ Figures 3.18-3.20: Queue operations showing front/rear pointer management
206-
- ✅ Figures 3.21-3.22: Table structures (1D and 2D with subtables)
207-
- ✅ Figure 3.28: Constraint network for Celsius-Fahrenheit converter
203+
**Chapter 3.3 - Data Structures (15 diagrams):**
204+
- ✅ Figures 3.12-3.17: Mutable list structures with box-and-pointer notation (Mermaid)
205+
- ✅ Figures 3.18-3.20: Queue operations showing front/rear pointer management (Mermaid)
206+
- ✅ Figures 3.21-3.22: Table structures (1D and 2D with subtables) (Mermaid)
207+
- ✅ Figures 3.25-3.27: Digital circuit diagrams - half-adder, full-adder, ripple-carry adder (React Component)
208+
- ✅ Figure 3.28: Constraint network for Celsius-Fahrenheit converter (Mermaid)
208209

209210
**Chapter 4.1 - Evaluator (5 diagrams):**
210-
- ✅ Figure 4.1: Eval-apply cycle flowchart
211-
- ✅ Abstraction barrier diagram (4.1.2): Syntax representation layers
212-
- ✅ Figure 4.2: Factorial program as abstract machine
213-
- ✅ Figure 4.3: Evaluator as universal machine emulating factorial
211+
- ✅ Figure 4.1: Eval-apply cycle flowchart (Mermaid)
212+
- ✅ Abstraction barrier diagram (4.1.2): Syntax representation layers (Mermaid)
213+
- ✅ Figure 4.2: Factorial program as abstract machine (Mermaid)
214+
- ✅ Figure 4.3: Evaluator as universal machine emulating factorial (Mermaid)
214215

215216
**Chapter 4.4 - Query System (2 diagrams - downloaded SVG):**
216-
- ✅ Figure 4.5: AND query processing with frame streams
217-
- ✅ Figure 4.6: OR query processing with frame streams
217+
- ✅ Figure 4.5: AND query processing with frame streams (SVG from upstream)
218+
- ✅ Figure 4.6: OR query processing with frame streams (SVG from upstream)
219+
220+
### Implementation Technologies
221+
222+
**Mermaid.js (17 diagrams):**
223+
- No external files - diagrams defined directly in markdown
224+
- Version controlled - changes tracked as text in git
225+
- Easy to update - community can edit without image tools
226+
- Consistent styling - unified visual appearance
227+
228+
**React Components (3 diagrams):**
229+
- Custom SVG-based interactive diagrams
230+
- `CircuitDiagram` component in `src/components/CircuitDiagram/`
231+
- Supports AND, OR, XOR, NOT logic gates
232+
- Configurable circuits: half-adder, full-adder, ripple-carry-adder
233+
- Dark mode support and responsive design
234+
235+
**Downloaded SVGs (2 diagrams):**
236+
- Source: source-academy/sicp repository
237+
- Placed in `static/img/chapter-4/`
218238

219239
### Benefits of Mermaid
220240

docs/chapter-3/3.3.4.mdx

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ title: 3.3.4 Um Simulador para Circuitos Digitais
33
---
44

55
import CodePlayground from '@site/src/components/CodePlayground';
6+
import CircuitDiagram from '@site/src/components/CircuitDiagram';
67

78
# 3.3.4 Um Simulador para Circuitos Digitais
89

@@ -72,6 +73,10 @@ function logical_and(s1, s2) {
7273

7374
**Exercício 3.30:** A Figura 3.27 mostra um *ripple-carry adder* formado encadeando *full-adders*. Este é o circuito mais simples para adicionar dois números binários. As entradas A1, A2, A3, ... An e B1, B2, B3, ... Bn são os dois números binários a serem adicionados (cada Ak e Bk é um bit 0 ou 1). A saída do circuito é a soma S1, S2, S3, ... Sn mais um carry Cn. Escreva uma função `ripple_carry_adder` que gera esse circuito. A função deve receber como argumentos três listas de n fios cada—as entradas An, Bn, e as somas Sn—bem como outro fio C. O maior atraso de propagação (em termos de atrasos de portas) do somador deve ser proporcional a n. Qual é o atraso?
7475

76+
<CircuitDiagram type="ripple-carry-adder" />
77+
78+
**Figura 3.27:** Somador com propagação de vai-um (ripple-carry adder). Este circuito adiciona dois números binários de n bits encadeando n somadores completos (FA). O carry de saída de cada estágio se torna o carry de entrada do próximo estágio. Neste exemplo, mostramos um somador de 3 bits com três estágios FA₀, FA₁ e FA₂.
79+
7580
## Representando fios
7681

7782
Um fio em nosso sistema de simulação será um objeto computacional com dois valores locais: um valor `signal` (inicialmente tomado como 0) e uma coleção de `action_functions` a serem executadas quando o sinal mudar de valor. Implementamos o fio usando passagem de mensagem de estilo local:
@@ -139,6 +144,10 @@ Para avaliar as consequências de mudar o sinal em um fio, precisamos especifica
139144

140145
**Exercício 3.31:** A função interna `accept_action_function` definida em `make_wire` especifica que, quando uma nova função de ação é adicionada a um fio, a função é imediatamente executada. Explique por que essa inicialização é necessária. Em particular, trace através do circuito meio-somador na figura 3.25 e diga como os valores de saída do sistema seriam computados se não executássemos as funções de ação de cada fio recém-adicionado.
141146

147+
<CircuitDiagram type="half-adder" />
148+
149+
**Figura 3.25:** Meio-somador (half-adder). Este circuito soma dois bits A e B, produzindo uma soma S e um vai-um (carry) C. O circuito usa portas XOR e AND para computar o resultado.
150+
142151
## A agenda
143152

144153
A única coisa que falta em nosso simulador é `after_delay`. A ideia aqui é que mantemos uma estrutura de dados, chamada *agenda*, que contém um cronograma de coisas para fazer. A agenda seguinte, a qual podemos criar, implementa a agenda como um par consistindo do tempo atual e uma fila de segmentos de tempo. Cada segmento de tempo é um par consistindo de um número (o tempo) e uma fila que contém os procedimentos que estão programados para serem executados durante esse segmento de tempo.
@@ -184,6 +193,10 @@ function half_adder(a, b, s, c) {
184193

185194
O somador completo é mostrado na Figura 3.26. A implementação é direta:
186195

196+
<CircuitDiagram type="full-adder" />
197+
198+
**Figura 3.26:** Somador completo (full-adder). Este circuito soma três bits (A, B e carry de entrada C_in), produzindo uma soma S e um carry de saída C_out. O circuito é construído usando dois meio-somadores e uma porta OR.
199+
187200
```javascript
188201
function full_adder(a, b, c_in, sum, c_out) {
189202
const s = make_wire();

0 commit comments

Comments
 (0)