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ě.
banikpycotrydaOstrava{
rynek(){
Konzola.pravit("Toz vitaj") pyco
}
} fajrontpyco- 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.
tozcysloi = 1pycoPro vytvoření podmínky použijeme konstrukt kaj – kajtez – boinak.
Jednotlivé výrazy můžeme spojovat pomocí boolenovského ci (or) a aj (and).
tozbulapycotozbulbpyco//...kaj (a == fajneajb == fajne){
// ...
} kajtez (a == nytcib == 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)
tozcysloi = 0pycorubat (i < 5){
kaj (i == 4){
zdybatpyco }
//...i = i+1pyco
}Následuje jednoduchý příklad na čtení ze souboru.
banikpycotrydaPriklad2 {
nacti(DrystnazevSouboru){
tozCitacc = zrobCitac() pycoc.otevr(nazevSouboru) pycotozDrystradkapycoradka = c.citajRadku() pycorubat (radka != chuj){
// ...radka = c.citajRadku() pyco
}
c.zavr() pyco
}
}
fajrontpycobanikpycotrydaObdelnik{
tozcyslodylkapycotozcyslovyskapycoObdelnik(cyslodylka, cyslovyska){
joch.dylka = dylkapycojoch.vyska = vyskapyco
}
}
trydaStverecfaganodObdelnik{
Stverec(cyslovelikost){
forant(velikost, velikost) pyco
}
} trydaOstrava{
rynek(){
tozStverecs = zrobStverec(5) pyco }
}
fajrontpycoOSTRAJava 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ě:
tozcyslo[] pole = zrobcyslo[5] pycoNavratový 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.
trydaBuu{
cyslofuu(Drysttext){
//...davajtext.dylkapyco
}
}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
.trydaclassfilu
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
integerafloat - 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