Skip to content

Instantly share code, notes, and snippets.

@hensou
Last active April 20, 2017 04:52
Show Gist options
  • Save hensou/bd9dec6fcca51174864b4d1311652700 to your computer and use it in GitHub Desktop.
Save hensou/bd9dec6fcca51174864b4d1311652700 to your computer and use it in GitHub Desktop.
BNF TPP
# Programa
<programa> ::= <declaracoes_definicoes>
# Declaracoes
<declaracoes_definicoes> ::= <declaracao_definicao> | <declaracao_definicao> <declaracoes_definicoes>
<declaracao_definicao> ::= <declaracao> | <definicao>
<definicao> ::= <definicao_funcao>
<declaracao> ::= <declaracao_variavel>
| <declaracao_condicional>
| <declaracao_expressao>
<declaracao_variavel> ::= <tipo> : <declaracao_id>
<declaracao_id> ::= <id_variavel> | <id_variavel> , <declaracao_id>
<id_variavel> ::= <id> | <id_variavel> [ <expressao> ]
<definicao_funcao> ::= <tipo> <id> ( <parametros> ) <bloco> fim #2
<parametros> ::= <parametro> | <parametro> , <parametros> | VAZIO
<parametro> ::= <tipo> : <id_variavel> #1
<declaracao_condicional> ::= <declaracao_se_entao>
| <declaracao_repita_ate>
<declaracao_se_entao> ::= se <expressao> então <bloco> fim
| se <expressao> então <bloco> senão <bloco> fim #3
<declaracao_repita_ate> ::= repita <bloco> até <expressao>
<declaracao_expressao> ::= <expressao>
### Oberservacoes ###
#1: Dessa forma, na passagem de parametros com vetor, sempre devemos passar o
# tamanho do vetor, e se tornar o tamanho opcional entao talvez nao tenha como,
# em tempo de compilacao saber o tamanho do vetor
#2: Como funcionaria para funcoes sem tipo? E melhor criar uma regra sem o tipo
# ou criamos a possibilidade de ir para vazio, partindo de <tipo>? Talvez isso
# nao seja muito bom pois assim aceitariamos variaveis sem tipo
#3: Existe uma maneira melhor pra tratar o if - else?
#4: Não existe o operador de diferente (!=) na linguagem?
# Outros
# Tipos
<tipo> ::= inteiro | flutuante
# Identificadores
<id> ::= letra | letra numero
# Numeros
# Expressoes
<expressao> ::= <expressao_atribuicao> | <expressao> <expressao_atribuicao>
<expressao_atribuicao> ::= <expressao_igualdade> | <expressao_unaria> := <expressao_atribuicao>
<expressao_igualdade> ::= <expressao_relacional>
| <expressao_igualdade> = <expressao_relacional>
| <expressao_igualdade> != <expressao_relacional> #4
<expressao_relacional> ::= <expressao_aditiva>
| <expressao_relacional> > <expressao_aditiva>
| <expressao_relacional> < <expressao_aditiva>
| <expressao_relacional> >= <expressao_aditiva>
| <expressao_relacional> <= <expressao_aditiva>
<expressao_aditiva> ::= <expressao_multiplicativa>
| <expressao_aditiva> + <expressao_multiplicativa>
| <expressao_aditiva> - <expressao_multiplicativa>
<expressao_multiplicativa> ::= <expressao_unaria>
| <expressao_multiplicativa> * <expressao_unaria>
| <expressao_multiplicativa> / <expressao_unaria>
<expressao_unaria> ::= <expressao_primaria>
<expressao_primaria> ::= <id_variavel> | <numero> | ( <expressao> )
# Blocos e comandos
<bloco> ::= <declaracao> | <declaracao> <bloco>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment