OSTRAJava má za cíl pozvednout kvalitu (nejen ostravského) programování. Na rozdíl od Javy vychází OSTRAJava přímo z mluveného jazyka (ostravského nářečí), tedy z něčeho, čemu obyčejní lidé rozumějí. Typický ostravský horník pak nebude mít problém přejít od těžby uhlí ke klávesnici. Jazyk tak mimo jiné řeší i problém nezaměstnanosti na Moravsko-Slezsku.
Zde je typický "Hello world" program v OSTRAJavě.
banik pyco
tryda Ostrava{
rynek(){
Konzola.pravit("Toz vitaj") pyco
}
}
fajront pyco
- Všechny soubory OSTRAJavy začínají klíčovým slovem
banik
. - Všechny soubory OSTRAJavy končí klíčovým slovem
fajront
, označující konec směny. - Každý statement programu musí být ukončen klíčovým slovem
pyco
. Nahrazuje tedy v Javě používaný středník. - Hlavní třída programu se vždy jmenuje
Ostrava
(jak jinak) a hlavní metoda se vždy jmenujerynek
. - Pozn.: OSTRAJava je case insensitive a nedoporučuje se používat diakritiku, jinými slovy s malym a kratkym.
OSTRAJava obsahuje 4 primitivní typy:
cyslo
– integerbul
– booleanchachar
– charcyslo_desetinne
– float
Hodnoty:
fajne
– truenyt
– falsechuj
– null
Základní knihovna OSTRAJavy také obsahuje třídy:
Dryst
– ekvivalentString
.Bazmek
– všechny třídy dědí implicitně od této třídy. Obsahuje metodynaDryst()
akantuje(Bazmek b)
, ekvivalent protoString()
aequals(Object o)
.Citac
– čtení ze souboru.Konzola
– výpis do konzole.Bafr
– jednoduchý buffer na čtení chacharů.
Deklaraci je nutno začít klíčovým slovem toz
.
toz cyslo i = 1 pyco
Pro vytvoření podmínky použijeme konstrukt kaj
– kajtez
– boinak
.
Jednotlivé výrazy můžeme spojovat pomocí boolenovského ci
(or
) a aj
(and
).
toz bul a pyco
toz bul b pyco
//...
kaj (a == fajne aj b == fajne){
// ...
} kajtez (a == nyt ci b == fajne){
// ...
} boinak {
// ...
}
Cyklus má OSTRAJava pouze jeden. Pomocí rubat
vytvoříme while
.
Rubat cyklus se dá přeřušit pomocí zdybat
(break
) a nebo přeskočit jeden cyklus pomocí dlabat
(continue
)
toz cyslo i = 0 pyco
rubat (i < 5){
kaj (i == 4){
zdybat pyco
}
//...
i = i+1 pyco
}
Následuje jednoduchý příklad na čtení ze souboru.
banik pyco
tryda Priklad2 {
nacti(Dryst nazevSouboru){
toz Citac c = zrob Citac() pyco
c.otevr(nazevSouboru) pyco
toz Dryst radka pyco
radka = c.citajRadku() pyco
rubat (radka != chuj){
// ...
radka = c.citajRadku() pyco
}
c.zavr() pyco
}
}
fajront pyco
banik pyco
tryda Obdelnik{
toz cyslo dylka pyco
toz cyslo vyska pyco
Obdelnik(cyslo dylka, cyslo vyska){
joch.dylka = dylka pyco
joch.vyska = vyska pyco
}
}
tryda Stverec fagan od Obdelnik{
Stverec(cyslo velikost){
forant(velikost, velikost) pyco
}
}
tryda Ostrava{
rynek(){
toz Stverec s = zrob Stverec(5) pyco
}
}
fajront pyco
OSTRAJava je samozřejmě jazyk objektový. Pokud chceme uvést třídu, z které chceme dědit, použijeme konstrukt fagan od
.
joch
slouží jako reference na vlastní instanci tedy ekvivalent this
.
forant
, tedy předák na šichtě, slouží jako reference na rodiče, tedy ekvivalent super
.
Nový objekt vytvoříme pomocí zrob
.
Pokud bychom chtěli vytvořit pole, uděláme to následovně:
toz cyslo[] pole = zrob cyslo[5] pyco
Navratový typ metody se píše stejně jako v Javě před název metody. Pro metodu s prázdným návratovým typem není třeba psát nic.
Pro navrácení hodnoty je použito klíčové slovo davaj
.
tryda Buu{
cyslo fuu(Dryst text){
//...
davaj text.dylka pyco
}
}
Implementováno momentálně je:
-
Compiler
- Pokročilá typová kontrola (přiřazení objektů, návratové hodnoty funkcí, fieldy)
- Kontrola deklarace a inicializace proměnných
- Kontrola volání metod (static, non-static)
- Kompilace do
.tryda
classfilu
-
Interpreter
- Paměť pomocí pole objektů
- Generační garbage collector
- Nativní volání
- Statické volání
- Primitiva (
integer
,float
) na stacku a pointer s 1 na posledním bitu - Aritmetické operace pro
integer
afloat
- Pole (primitiv i referencí)
- Dynamický lookup metod
- Overload metody
Pro kompilaci OSTRAJava překladače je potřeba:
- Java překladač (JDK) >= 1.7 (http://www.oracle.com/technetwork/java/javase/downloads/index.html)
- Maven (https://maven.apache.org/)
Pro spuštění zkompilovaných binárek postačí Java interpret (JRE) >= 1.7 (http://www.oracle.com/technetwork/java/javase/downloads/index.html).
V root složce:
$ mvn clean
$ mvn install
Nastavení práv pro skripty
$ chmod u+x ostrajavac
$ chmod u+x ostrajava
Program SATSolver je ve složce examples/SATSolver/
:
$ ./ostrajavac examples/SATSolver/ -d compiled/
$ ./ostrajava -h 1024 -f 256 -s 128 compiled/ resources/sats/01.txt
Tomáš Kohout
FIT ČVUT