R-BASIC preview release

Elkészült a BASIC interpreter hobbi projektem első nyilvános preview release-e.

Feature-ök:

* editor, debugger, konzol és grafikus ablak
* Kicsomagolás után egyből működik - hordozható Java implementáció (Java 8 kell hozzá csak)
* Basic256 kompatibilitás (még vannak hiányzó parancsok, de a http://basic256.blogspot.hu/ példáinak többsége működik, kivételek például az Arduinos példák)
* Mélykonzol üzemmód: teljes értékű editor (VT1) és grafikus GUI (VT2) X nélkül (ez a rész Linux only és csak 64 bites bináris van egyelőre). 80-as évek mikroszámítógépeinek stílusában használható.

A program nyílt forrású, githubon van fenn. Itt érhető el a projekt oldal, és a letöltés: https://github.com/rizsi/rbasic http://rizsi.com/rbasic/

Hozzászólások

Szep munka, grat!
Miert dontottel sajat parser irasa mellett meglevo parser generatorok helyett? (JavaCC vagy ANTLR peldaul)

Köszi! Még egyetem alatt írtam egy early parsert, és gondoltam, miért ne próbáljam ki. Elég lassú (az early parsing alapelve is lassú, meg a konkrét megvalósításon is lenne mit optimalizálni), emiatt nem a legjobb választás, de az API-ja barátságos, egyszerű használni (alapvetően nyelv->AST egy lépésben). A hibajelzése nem túl szofisztikált, ez még probléma vele.

Not not invented here, ez a lényeg :-). Ez egy hobbi projekt, ésszerűtlen döntések is lehetségesek. Egyébként, amikor először csináltam ezt a parsert, akkor még a parser API-k olyanok voltak, hogy a nyelvtan közé kellett processzáló kódot írni. Ez nekem nagyon nem tetszett, olyat akartam, ami nyelvtanból AST-t csinál, majd azt lehet iterálni programból. Ahogy látom az új ANTLR (4) is ilyen, de az akkori még nem ilyen volt.

Az early parser előnye még, hogy a nyelvtanra a kikötései minimálisak: kontextusfüggetlen, és egyértelmű legyen. (a nem egyértelmű parsolás runtime hibát okoz, ami akár kezelhető is lehet egy heurisztikával ami a lehetőségek közül választ.) A legtöbb egyéb módszer megköveteli, hogy valamilyen normál formába hozzuk a nyelvtanunkat.

A parserem hasznos kiegészítője még a kifejezés nyelv generátor. Ez arra jó, hogy precedencia szerint felsoroljuk az összes kifejezés típust, és generálja belőle a kifejezés nyelvtant. Így ha be kell illeszteni egy új operátort, az gyerekjáték, nem kell többszörösen redundáns nyelvtant túrni, hanem csak felveszek egy plusz sort a kifejezések közé. (Persze ezt meg lehetne csinálni ANTLR alapon is nyilván, de tudtommal alapból nem része.) Lásd pl.:

https://github.com/antlr/grammars-v4/blob/master/java8/Java8.g4#L1277

és:

https://github.com/rizsi/rbasic/blob/master/java/rizsi.basic/src/main/r…