Skip to content

Commit

Permalink
Adicionar operadores lógicos.
Browse files Browse the repository at this point in the history
  • Loading branch information
AlanNunes committed Jun 17, 2021
1 parent c377823 commit 1c0b1b7
Show file tree
Hide file tree
Showing 6 changed files with 27 additions and 11 deletions.
3 changes: 3 additions & 0 deletions componentes_lexer/op_logico.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
e = "e"
ou = "ou"
nao = "não"
9 changes: 8 additions & 1 deletion gerador_codigo_python.py
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@
from componentes_parser.senaose import SenaoSe
import componentes_lexer.op_aritmetico as op_arit
import componentes_lexer.op_relational as op_rel
import componentes_lexer.op_logico as op_logico
from gerador_codigo import GeradorDeCodigo
from token_ import Token
from componentes_parser.declaracao_variavel import DeclaracaoVariavel
Expand Down Expand Up @@ -288,4 +289,10 @@ def gera_operador(self, token:Token):
elif token.retornaTipo() == op_rel.menor_igual:
return "<="
elif token.retornaTipo() == op_rel.igualdade:
return "=="
return "=="
elif token.retornaTipo() == op_logico.e:
return "and"
elif token.retornaTipo() == op_logico.ou:
return "or"
elif token.retornaTipo() == op_logico.nao:
return "not"
7 changes: 7 additions & 0 deletions lexer.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
import componentes_lexer.palavras_chaves as palavras_chaves
import componentes_lexer.op_relational as op_rel
import componentes_lexer.op_aritmetico as op_arit
import componentes_lexer.op_logico as op_logico
from componentes_lexer.posicao import Posicao
from token_ import Token

Expand Down Expand Up @@ -110,6 +111,12 @@ def __retornaIdentificador(self) -> Token:
return Token(tipo=valores.verdadeiro, pos=pos, val=valores.verdadeiro)
else:
return Token(tipo=valores.falso, pos=pos, val=valores.falso)
if valor == op_logico.e:
return Token(tipo=op_logico.e, pos=pos, val=op_logico.e)
elif valor == op_logico.ou:
return Token(tipo=op_logico.ou, pos=pos, val=op_logico.ou)
elif valor == op_logico.nao:
return Token(tipo=op_logico.nao, pos=pos, val=op_logico.nao)
return Token(tipos_tokens.identificador, pos, valor)

# Retorna um token de valor de texto
Expand Down
1 change: 1 addition & 0 deletions main.py
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@
print('# Autor: Alan Nunes (https://github.com/AlanNunes)')
print('============================================================')
try:
sys.argv.append("teste.lpb")
if len(sys.argv) <= 1:
print('Você precisa passar o nome do arquivo como argumento.')
else:
Expand Down
3 changes: 2 additions & 1 deletion parser_.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
from componentes_parser.boleano import Boleano
import componentes_lexer.funcoes_internas as funcoes_internas
import componentes_lexer.op_logico as op_logico
from componentes_parser.escreva import Escreva
from componentes_parser.chamada_funcao import ChamadaFuncao
from componentes_parser.erros.identificador_nao_encontrado import ErroIdentificadorNaoEncontrado
Expand Down Expand Up @@ -116,7 +117,7 @@ def __parseTermo(self):
def __parseExpr(self):
fat_esq = self.__parseTermo()
tkn_atual = self.__retornaTokenAtual()
while tkn_atual.retornaTipo() in [op_arit.sub, op_arit.soma, op_rel.igualdade]:
while tkn_atual.retornaTipo() in [op_arit.sub, op_arit.soma, op_rel.igualdade, op_logico.e, op_logico.ou]:
tkn_op = self.__retornaTokenAtual()
self.__avancaToken()
fat_dir = self.__parseTermo()
Expand Down
15 changes: 6 additions & 9 deletions teste.lpb
Original file line number Diff line number Diff line change
@@ -1,9 +1,6 @@
func inteiro fib(inteiro n) então
se n <= 1 então
retorne n
senão
retorne fib(n-1) + fib(n-2)
fimse
fimfunc

escreva(fib(7))
inteiro idade = ConverteParaInteiro(leia("Digite sua idade"))
se idade >= 18 e idade <= 30 então
escreva("Você é um jovem ")
senão
escreva("Você tá ficando velho")
fimse

0 comments on commit 1c0b1b7

Please sign in to comment.