Môj návrh vychádza z jazyka Šaral, ktorého prezentáciu v "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:]_)*
.
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
abo
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.
+
,-
,*
,/
,:
,%
a
,abo
,ne
==
,<
,>
,<=
,>=
,<>
=
[]
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.
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
.
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ť.
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'
funduš typ názov [rozmer]
funduš typ názov [rozmer]
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é numerálio
.
funduš skutočné numeralio šč [3]
meňak neskutočné numeralio N = 42
dimenzion funduš logický fň [N]
V jazyku Šaral 2.0 sú podporované funkcie a procedúry, ktoré pri pohľade z vonku vyzerajú ako čierne skrinky, resp. bary, do ktorých vstupujú rôzne veci, a občas sa z nich aj niečo vráti. Odtiaľ pochádza aj spôzob ich zápisu v jazyku Šaral 2.0:
bar názov(typ názov, typ názov, ...)
...
popis toho, čo sa deje v bare
...
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ú bary, použijeme buď kľúčovú konštrukciu paľ do baru
alebo vrac mi z baru
. Do baru 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é.
V jazyku Šaral 2.0 je možné použiť aj bary z cudzokrajných prostredí, v ktorých sa rozpráva iným jazykom (ak sú samozrejme v tých baroch použité rovnaké typy, len inak nazvané, lebo cudzí jazyk). O našej snahe okoštovať takéto cudzie bary informujeme jazyk Šaral pomocou konštrukcie
inakši bar názov(typ názov, typ názov, ...)
inakši bar typ názov(typ názov, typ názov, ...)
inakši bar neskutočné numeralio puts(slovo s)
bar ZámenaManželiek(neskutočné numeralio A, neskutočné numeralio B)
A = A + B
B = A - B
A = A - B
bar slovo SlovakPub()
meňak slovo jedlo = "Bryndzove halusky";
vrac jedlo
meňak slovo halusky
halusky = vrac mi z baru SlovakPub()
meňak neskutočné numeralio X = 500
meňak neskutočné numeralio Y = 600
paľ do baru ZámenaManželiek(X, Y)
keď (furt alebo meňak) == (furt alebo meňak) potom
...
inak
...
keď (logický furt alebo meňak) potom
...
inak
...
Časti inak
povinné nie sú.
Cyklus s pevným počtom opakovaní (tiež zvaný kolečko) zapíšeme nasledovne:
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:
kým (furt alebo meňak) == (furt alebo meňak) rob
...
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 furtom.
Ak chceme niečo vypísať, použijeme príkaz ciskaj názov
, kde názov je názov meňaku alebo furtu, ktorý treba vypísať.
Vstup sa načítava pomocou príkazu vežmi názov
, kde názov je názov meňaku, ktorý treba načítať.
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ť)
V prípade, že máme užitočnú zbierku barov, meňakov, furtov 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.
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