Skip to content

Instantly share code, notes, and snippets.

@lrlucena
Last active January 3, 2016 13:59
Show Gist options
  • Save lrlucena/8473283 to your computer and use it in GitHub Desktop.
Save lrlucena/8473283 to your computer and use it in GitHub Desktop.
Gramática da linguagem Enquanto (While)
grammar Enquanto;
programa : seqComando; // sequência de comandos
seqComando: comando (';' comando)* ;
comando: ID ':=' expressao # atribuicao
| 'skip' # skip
| 'se' bool 'entao' comando 'senao' comando # se
| 'enquanto' bool 'faca' comando # enquanto
| 'exiba' Texto # exiba
| 'escreva' expressao # escreva
| '{' seqComando '}' # bloco
;
expressao: INT # inteiro
| 'leia' # leia
| ID # id
| expressao '*' expressao # opBin
| expressao '+' expressao # opBin
| expressao '-' expressao # opBin
| '(' expressao ')' # expPar
;
bool: ('verdadeiro'|'falso') # booleano
| expressao '=' expressao # opRel
| expressao '<=' expressao # opRel
| 'nao' bool # naoLogico
| bool 'e' bool # eLogico
| '(' bool ')' # boolPar
;
INT: ('0'..'9')+ ;
ID: ('a'..'z')+;
Texto: '"' .*? '"';
Usando a linguagem 'Enquanto', crie programas para:
a) calcular a soma de dois números
b) calcular o maior de três números
c) calcular a soma de 'n' números
@lrlucena
Copy link
Author

O erro da gramática foi corrigido. O problema era que a regra inicial não pode ter 'labels'. A regra inicial anterior era 'comando' que continha labels. A correção foi realizada incluindo a regra programa como regra inicial.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment