dimecres, 21 d’abril del 2021

JailScript(II): El Llenguatge

Aquest es el segon escrit d’una sèrie que repassarà el desenvolupament d’un llenguatge de programació amb el qual poder fer JailGames de forma ràpida i còmoda. En aquest mostrarem com serà el llenguatge.

Whitespace i comentaris

Els espais en blanc, les tabulacions i els salts de línia seran considerats “whitespace” i s’ignoraràn, sent d’única utilitat com a separadors entre la resta de elements. Nomes els espais que estiguin entre dobles cometes (“) seran processades i incloses al “string” corresponent.

La paraula clau “rem” o el operador cometa simple “ ‘ “ indicaran el principi d’un comentari, fent que s’ignore la resta de la línia.

Variables i Tipus

Tindrem els tipus de dades number, string i els que pugem definir mitjançant estructures. El tipus number es un nombre decimal en coma flotant de 4 bytes, equivalent a float de C, i serà l’unic tipus numèric del llenguatge. El tipus string s’usarà per a cadenes de text i la seua implementació encara està un poc en l’aire. La lògica booleana es farà a traves del tipus number, sent 0 igual a fals i -1 igual a vertader. Es definiran les constants de sistema true, que valdrà -1, i false, que valdrà 0.

Les variables es declararàn de la següent forma:

var peiv as number = 4

No es obligatori especificar un valor al declarar una variable, però si es fa es pot ometre el tipus:

var meim as string ' Açò es vàlid
var teib = 4 'Açò també es vàlid

La forma que tenim de definir nous tipus es amb "struct":

struct tipus_arounder
    x as number
    y as number
end

var arounder as tipus_arounder

Accedirem als membres del struct amb l’operador “.”, com en C i molts altres llenguatges.

També es podran declarar arrays, amb la següent sintaxi:

var arounders as array of 10 tipus_arounder

I accedir a ells amb l’operador [], com en C:

peiv = arounders[2].x ' Accedim al tercer membre del array

Funcions

Es podran definir funcions, tant externes com internes. Les externes es definiran des de C, mentre que les internes es definirien de la següent forma:

function duplicar(valor as number) as number
    return valor * 2
end

Una funció pot no retornar ningun valor, però si en retorna s’ha d’especificar el tipus d’aquest valor, com en l’exemple anterior.

Condicions

Per ara nomes tinc planificat incloure la clàusula “if”, però potser mes avant incloga algun tipus de “switch”:

if arounder[1].x = arounder[2].y then
    arounder[3].y = arounder[3].y - 1
else
    reset_arounders()
end

No fan falta parèntesi al voltant de l’expressió avaluada. El operador de comparació es “=”, ja que, al contrari que en C, no es poden fer assignacions en mig d’una expressió. La clàusula “else” es, per suposat, opcional.

Bucles

Tenim tres tipus de bucles: “for”, “while” i “repeat”:

for i as number = 0 to 9 step 1 do
    arounders[i].x = 0
end

La variable iteradora pot existir prèviament o ser declarada in-situ per a us del bucle, com en l’exemple. El bucle s’executarà per a tot el rang, inclosos el nombre inicial i el final (en el cas del exemple, s’executarà tant per al “0” com per al “9”. La clàusula “step” es opcional i indica quant s’ha d’avançar en cada iteració. Si no s’especifica es suposa “1”

while peiv < 4 do
    peiv = peiv + 1
end

repeat
    peiv = peiv - 1
until peiv = 0

De nou, tant en el “while” com en el “repeat”, no fan falta parèntesi al voltant de l’expressió avaluada. Probablement acabe afegint les clàusules “break” i “continue”, que tindrien el seu significat habitual.

En el pròxim post parlaré de lexemes, gramàtiques i altres temes raros

Cap comentari:

Publica un comentari a l'entrada