Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/amanda-lang/amanda
The Amanda programming language
https://github.com/amanda-lang/amanda
compiler interpreter portuguese python rust vm
Last synced: 3 months ago
JSON representation
The Amanda programming language
- Host: GitHub
- URL: https://github.com/amanda-lang/amanda
- Owner: amanda-lang
- Created: 2020-04-11T20:46:41.000Z (over 4 years ago)
- Default Branch: main
- Last Pushed: 2024-04-14T01:03:43.000Z (7 months ago)
- Last Synced: 2024-04-14T12:01:01.696Z (7 months ago)
- Topics: compiler, interpreter, portuguese, python, rust, vm
- Language: Python
- Homepage:
- Size: 7 MB
- Stars: 25
- Watchers: 6
- Forks: 4
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
- awesome-made-by-angolans - amanda - lang) (Uncategorized / Uncategorized)
README
# Amanda
![tests](https://github.com/stackswithans/amanda/workflows/tests/badge.svg)Amanda is a statically typed programming language with portuguese constructs.
It is implemented using a Python compiler and a Rust VM.
It's specifically designed to be used by portuguese speakers who are just getting started with programming.## Build Instructions
To build the project on your machine you need following:
- Python 3.8+
- Rust and Cargo v1.59.0+**On Windows**
Run the following commands at the root folder of the repo using CMD:
```
pip install -r requirements.txt
python setup.py
```
Test the installation by running the following command on CMD:```
dist\amanda examples\hello_world.ama
```**On Linux/Mac**
Run the following commands at the root folder of the repo:
```
pip3 install -r requirements.txt
python3 setup.py
```
Test the installation by running:```
dist/amanda examples/hello_world.ama
```## Tour of Amanda
#### Syntax
```python
# Comentário simples
# Instruções são delimitadas por uma nova linha
# ou por ';'a : int = 1 # o ';' não é necessário
b : int = 2# Mas pode ser usado
a : int = 1;
b : int = 2;func soma(a:int,b:int):int
retorna a+b
fim # a palavra 'fim' indica o fim de corpo de uma função, classe e e.t.c
```#### Variables
```python
# Declaração simples
a : int # variável 'a' do tipo intb : int = 10 # declaração e atribuição
#Variáveis do mesmo tipo podem ser declaradas na mesma linha
a,b : int
a = 10
b = 50
```#### Types
| Types | Values |
| ------------- |:----------------------|
| int | 2, 4, -2, 0 |
| real | 2.0, 3.15, -8.2 |
| bool | verdadeiro, falso |
| texto | "eu", 'meu' |#### Operators
```python
# Operadores aritméticos
2 + 2 # Soma: 4
2 - 2 # Soma: 4
2 * 3 # multiplicação: 6
1 // 2 # divisão inteira: 0
1 / 2 # divisão real : 0.5
2 % 2 # resto: 0# Operadores relacionais
2 > 3 # maior: falso
2 < 3 # menor: verdadeiro
2 >= 3 # maior ou igual : falso
2 <= 3 # maior ou igual : verdadeiroverdadeiro == falso # igual : falso
verdadeiro != falso # diferente : verdadeiro#Operadores lógicos
verdadeiro e falso # e lógico : falso
verdadeiro ou falso # ou lógico : verdadeiro
nao verdadeiro # negação : falso
```#### Strings
```python
"ama" + "nda" # concatenação : amanda
"ama" == "nda" # comparação : falso
```
#### Control flow
```python
# senum : real = 5 // 3
se num > 1 entao
mostra "maior que 1"
senaose num == 1 entao
mostra "igual à 1"
senao
mostrar "menor que 1"
fim# repetição: enquanto
i : int
enquanto i < 10 faca
mostra i
i += 1
fim# repetição: para
para i de 0..11 faca # começa no 0 e termina no 10
mostra i
fim```
#### Input
```python
i : int = leia_int("Digite um inteiro: ") # Exibe a mensagem e lê um inteiro do teclado
r : real = leia_real("Digite um real: ") # Exibe a mensagem e lê um real do teclado
s : texto = leia("Digite uma string: ") # Exibe a mensagem e lê uma cadeia de caracteres do teclado
```#### Output
```python
mostra 1 # exibe 1
mostra 2.1 # exibe 2.1
mostra verdadeiro # exibe verdadeiro
mostra "texto" # exibe textos : texto = "carro"
mostra s # exibe carro```
#### Functions
```python
#Função que recebe dois inteiros e retorna a soma deles
func soma (a:int,b:int): int # retorna um inteiro
retorna a + b
fim
# Função sem tipo de retorno indica que
# a função não retorna nenhum valor
func mostra_soma(a:int,b:int) # sem tipo de retorno
mostra a + b
fim
```### Lists (Arrays)
```python# Uma lista serve para armazenar vários valores
#do mesmo tipo
#Para criar a lista use a 'função' listaminha_lista : [] int = lista(int,4) # tipo e o tamanho
# Também é possível criar uma lista de forma directa
minha_lista = [int: 1, 2, 3]# Preencher a lista
para i de 0..tamanho(minha_lista) faca
minha_lista[i] = i*i
fim# Imprimir todos elementos da lista
para i de 0..tamanho(minha_lista) faca
mostra minha_lista[i]
fim#Criar uma matriz 3 x 2
minha_matriz : [][]int = matriz(int, 3, 2)
minha_matriz[0][0] = 1mostra minha_matriz[0][0]
```#### Classes
```pythonclasse Ponto # Uma classe agrega campos e funções
x : real
y : realfunc e_origem():bool
retorna (x == 0) e (y == 0)
fimfunc e_igual(p2 : Ponto) : bool
retorna (eu.x == p2.x) e (eu.y == p2.y)
fimfim
p : Ponto = Ponto(0,0) # inicializa um ponto com x = 0 e y = 0
mostra p.x # 0
mostra p.y # 0mostra p.e_origem() # verdadeiro
p1 : Ponto = Ponto(1,3.4)
mostra p.e_igual(p1) # falso
```