Skip to content

Commit

Permalink
Merge remote-tracking branch 'origin/main'
Browse files Browse the repository at this point in the history
  • Loading branch information
aripiprazole committed Sep 7, 2023
2 parents f68d4eb + a949d26 commit 7924adc
Show file tree
Hide file tree
Showing 2 changed files with 33 additions and 20 deletions.
43 changes: 32 additions & 11 deletions SPECS.md
Original file line number Diff line number Diff line change
Expand Up @@ -66,10 +66,12 @@ Onde `..` é um location node que foi ocultado por brevidade.

### If

`If` é uma estrutura que representa um bloco if/else dentro da linguagem. Ele é usado para tomar decisões com base em uma condição. O formato da estrutura é semelhante ao seguinte exemplo:
`If` é uma estrutura que representa um bloco if/else dentro da linguagem. Ele é usado para tomar decisões com base em uma condição e sempre retorna um valor, é como se fosse um ternário de JS. O formato da estrutura é semelhante ao seguinte exemplo:

A condição do if deve ser sempre um boolean.

```javascript
if true { a } else { b }
if (true) { a } else { b }
```

| Nome | Tipo |
Expand All @@ -87,7 +89,7 @@ if true { a } else { b }
| Nome | Tipo |
| -------- | -------- |
| kind | String |
| name | Var |
| name | Parameter |
| value | Term |
| next | Term |
| location | Location |
Expand Down Expand Up @@ -133,8 +135,8 @@ Um `BinaryOp` é um enumerador que representa uma operação binária. Essas sã
| Mul | Multiplicação | `2 * 2 = 4` |
| Div | Divisão | `3 / 2 = 1` |
| Rem | Resto da divisão | `4 % 2 = 0` |
| Eq | Igualdade | `"a" == "a"`, `2 = 1 + 1`, `true = true` |
| Neq | Diferente | `"a" != "b"` |
| Eq | Igualdade | `"a" == "a"`, `2 == 1 + 1`, `true == true` |
| Neq | Diferente | `"a" != "b"`, `3 != 1 + 1`, `true != false` |
| Lt | Menor | `1 < 2` |
| Gt | Maior | `2 > 3` |
| Lte | Menor ou igual | `1 <= 2` |
Expand Down Expand Up @@ -174,7 +176,7 @@ Um `BinaryOp` é um enumerador que representa uma operação binária. Essas sã
| Nome | Tipo |
| -------- | -------- |
| kind | String |
| parameters | [Var] |
| parameters | [Parameter] |
| value | Term |
| location | Location |

Expand All @@ -190,6 +192,16 @@ Exemplos que devem ser válidos: `print(a)`, `print("a")`, `print(2)`, `print(tr
| value | Term |
| location | Location |

Os valores devem ser printados como:

| Tipo | Como deve ser printado |
| ----- | ---------------------- |
| String | a string sem aspas duplas ex `a` |
| Number | o literal de número ex `0` |
| Boolean | `true` ou `false` |
| Closure | `<#closure>` |
| Tuple | `(term, term)` |

### First (Função de pegar o primeiro elemento de uma tupla)

`First` é uma chamada de função que pega o primeiro elemento de uma tupla. Ela é definida por:
Expand Down Expand Up @@ -239,15 +251,24 @@ Ela tem os seguintes elementos:

Quando o second for chamado com algo que não é uma tupla ele deve dar um erro de runtime.

### Parameter

`Parameter` representa o nome de uma parâmetro. É definida por:

| Nome | Tipo |
| -------- | -------- |
| text | String |
| location | Location |

### Var (Nome de uma variável)

`Var` representa o nome de uma variável. É definida por:

| Nome | Tipo | Descrição |
| -------- | -------- | ---------- |
| kind | String | O var é presente caso ele esteja dentro de um Term |
| text | String | Texto do identificador |
| location | Location | Localização do identificador no código fonte |
| Nome | Tipo |
| -------- | -------- |
| kind | String |
| text | String |
| location | Location |

### Term

Expand Down
10 changes: 1 addition & 9 deletions files/fib.rinha
Original file line number Diff line number Diff line change
Expand Up @@ -6,12 +6,4 @@ let fib = fn (n) => {
}
};

let x = 10;
let n = f + f2;
let _ = print (x);
let _ = print (n);
let _ = print ("fib " + fib(100000));
let _ = print (f());
let _ = print (f2("pao"));
let _ = print ((10 * (14 + 3)));
print ("hello, world")
print (fib(10))

0 comments on commit 7924adc

Please sign in to comment.