Lemon Code (LC-lang) é uma linguagem experimental escrita inteiramente em Lua. O repositório e deliberadamente modular: compilador, AST, análise semântica, runtime, Lemon Studio, backends, formatter, LSP e testes ficam em módulos independentes.
O projeto possui mais de 100 arquivos Lua, para que cada responsabilidade possa crescer sem concentrar toda a linguagem em um unico arquivo.
O único requisito e Lua 5.1+ ou LuaJIT. No Windows, use o luajit disponível no ambiente.
# Mostrar a arvore sintática
luajit src/lc.lua parse examples/basics.lc
# Validar um arquivo
luajit src/lc.lua check examples/lemon_studio_app.lc
# Executar um script ou gerar o manifesto de um app Lemon Studio
luajit src/lc.lua run examples/lemon_studio_app.lc
# Validar uma especificação de pacote Lemon
luajit src/lc.lua lspec nome_do_pacote-1.0.lspec
# Executar a suíte de testes
luajit tests/run.lua@import <LemonStudioFramework>
@import <Color::Hex>
pub fn app<LSApp>(
name = @[LSString]"Meu aplicativo"
version = @[[LSDouble || LSTriple] -> format = f"v{LSDouble || LSTriple}"]v1.0
identifier = @[[LSString] -> path = String::isPath(True)]"com.lemon.meuapp"
) -> Result(LSPlatform::Mobile("Android")) {
pub fn widget<LSWidget>(let el) {
LSWidget(|el| -> {
let text = @new text(
text = "Hello World"
header = "p"
color = Hex::new("#007DFF")
)
})
}
}
O comando run reconhece esse formato e devolve um manifesto JSON com metadados do app, plataforma e arvore de widgets. Uma integração real com Android e o próximo passo natural: ela pode consumir esse manifesto como IR (representação intermediaria).
| Tipo | Uso |
|---|---|
LSInt |
inteiro |
LSFloat |
ponto flutuante simples |
LSDouble |
ponto flutuante de dupla precisao / versao v1.0 |
LSTriple |
versao com tres partes, como v1.0.0 |
LSString |
texto |
LSBoolean |
True ou False |
Veja a gramática, a especificação .lspec, o mapa de módulos e os arquivos em examples.
A extensão pronta para o Visual Studio Marketplace está em extensions/vscode-lc-lang. Ela adiciona suporte a .lc e .lspec, realce de sintaxe, configuração de linguagem e snippets. Consulte as instruções de empacotamento e publicação no README da extensão.
O plugin nativo do Neovim está em extensions/nvim-lc-lang. Ele detecta .lc e .lspec, fornece sintaxe, indentação, comentários, comandos e integração opcional com o LSP. Veja as instruções para lazy.nvim e packer.nvim no README do plugin.