Skip to content

Referência da linguagem Eidolang

Eidolang é a representação textual de uma figura do Eidograph. Uma figura é um único script: comandos criam objetos, expressões estabelecem dependências, e estilo e animação ficam no mesmo texto. Arrastos, ferramentas da tela e mudanças de propriedade acabam sempre sendo gravados de volta nesse script.

Esta página descreve apenas a linguagem atual, Eidolang 0.2; ela não contém nenhuma sintaxe retirada. Para scripts completos e executáveis, visite os projetos de exemplo.

Esqueleto do script

Todo script deve começar com uma declaração de espaço:

txt
space plane
version 0.2

# Um comando por linha; # inicia um comentário
point A -2 0
point B 2 0
segment base A B
point M = midpoint(A, B)
  • space plane seleciona o dialeto 2D; space solid seleciona o dialeto 3D.
  • version 0.2 é opcional. É a versão da linguagem, não a versão do manifesto do .eido.
  • Os nomes diferenciam maiúsculas de minúsculas e precisam ser definidos antes de serem usados.
  • Literais de ângulo simples são radianos; escreva valores em graus explicitamente, como 45deg.
  • Strings usam aspas duplas. Cores podem usar formas como #3366cc.

Modelo de liberdade

Todo objeto geométrico pertence a exatamente um nível:

NívelDefiniçãoComportamento
LivreCoordenadas ou valores são literaisArraste diretamente ou edite no painel de propriedades
VinculadoUsa on … at … ou coordenadas locais contra um portadorMove-se apenas sobre seu portador
DerivadoUsa uma expressão = baseada em outros objetosNão pode ser arrastado; atualiza quando as entradas mudam
txt
point A 0 0                    # livre
point P on c at 0.25           # vinculado
point M = midpoint(A, P)        # derivado

Valores e expressões compartilhados

Expressões escalares suportam + - * / ^, parênteses, comparações e operações booleanas. As constantes incluem pi, tau e e; funções comuns incluem sin, cos, tan, sqrt, abs, min, max e funções de distância/vetor.

Propriedades de objetos podem alimentar expressões posteriores, como base.length, c.radius e poly.area. let armazena qualquer valor de expressão, enquanto fn define uma função para gráficos ou superfícies:

txt
let half = base.length / 2
fn wave(x) = sin(x) * half
plot graph wave domain -6 6

Valores inválidos não derrubam o aplicativo. Os diagnósticos relatam a localização de origem e o motivo, enquanto os objetos posteriores ficam inválidos ou recebem registros de aviso.

Comandos do plano (2D)

Construir objetos básicos

ComponenteFormas comuns
Pontopoint A x y, point P on path at t, point M = expr
Linearsegment s A B, line l A B, ray r A B, vector v A B
Círculocircle c O radius r, circle c O through A
Elipse e arcoellipse e F1 F2 through P, arc a P1 P2 P3
Polígonopolygon tri A B C
Construções padrãomidpoint M A B, parallel p A l, perpendicular p A l
Interseçõesintersections xs pathA pathB

Resultados de interseção são list<point>. Prefira seletores estáveis como xs.nearest(A), xs.maxY ou xs.minX; a ordem por trás de xs[0] pode mudar durante o movimento.

Caminhos, funções e regiões

txt
plot graph sin domain -6 6
curve loop (cos(t), sin(t)) t from 0 to tau samples 160
polar rose (2*cos(3*a)) a from 0 to tau
equation unit x^2 + y^2 = 1
locus trace P driver u samples 180

region disk = c
region lens = intersection(c1, c2)

Segmentos, retas, semirretas, círculos, elipses, arcos, gráficos de função e lugares geométricos implementam o comportamento de Path. Eles podem carregar pontos vinculados, se interseccionar entre si e ser compostos com subpath e pathjoin.

Transformações e referenciais

txt
point Q = reflect(P, axis)
rotate tri2 tri around O by 30deg
translate c2 c by (2, -1)
scale big tri around O by 2

frame f O X
point L in f 1 0.5

reflect, rotate, translate e scale estão disponíveis tanto como funções de expressão quanto como comandos. Transformações de similaridade preservam os tipos de objeto sempre que possível.

Comandos do sólido (3D)

txt
space solid
point3 O 0 0 0
point3 T 0 0 3
sphere ball O radius 2
cylinder body O T radius 1
ComponenteFormas comuns
Pontos e retaspoint3, segment3, line3, ray3, vector3
Planos e esferasplane ground A B C, sphere s O radius r
Sólidosbox, prism, pyramid, cylinder, cone
Referenciaisframe3 f O X Y, point3 P in f x y z
Curvas espaciaiscurve3, locus3
Superfícies de funçãosurface waves f domain x0 x1 y0 y1
Interseçõesintersections3, plane_intersect_line, sphere_intersect_sphere
Transformaçõesreflect3, rotate3, translate3, scale3

Em 3D, um ponto pode se vincular a um segmento, reta, semirreta ou superfície de esfera. Um ponto de esfera usa dois parâmetros:

txt
point3 P on ball atAngles 45deg 90deg

box, prism, pyramid, cylinder e cone expõem medidas como .volume, .surfaceArea e .centroid. curve3 e locus3 são objetos de exibição amostrados e atualmente não são portadores para pontos vinculados.

Parâmetros, animação e etapas

txt
param r 1 range 0.5 4 step 0.1
circle c O radius r
animate r duration 2s mode pingpong

stage result duration 1.2s reveal draw
show c transition draw duration 0.8s
  • param cria um slider no painel Parâmetros.
  • animate suporta loop, pingpong e once.
  • stage cria etapas de apresentação sequenciais; show, hide, clear e os modos de revelação controlam a presença.
  • A reprodução 2D, a reprodução 3D e a exportação de GIF/MP4 compartilham a mesma linha do tempo.

Comandos de apresentação

txt
style base stroke #3366cc width 2 opacity 0.9
label base text "given segment"
textbox note -4 3 width 5 height 2 text "Drag A or B"
group helpers A B base
hide helpers transition fade duration 0.5s

style controla cor, preenchimento, largura, opacidade e tamanhos de ponto/seta; o 2D também suporta padrões de traço. Texto de rótulo totalmente entre $$…$$ é renderizado como LaTeX. textbox é exclusivo do 2D.

Macros e asserções

txt
def bisect(A, B) -> (M, b) {
midpoint M A B
perpendicular_bisector b A B
}

use bisect P Q -> M1 b1
assert dist(P, M1) == dist(M1, Q) tolerance 1e-6 note "M1 is midpoint"

def/use reaproveitam uma construção e isolam seus nomes internos durante a expansão. assert verifica uma relação e produz um aviso; não restringe nem resolve a figura.

Consultar assinaturas exatas no aplicativo

Esta página organiza os comandos mais usados por finalidade. Para assinaturas exatas e completas da versão instalada:

  • use ajuda no editor Eidolang;
  • peça ao Agente integrado para chamar list_commands;
  • chame a mesma ferramenta a partir de um cliente MCP/REST externo.

A lista retornada vem diretamente do registro do analisador do dialeto ativo, então ela permanece alinhada com a versão instalada.