← Voltar ao demo CAA
Diagramas — lógica e interface
Fluxos em conjugai-core (assets/js/conjugai-core.js) e UI em assets/js/app.js. Renderização com
Mermaid.
READMEs em modo visual:
raiz
·
conjugai-core.
1. Pipeline analisarFrase
Após tokenize, pode aplicar-se segmentação por coordenação (oracao-composta.ts; conectores típicos «e», «ou», «mas», «porém», «então»). Com mais de uma oração, o fluxo repete-se por oração e junta-se as correções.
flowchart TD
A[Texto bruto] --> B[tokenize]
B --> C{Tokens vazios?}
C -->|sim| ERR[Erro: Digite ou selecione uma frase]
C -->|não| S0[segmentar orações coordenadas]
S0 --> D[detectarSujeito]
D --> E[detectarTempo]
E --> F[extrairVerbo]
F --> G{Lema verbal?}
G -->|não| ERR2[Erro: verbo não identificado]
G -->|sim| H[conjugarTempo]
H --> I{Forma no tempo?}
I -->|não| ERR3[Erro: não foi possível conjugar neste tempo]
I -->|sim| J[corrigir + normalizar SVO]
J --> K[Frase corrigida]
1.1. Extração de lema (extrairVerbo)
Ordem em conjugador.ts: (1) ir + infinitivo no início; (2)
detectarLocucaoVerbalHeadLemma; (3) último que que não seja ter que → primeiro infinitivo
à direita; (4) primeiro infinitivo -ar/-er/-ir/-pôr; (5) detectarVerboPorDicionario.
flowchart TD
X["extrairVerbo(tokens)"] --> C{"1.º token é vou/vais/vai/vamos/vão
e há infinitivo à frente?"}
C -->|sim| D["retorna 'ir'"]
C -->|não| L{"detectarLocucaoVerbalHeadLemma?"}
L -->|sim| LEM["retorna lema da locução"]
L -->|não| Q{"último que não ter que + inf. depois?"}
Q -->|sim| QI["retorna esse infinitivo"]
Q -->|não| A{"há 1.º token infinitivo -ar/-er/-ir/-pôr?"}
A -->|sim| B["retorna esse infinitivo"]
A -->|não| E["detectarVerboPorDicionario
(ignora pronomes/partículas)"]
E --> F{lema?}
F -->|sim| G["retorna infinitivo"]
F -->|não| H["null"]
2a. Sujeito
Ordem em sujeito.ts: detectarSujeitoComposto (padrão X e Y ou X ou Y antes do verbo);
se não aplicar, detectarSujeitoSimples (inclui Eu + mamãe/papai e ordem de pronomes).
flowchart TD
SC{Prefixo X e Y ou X ou Y antes do verbo?} -->|sim| SC1[Nós / Vocês / Eles conforme regras]
SC -->|não| S0[Eu + mamãe ou papai?]
S0 -->|sim| SN[Nós — 1ª plural]
S0 -->|não| S1[Ordem: nós, eles, ela, ele, eu, padrão eu]
2b. Tempo verbal
Implementação em tempo.ts: marcadores + possibilidade de tempo explícito por
tempo:<chave> ou [tempo=<chave>].
flowchart TD
OVR{Tag de tempo explícito na frase?} -->|sim| TEXP[Usa tempo explícito]
OVR -->|não| J1{Tem ontem + já?}
J1 -->|sim| PPC[Pretérito perfeito composto]
J1 -->|não| J2{Tem amanhã + já?}
J2 -->|sim| FC[Futuro composto]
J2 -->|não| S1{Tem se/quando/talvez/que?}
S1 -->|sim| SUB[Subjuntivo conforme marcador]
S1 -->|não| T0{Tem amanhã?}
T0 -->|sim| P1{1.º token vou/vai/vamos…?}
P1 -->|sim| TN0[Presente]
P1 -->|não| TF[Futuro do Presente]
T0 -->|não| T1{Tem ontem?}
T1 -->|sim| TP[Pretérito Perfeito]
T1 -->|não| TN[Presente do indicativo]
O que de ter que / ter de + infinitivo não segue o ramo de subjuntivo por «que» isolado — ver tempo.ts.
3. Arquitetura da aplicação
flowchart TB
subgraph UI[Interface — demo/caa/index.html + assets/css/styles.css]
ASIDE[Lista de exemplos]
IN[Painel de entrada]
STEPS[Painel: 4 passos]
OUT[Painel de saída]
end
subgraph CORE[conjugai-core.js]
AF[analisarFrase]
end
subgraph APP[app.js]
AN[analyze]
ANIM[runStepAnimation]
end
ASIDE --> IN
IN --> AN
AN --> AF
AN --> ANIM
ANIM --> STEPS
ANIM --> OUT
4. Sequência — demo ao vivo
sequenceDiagram
participant U as Utilizador
participant UI as Interface
participant C as ConjugaiCore.analisarFrase
U->>UI: clica Analisar
UI->>C: texto bruto
C-->>UI: ResultadoAnalise
Note over UI: animação dos 4 passos
UI->>U: frase corrigida