Skip to content

eerii/pyyy

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

37 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

pyyy 🌿

un pequeno analizador léxico de python. restrinxe a especificación ó atopado no arquivo wilcoxon.py. utiliza autómatas formais baseados en expresións regulares para definir as regras léxicas. para ver unha versión utilizando flex ir á rama alternativa.

uso

make (debug|centinela) run (arquivo)
  • debug: activa a macro DEBUG e imprime mais diagnósticos. esto fai que o programa estea menos optimizado. xera representacións gráficas dos AFD en formato graphviz (poden verse online en https://dreampuf.github.io/GraphvizOnline)
  • centinela: activa DEBUG, e a maiores DEBUG_CENTINELA. para cada acción sobre o centinela amosa os punteiros incio e actual
  • arquivo: indica o arquivo a analizar. por defecto é wilcoxon.py

estructura do código

  • definicions: arquivo cabeceira importado por todos os demais. contén definicións de tipos, lexemas, funcións útiles
  • lexico: módulo do analizador léxico
  • entrada: abstracción do sistema de entrada, utiliza centinela
  • ts: abstracción da taboa de símbolos, utiliza hash
  • tipos: tipos de datos abstractos
    • arena: implementación dun alocador de arena. xestiona toda a memoria do programa e permite unha limpeza fácil.
    • vec: lista dinámica xenérica e polimórfica
    • str: cadea de caracteres implementada enriba de vec
    • hash: árbore hash trie xenérica sen restricción de tamaño
    • centinela: lista dobre centinela para o sistema de entrada
  • estados: xeración de autómatas en base a expresións regulares
    • afd: automata finito determinado compilado que pode executarse
    • afn: automata finito non determinado (paso intermedio)
    • regex: transforma unha expresión regular nun autómata

todo

  • estructuras de datos
    • array dinámico
    • string
    • arena de memoria
    • hash map
  • autómatas formais
    • afn epsilon
    • afn a afd
      • calculo clausuras
      • transicións
      • crear afd
      • minimizar
    • executar afd
    • regex a afn
      • clases de caracteres (numeros, letras...)
  • símbolos especiais
    • NEWLINE - liñas lóxicas
    • INDENT / DEDENT - indentación
      • scopes e scratch arenas
    • comentarios
      • comentario de encoding
    • liñas en branco
  • sistema de entrada
    • buffer dobre centinela
    • cargar outro buffer
    • devolver caracter
    • comprobación de limites
    • erro simbolo demasiado largo
  • análise léxico
    • palabras clave
    • identificadores
    • operadores
    • literals
      • números
      • strings
    • caracteres especiais
  • sistema de erros
  • macros varádicas