Este projeto, antlr4-alteryx-functions, utiliza o ANTLR4 para processar expressões condicionais e funções de conversão do Alteryx Designer e transpilar essas expressões para código Python. Ele fornece uma solução automática e extensível para migrar lógicas de negócio do Alteryx para Python.
-
Reconhecimento de Expressões Condicionais:
IF ... THEN ... ELSE ... ENDIF
IIF(condition, true_result, false_result)
SWITCH(expression, case1, result1, ..., default_result)
-
Suporte a Funções de Conversão:
TOBOOLEAN(expression)
TODATE(expression)
TONUMBER(expression)
TOSTRING(expression)
-
Transpilação Automática: As expressões do Alteryx são convertidas para código Python equivalente.
- Gramatica ANTLR: Definição da sintaxe para reconhecer expressões do Alteryx em um arquivo
.g4
. - Parser e Lexer: Gerados pelo ANTLR com base na gramática.
- Transpiler: Um visitante em Python que converte as expressões para Python.
- Exemplos: Testes e exemplos práticos de uso do sistema.
- Python: Versão 3.12 ou superior.
- ANTLR4: Ferramenta para gerar o parser e o lexer.
As dependências necessárias estão listadas no arquivo pyproject.toml
.
Abaixo estão listadas as funções condicionais e de conversão do Alteryx que estão sendo convertidas para Python.
Legenda do Status de Conversão:
- Pronto: Converte com sucesso e está documentado.
- Em Progresso: Está sendo implementado.
Função | Descrição | Referência | Status |
---|---|---|---|
Case |
Avalia uma série de condições e retorna o valor correspondente ao primeiro caso verdadeiro. | Case | Pronto |
IIF |
Retorna um valor se a condição for verdadeira e outro valor se for falsa (função "se"). | IIF | Pronto |
IF THEN ELSE |
Avalia uma condição e executa diferentes ações com base no resultado verdadeiro ou falso. | IF THEN ELSE | Pronto |
IF |
Avalia uma condição e retorna um valor com base no resultado verdadeiro ou falso. | IF | Pronto |
Switch |
Avalia uma expressão contra vários casos e retorna o valor correspondente ao caso encontrado. | Switch | Pronto |
Função | Descrição | Referência | Status |
---|---|---|---|
BinToInt |
Converte um número binário para inteiro. | BinToInt | Em Progresso |
Bool |
Converte um valor em um tipo booleano. | Bool | Pronto |
Byte |
Converte um valor em um tipo byte. | Byte | Em Progresso |
CharToInt |
Converte um caractere para o valor inteiro correspondente. | CharToInt | Pronto |
Date |
Converte um valor em um tipo de data. | Date | Em Progresso |
DateTime |
Converte um valor em um tipo de data e hora. | DateTime | Em Progresso |
FixedDecimal |
Converte um número em um tipo decimal fixo com a precisão especificada. | FixedDecimal | Em Progresso |
Float |
Converte um valor em um número de ponto flutuante. | Float | Em Progresso |
Int16 |
Converte um valor para um inteiro de 16 bits. | Int16 | Em Progresso |
Int32 |
Converte um valor para um inteiro de 32 bits. | Int32 | Em Progresso |
Int64 |
Converte um valor para um inteiro de 64 bits. | Int64 | Em Progresso |
String |
Converte um valor em uma string. | String | Pronto |
ToLowerCase |
Converte uma string para letras minúsculas. | ToLowerCase | Em Progresso |
ToUpperCase |
Converte uma string para letras maiúsculas. | ToUpperCase | Em Progresso |
WString |
Converte um valor em uma string Unicode. | WString | Em Progresso |
-
Clone o repositório:
git clone https://github.com/seu-usuario/antlr4-alteryx-functions.git cd antlr4-alteryx-functions
-
Instale as dependências:
pip install -r requirements.txt
-
Instale o ANTLR4 (caso não tenha):
brew install antlr # Para macOS sudo apt install antlr4 # Para Linux (distribuições suportadas)
-
Gere os arquivos do parser e lexer:
antlr4 -Dlanguage=Python3 AlteryxConditional.g4
-
Escreva uma expressão em Alteryx:
IF "age" > 30 THEN "old" ELSE "young" ENDIF
-
Rode o transpiler para converter para Python:
from transpiler import transpile_alteryx_to_python alteryx_expression = 'IF "age" > 30 THEN "old" ELSE "young" ENDIF' python_code = transpile_alteryx_to_python(alteryx_expression) print(python_code) # Resultado: ("old" if "age" > 30 else "young")
Execute testes automatizados para validar as funcionalidades:
pytest
TONUMBER("42")
float("42")
IF TOBOOLEAN("1") THEN TOSTRING(100) ELSE "False" ENDIF
("str(100)" if bool("1") else "False")
Este projeto está licenciado sob a licença MIT. Consulte o arquivo LICENSE
para mais detalhes.