ŠARAL 2.0 – Šariš Algoritmik Lengvidž 2.0 – špecifikácia jazyka
Poznámka: Príspevok je len prepis pôvodného dokumentu špecifikácia.
Môj návrh vychádza z jazyka Šaral, ktorého prezentáciu v &guot;populárno-vedeckej" forme je možné nájsť napr. na http://www.trsek.com/sr/clanky/saral (odporúčam vypočuť si zvukovú nahrávku dostupnú v spodnej časti stránky).
Platné identifikátory sú postupnosti malých a veľkých písmen, číslic a podtržníkov začínajúce písmenom alebo jedným podrtžníkom a písmenom, teda
_?[:letter:]([:digit:][:letter:]_)*
.
Kľúčové slová
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 |
furt meňak parcela dimenzion pravda ošaľ skoroošaľ logický skutočné neskutočné numeralio písmeno slovo falda inakši bar paľ do baru vrac še z baru vrac stuj keď potom inak zrob s meňakom od do kým rob ciskaj vežmi sluchaj povidz a alebo ne |
Kľúčové slová dimenzion
a stuj
v návrhu jazyka Šaral 2.0 ostávajú iba pre zachovanie spätnej kompatibility s jazykom Šaral.
Operátory
1 2 3 4 5 |
+, -, *, /, :, % a, alebo, ne ==, <, >, <=, >=, <> = [] |
Typy
1 2 3 4 5 6 |
skutočné numeralio neskutočné numeralio logický písmeno slovo funduš |
Prvé štyri typy sú považované za jednoduché, prvých päť typov za základné. Typ funduš
je rozšírený typ.
Trojhodnotová logika
Jazyk Šaral (aj Šaral 2.0) používa trojhodnotovú logiku s hodnotami pravda
, ošaľ
a skoroošaľ
zodpovedajúcimi hodnotam True
, False
a Unknown
v Kleeneho logike. Pri vyhodnocovaní logických výrazov v podmienkach a cykloch sa podmienka vyhodnotí ako pravdivá jedine v prípade, ak je jej hodnota Pravda
.
Deklarácia premenných a konštánt
1 2 |
modifikátor typ názov modifikátor typ názov = hodnota |
Modifikátor
určuje, či bude identifikátor názov
predstavovať premennú (meňak
) alebo konštantu (furt
). Prvý spôsob deklarácie je dovolený iba pre premenné, pri deklarovaní konštanty je potrebné ju hneď aj definovať.
Príklady
1 2 3 4 5 6 |
furt skutočné numeralio pi = 3.14 furt neskutočné numeralio odpoveď = 42 meňak logický najväčší = ošaľ meňak slovo meno meno = "Ladislav" meňak písmeno trieda = 'A' |
Deklarácia polí
1 2 |
funduš typ názov [rozmer] funduš typ názov [rozmer] |
1 2 |
dimenzion funduš typ názov [rozmer] dimenzion funduš typ názov [rozmer] |
Odporúčané je používať prvý spôsob deklarácie, možnosti s kľúčovým slovom dimenzion
sú podporované iba kvôli zachovaniu spätnej kompatibility s jazykom Šaral. rozmer
musí byť meňak
, furt
alebo hodnota typu neskutočné numeralio
.
Príklady
1 2 3 |
funduš skutočné numeralio šč [3] meňak neskutočné numeralio N = 42 dimenzion funduš logický fň [N] |
Definícia procedúr a funkcií
V jazyku Šaral 2.0 sú podporované funkcie a procedúry, ktoré pri pohľade z vonku vyzerajú ako čierne skrinky, resp. bar
y, do ktorých vstupujú rôzne veci, a občas sa z nich aj niečo vráti. Odtiaľ pochádza aj spôsob ich zápisu v jazyku Šaral 2.0:
1 2 3 4 |
bar názov(typ názov, typ názov, ...) ... popis toho, čo sa deje v bare ... |
1 2 3 4 5 |
bar typ názov(typ názov, typ názov, ...) ... popis toho, čo sa deje v bare ... vrac hodnota |
Prvý bar
nám nevracia nič, kým druhý bar
po skončení svojej činnosti vráti jednu hodnotu, ktorá je rovnakého typu ako bar
. Pokiaľ niekde chceme využiť služby, ktoré nám ponúkajú bar
y, použijeme buď kľúčovú konštrukciu paľ do baru
alebo vrac mi z baru
. Do bar
u môže vstúpiť len meňak
ľubovoľného typu, bar
môže vrátiť ľubovoľný základný typ. Funkcie berú ako argumenty referencie na premenné.
Externé funkcie
V jazyku Šaral 2.0 je možné použiť aj bar
y z cudzokrajných prostredí, v ktorých sa rozpráva iným jazykom (ak sú samozrejme v tých bar
och použité rovnaké typy, len inak nazvané, lebo cudzí jazyk). O našej snahe okoštovať takéto cudzie bar
y informujeme jazyk Šaral pomocou konštrukcie
1 |
inakši bar názov(typ názov, typ názov, ...) |
1 |
inakši bar typ názov(typ názov, typ názov, ...) |
Príklady
1 |
inakši bar neskutočné numeralio puts(slovo s) |
1 2 3 4 |
bar ZámenaManželiek(neskutočné numeralio A, neskutočné numeralio B) A = A + B B = A - B A = A - B |
1 2 3 |
bar slovo SlovakPub() meňak slovo jedlo = "Bryndzove halusky"; vrac jedlo |
1 2 |
meňak slovo halusky halusky = vrac mi z baru SlovakPub() |
1 2 3 |
meňak neskutočné numeralio X = 500 meňak neskutočné numeralio Y = 600 paľ do baru ZámenaManželiek(X, Y) |
Podmienky
1 2 3 4 |
keď (furt alebo meňak) == (furt alebo meňak) potom ... inak ... |
1 2 3 4 |
keď (logický furt alebo meňak) potom ... inak ... |
Časti inak
povinné nie sú.
Cykly
Cyklus s pevným počtom opakovaní (tiež zvaný kolečko) zapíšeme nasledovne:
1 2 |
zrob s meňakom názov od (furt alebo meňak) do (furt alebo meňak) ... |
premenná v cykle nadobúda hodnoty z intervalu <od;do)
While cyklus zapíšeme nasledovne:
1 2 |
kým (furt alebo meňak) == (furt alebo meňak) rob ... |
1 2 |
kým (logický furt alebo meňak) rob ... |
Je však prudko odporúčané dobre si premyslieť použitie druhej konštrukcie s logickým furt
om.
Vstup a výstup
stdin/stdout
Ak chceme niečo vypísať, použijeme príkaz ciskaj názov
, kde názov
je názov meňak
u alebo furt
u, ktorý treba vypísať. Vstup sa načítava pomocou príkazu vežmi názov
, kde názov
je názov meňak
u, ktorý treba načítať.
nstdin/nstdout
Pre počítače 8. generácie a ich (v dobe vytvorenia jazyka Šaral 1.0) nestandardný vstup a výstup má tento jazyk podporu aj pre inštrukcie povidz názov
a sluchaj názov
, ktoré možno budú podporované už v jazyku Šaral 2.0 (ak bude čas a podarí sa mi to rozbehať)
Rozšírenie schopností jazyka
V prípade, že máme užitočnú zbierku bar
ov, meňak
ov, furt
ov alebo funduš
ov, môžeme si ich odložiť do skladu. Keď ich opať budeme chcieť použiť, jazyku Šaral 2.0 to oznámime pomocou príkazu falda
(sklad) nasledovaného menom skladu (meno súbora). Obsah tohto súbora sa vloží namiesto riadka s príkazom falda
. Celé toto sa deje ešte v predspracovaní vstupu a pred lexikálnou analýzou.
Platnosť premenných
Premenné existujú v bloku, v ktorom boli definované. Procedúry a funkcie vidia iba vlastné lokálne premenné, svoje argumenty a funkcie deklarované v súčasnom bloku a v predchádzajúcich blokoch