← 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