Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- # Analisador lexico
- import ply.lex as lex
- import re as re
- import easygui
- import sys
- # Palavras reservadas
- palavrasReservadas = {
- "programa" : "PROGRAMA",
- "const" : "CONST",
- "procedure" : "PROCEDURE",
- "function" : "FUNCTION",
- "begin" : "BEGIN",
- "end" : "END",
- "escreva" : "ESCREVA",
- "leia" : "LEIA",
- "printf" : "PRINTF",
- "if" : "IF",
- "else" : "ELSE",
- "para" : "PARA",
- "for" : "FOR",
- "to" : "TO",
- "do" : "DO",
- "strcpy" : "STRCPY",
- "strcat" : "STRCAT",
- "strlen" : "STRLEN",
- "inteiro" : "INTEIRO",
- "int" : "INT",
- "integer" : "INTEGER",
- "real" : "REAL",
- "string" : "STRING",
- "char" : "CHAR",
- "e" : "E",
- "ou" : "OU",
- "or" : "OR",
- "and" : "AND",
- "nao" :"NAO",
- }
- # Lista de Tokens
- tokens = [
- "PONTO_E_VIRGULA","IGUAL","ATRIBUICAO","DOIS_PONTOS","PARENTESES_ESQ",
- "PARENTESES_DIR","CHAVETA_ESQ","CHAVETA_DIREITA","COLCHETES_ESQ",
- "COLCHETES_DIR","ASPAS","VIRGULA","SOMA","SUBTRACAO","MULTIPLICACAO",
- "DIVISAO","IGUAL_A","DIFERENTE_DE","MAIOR_QUE","MENOR_QUE","MAIOR_OU_IGUAL_QUE",
- "MENOR_OU_IGUAL_QUE","DUAS_BARRAS_OU","INCREMENTO","DECREMENTO","FORMATACAO_INT",
- "FORMATACAO_CARACTER","FORMATACAO_REAL","FORMATACAO_INTEIRO","FORMATACAO_STRING",
- "ID","NUMEROS","IGNORA"
- ]+list(palavrasReservadas.values())
- # Formando os tokens
- t_PONTO_E_VIRGULA = r";"
- t_IGUAL = r"="
- t_ATRIBUICAO = r":="
- t_DOIS_PONTOS = r":"
- t_PARENTESES_ESQ = r"\("
- t_PARENTESES_DIR = r"\)"
- t_CHAVETA_ESQ = r"\{"
- t_CHAVETA_DIREITA = r"\}"
- t_COLCHETES_ESQ = r"\["
- t_COLCHETES_DIR = r"\]"
- t_ASPAS = r'\"\"'
- t_VIRGULA = r","
- t_SOMA = r"\+"
- t_SUBTRACAO = r"\-"
- t_MULTIPLICACAO = r"\*"
- t_DIVISAO = r"/"
- t_IGUAL_A = r"=="
- t_DIFERENTE_DE = r"!="
- t_MAIOR_QUE = r">"
- t_MENOR_QUE = r"<"
- t_MAIOR_OU_IGUAL_QUE = r">="
- t_MENOR_OU_IGUAL_QUE = r"<="
- t_IGNORA = r" \t\r\n"
- t_DUAS_BARRAS_OU = r"\|\|"
- t_INCREMENTO = r"\+\+"
- t_DECREMENTO = r"\-\-"
- t_FORMATACAO_INT = r"\%\'i'"
- t_FORMATACAO_CARACTER = r"\%\'c'"
- t_FORMATACAO_INTEIRO = r"\%\'d'"
- t_FORMATACAO_REAL = r"\%\r"
- t_FORMATACAO_STRING = r"\%\'s'"
- t_REAL = r"\d+\.\d+"
- t_INT = r"\d+"
- t_INTEIRO = r"\d+"
- t_INTEGER = r"\d+"
- t_STRING = r"\s+"
- t_CHAR = r"/^[A-Za-z]+$/"
- # Funções para o analisador Lexico
- def t_error(t) :
- # Caso encontrar um erro , pula o erro
- t.lexer.skip(1)
- # Formar identificadores
- def t_ID(t) :
- r"_|([a-zA-ZáàÀÁâÂéèÈÉêÊíìÍÌóÓõÕôÕúÚçÇ])\w*_*\w*"
- t.type = palavrasReservadas.get(t.value,'ID')
- return t
- # Para comentários
- def t_COMMENT(t) :
- r'{[^}]*}'
- # Função responsável por iniciar a análise lexica
- def analisar(entrada) :
- lexer = lex.lex()
- lexer.input(entrada)
- resultadoLexico = open("saidaLexica","w+")
- while True :
- tok = lexer.token()
- if (not tok) :
- break;
- resultadoLexico.write("["+tok.type+","+tok.value+"]\n")
- resultadoLexico.close()
- print("Análise lexica feita com sucesso!")
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement