Ir para o conteúdo

Gramática Formal (CFG) do Subconjunto de C++

Este documento descreve a gramática livre de contexto (CFG) correspondente ao subconjunto da linguagem C++ definido no Escopo da Linguagem. Ela servirá como base para o desenvolvimento do analisador sintático utilizando Bison.


Símbolo inicial

Program → DeclOrStmtList
DeclOrStmtList → (DeclOrStmt)*
DeclOrStmt     → Decl ';' | Stmt

Declarações

Tipos suportados:

Type → 'int' | 'float' | 'bool' | 'string'

Declarações:

Decl → Type IDENTIFIER ( '=' Expr )?

Exemplos válidos:

int x;
float y = 3.14;
bool ativo = true;
string nome;

Comandos

Blocos e lista de comandos:

Block   → '{' StmtList? '}'
StmtList→ (Stmt)+

Comandos possíveis:

Stmt → Assign ';'
     | If
     | While
     | For
     | Expr ';'

Atribuições:

Assign → IDENTIFIER '=' Expr

Exemplos válidos:

x = 10;
y = x + 2.5;
ativo = (x > y);
nome = "teste";

If/Else:

If → 'if' '(' Expr ')' Stmt ('else' Stmt)?

Exemplo válido:

if (x > 0) {
    y = y + 1;
} else {
    y = 0;
}

While:

While → 'while' '(' Expr ')' Stmt

Exemplo válido:

while (y < 10) {
    y = y + 1;
}

For:

For     → 'for' '(' ForInit? ';' ForCond? ';' ForStep? ')' Stmt
ForInit → Decl | Assign
ForCond → Expr
ForStep → Assign

Exemplo válido:

for (int i = 0; i < 10; i = i + 1) {
    soma = soma + i;
}


Precedência de Operadores

  1. () — Parênteses
  2. !, - — Unários
  3. *, / — Multiplicativos
  4. +, - — Aditivos
  5. <, <=, >, >= — Relacionais
  6. ==, != — Igualdade
  7. && — Lógico AND
  8. || — Lógico OR

Léxico (terminais)

  • Identificadores: IDENTIFIER
  • Literais:
  • INT_LIT → números inteiros (ex.: 10, 42)
  • FLOAT_LIT → números de ponto flutuante (ex.: 3.14, 0.5)
  • STRING_LIT → cadeias de caracteres entre aspas (ex.: "abc")
  • BOOL_LITtrue | false
  • Palavras-chave: int, float, bool, string, if, else, while, for
  • Símbolos/operadores: = + - * / == != < > <= >= && || ! ( ) { } ; ,

Histórico de Versões

Versão Data Autor(es) Descrição
1.0 14/09/2025 Antônio Júnior, Heyttor Augusto, João Pedro Sampaio, Lucas Heler, Maciel Júnior Primeira versão da gramática formal