- Clone o repositório (ou baixe os arquivos):
git clone https://github.com/rafaelpaniago1/SML-subset-Python-Interpreter.git
cd SML-subset-Python-Interpreter- Execute o script de configuração:
python3 setup.py# Crie um arquivo .sml
echo "2 + 3 * 4" > meu_programa.sml
# Execute o arquivo
python3 sml.py meu_programa.sml# Execute código diretamente
echo "(fn x => x * x) 5" | python3 sml.py
# Ou digite código interativamente
python3 sml.py
# (digite seu código e pressione Ctrl+D)python3 sml.py -iNo modo interativo você pode:
- Digitar código linha por linha
- Ver resultados instantaneamente
- Usar comandos especiais como
:tokense:ast - Digite
helppara ver todos os comandos - Digite
quitpara sair
# Execute um exemplo específico
python3 sml.py examples/basic.sml
python3 sml.py examples/functions.sml
python3 sml.py examples/complex.sml
# Execute todos os exemplos de uma vez
python3 run_examples.py# Ver tokens e AST
python3 sml.py -v meu_programa.sml
# Ver apenas tokens
python3 sml.py --tokens-only meu_programa.sml
# Ver apenas AST
python3 sml.py --ast-only meu_programa.sml42 # => 42
2 + 3 * 4 # => 14
~5 # => -5
true # => True
not false # => True
5 < 10 # => Truefn x => x + 1 # => Fn(x)
(fn x => x * x) 5 # => 25
(fn x => fn y => x + y) 3 2 # => 5fun factorial n =>
if n <= 1 then 1
else n * factorial (n - 1)
factorial 5 # => 120
fun fibonacci n =>
if n <= 1 then n
else fibonacci (n - 1) + fibonacci (n - 2)
fibonacci 8 # => 21
fun power base exp =>
if exp = 0 then 1
else base * power base (exp - 1)
power 3 4 # => 81let x <- 10 in x + 5 end # => 15
let f <- fn x => x * x in f 4 end # => 16if 2 < 3 then 100 else 200 # => 100
if true then (fn x => x) else (fn y => y + 1) # => Fn(x)let
sqr <- fn x => x * x
in
let
twice <- fn f => fn x => f (f x)
in
(twice sqr) 3
end
end # => 81
fun sum_range start finish =>
if start > finish then 0
else start + sum_range (start + 1) finish
sum_range 1 10 # => 55
# Combinando let e fun
let
factorial <- fun fact n =>
if n <= 1 then 1
else n * fact (n - 1)
in
factorial 6
end # => 720SML-subset-Python-Interpreter/
├── sml.py # 🔥 SCRIPT PRINCIPAL - Use este!
├── setup.py # Script de configuração
├── run_examples.py # Executa todos os exemplos
├── requirements.txt # Dependências (só Python padrão)
├── README.md # Documentação completa
├── examples/ # Exemplos de código SML
│ ├── basic.sml # Operações básicas
│ ├── functions.sml # Funções anônimas
│ ├── recursive.sml # 🔥 Funções recursivas simples
│ ├── advanced_recursive.sml # 🔥 Funções recursivas avançadas
│ ├── conditionals.sml # Condicionais
│ ├── let_expressions.sml # Let expressions
│ └── complex.sml # Exemplos avançados
├── USAGE.md # Este guia
└── driver.py # Script original (para testes acadêmicos)
| Comando | Descrição |
|---|---|
python3 sml.py -i |
Modo interativo (melhor para começar) |
python3 sml.py arquivo.sml |
Executar arquivo |
echo "código" | python3 sml.py |
Executar código direto |
python3 sml.py -h |
Ajuda completa |
python3 setup.py |
Configurar/testar instalação |
python3 run_examples.py |
Executar todos os exemplos |
- Para iniciantes: Comece com
python3 sml.py -i(modo interativo) - Para debug: Use
python3 sml.py -v arquivo.sml(modo verboso) - Para aprender: Execute
python3 run_examples.pypara ver vários exemplos - Para desenvolver: Crie arquivos
.smle execute compython3 sml.py arquivo.sml - 🔥 Para funções recursivas: Use
fun nome parâmetro => corpoem vez defn - Para checagem de tipos: O sistema detecta automaticamente erros de tipo
- Para funções complexas: Combine
let,fune closures para algoritmos avançados
- "comando não encontrado": Use
python3em vez depython - "arquivo não encontrado": Verifique se está na pasta correta
- "parse error": Verifique a sintaxe do código SML
- "def error": Variável não definida
- Para mais ajuda: Execute
python3 setup.pypara verificar a instalação
🎯 Dica: Comece experimentando no modo interativo (python3 sml.py -i) - é mais fácil para aprender!