Download - ScriptBasic Általános Architektúra
![Page 1: ScriptBasic Általános Architektúra](https://reader036.vdocuments.site/reader036/viewer/2022062519/568153ab550346895dc1ac86/html5/thumbnails/1.jpg)
S B
ScriptBasic Általános Architektúra
Peter VerhásFebruár 2002
![Page 2: ScriptBasic Általános Architektúra](https://reader036.vdocuments.site/reader036/viewer/2022062519/568153ab550346895dc1ac86/html5/thumbnails/2.jpg)
S BTartalom
• Fordítás, értelmezés általában• ScriptBasic „fordító” felépítés,
modulok• Megfontolások, miért?
![Page 3: ScriptBasic Általános Architektúra](https://reader036.vdocuments.site/reader036/viewer/2022062519/568153ab550346895dc1ac86/html5/thumbnails/3.jpg)
S BHogyan fut le egy program?
• Fordítás vagy értelmezés a két véglet
• Kevert megoldások– Közbülső kódra fordít és értelmez
(PASCAL p-code)– JIT fordítók közbülső kódról
(Java, .NET)
![Page 4: ScriptBasic Általános Architektúra](https://reader036.vdocuments.site/reader036/viewer/2022062519/568153ab550346895dc1ac86/html5/thumbnails/4.jpg)
S BA fordítás lépései
• Beolvasás• Lexikális elemzés• Szintaxis elemzés• Közbülső kód generálás• Optimalizálás• Kód generálás• Szerkesztés (link)
– Szerkesztési optimalizálás• Futtatás• Futtatási modulok betöltése
![Page 5: ScriptBasic Általános Architektúra](https://reader036.vdocuments.site/reader036/viewer/2022062519/568153ab550346895dc1ac86/html5/thumbnails/5.jpg)
S BAz értelmező lehetséges lépései
• Beolvasás– Értelmezés (benne tokenizálás,
szintaxis elemzés)• vagy Tokenizálás
– Értelmezés (benne szintaxis elemzés)• vagy Szintaxis elemzés és
kódépítés• Értelmezés
![Page 6: ScriptBasic Általános Architektúra](https://reader036.vdocuments.site/reader036/viewer/2022062519/568153ab550346895dc1ac86/html5/thumbnails/6.jpg)
S BA három fő lépés
• Beolvasás• Lexikális elemzés• Szintaxis elemzés / kód építés
• Egybeintegráltan, pipe-line, „egyszerre” futnak, vagy
• Külön modul mindegyik
Történelmi okok, memória ára, mérete, program források mérete...
![Page 7: ScriptBasic Általános Architektúra](https://reader036.vdocuments.site/reader036/viewer/2022062519/568153ab550346895dc1ac86/html5/thumbnails/7.jpg)
S BBeolvasó
• Honnan olvas– Fájl– Adatbázis– Szabványos bemenet– TCP/IP socket– Másik szál által generált bájt sor
• Eredménye a beolvasott szöveg
![Page 8: ScriptBasic Általános Architektúra](https://reader036.vdocuments.site/reader036/viewer/2022062519/568153ab550346895dc1ac86/html5/thumbnails/8.jpg)
S BLexikális elemző
• Lehet reguláris kifejezés alapú, vagy
• Speciálisan adott célnak megfelelően megírt– előnyök, hátrányok
• Eredménye egy token sor• Token: token ID attribútumokkal
![Page 9: ScriptBasic Általános Architektúra](https://reader036.vdocuments.site/reader036/viewer/2022062519/568153ab550346895dc1ac86/html5/thumbnails/9.jpg)
S BSzintaxis elemző
• Táblázat vezérelt, vagy• Speciálisan megírt
– Előnyök hátrányok
• Milyen típusú nyelvet valósít meg?– LL(1), LR(1)– Compilers: principles, techniques and tools
Aho, Setti, Ullman– Lex & Yacc Levine, Mason, Brown. O'Reilly,
1994
• Eredménye szintaxis struktúra
![Page 10: ScriptBasic Általános Architektúra](https://reader036.vdocuments.site/reader036/viewer/2022062519/568153ab550346895dc1ac86/html5/thumbnails/10.jpg)
S BIrodalom
http://compilers.iecc.com/crenshaw/
http://accent.compilertools.net/tutorial.html
http://www.acm.org/crossroads/xrds7-5/bison.html
![Page 11: ScriptBasic Általános Architektúra](https://reader036.vdocuments.site/reader036/viewer/2022062519/568153ab550346895dc1ac86/html5/thumbnails/11.jpg)
S BPerl felépítés
• Beolvasás• Tokenizálás, szintaxis elemzés, kód
építés, közben futtatás (BEGIN blokk)
• Futtatás és ebben esetleg• Újabb beolvasás stb.
![Page 12: ScriptBasic Általános Architektúra](https://reader036.vdocuments.site/reader036/viewer/2022062519/568153ab550346895dc1ac86/html5/thumbnails/12.jpg)
S BXLISP rendszer
• Beolvasás• Tokenizálás• Szintaxis? A LISP-et nem kell
elemezni!?!?!
![Page 13: ScriptBasic Általános Architektúra](https://reader036.vdocuments.site/reader036/viewer/2022062519/568153ab550346895dc1ac86/html5/thumbnails/13.jpg)
S BScriptBasic felépítés
• Beolvasó• Tokenizáló• Szintaxis elemző• Építő• Végrehajtó
• egymás után, külön modulokban, memóriában felépítve minden közbülső eredményt
![Page 14: ScriptBasic Általános Architektúra](https://reader036.vdocuments.site/reader036/viewer/2022062519/568153ab550346895dc1ac86/html5/thumbnails/14.jpg)
S BMi egy modul?
• Egy osztály, függvény csoport• A globális adatok egy typedef
struktúrába gyűjtve• Többszálas
![Page 15: ScriptBasic Általános Architektúra](https://reader036.vdocuments.site/reader036/viewer/2022062519/568153ab550346895dc1ac86/html5/thumbnails/15.jpg)
S BREADER
• Beolvassa a teljes forrás programot a memóriába
• Láncolt listát hoz belőle létre• Kezeli az include és import direktívákat
reader.c
![Page 16: ScriptBasic Általános Architektúra](https://reader036.vdocuments.site/reader036/viewer/2022062519/568153ab550346895dc1ac86/html5/thumbnails/16.jpg)
S BBeolvasó struktúra
typedef struct _SourceLine {
char *line;
long lLineNumber;
long LineLength;
char *szFileName;
struct _SourceLine *next;
} SourceLine, *pSourceLine;
![Page 17: ScriptBasic Általános Architektúra](https://reader036.vdocuments.site/reader036/viewer/2022062519/568153ab550346895dc1ac86/html5/thumbnails/17.jpg)
S BLEXER
• Speciálisan C-ben megírt (nem Lex)• Eredmény: token lista• Tábla definiálja a
– szimbólumokat– Operátorokat, beépített függvényeket,
kulcsszavakat
• Folytató sorok kezelése is itt történiklexer.c
![Page 18: ScriptBasic Általános Architektúra](https://reader036.vdocuments.site/reader036/viewer/2022062519/568153ab550346895dc1ac86/html5/thumbnails/18.jpg)
S BLexer struktúra
typedef struct _Lexeme { enum LexemeType type; // type of the lexeme union { double dValue; // double value long lValue; // long value char *sValue; // string or symbol value } value; long sLen; //length of string or symbol char *szFileName; // where the lexeme is long lLineNumber; // where the lexeme is struct _Lexeme *next; // link to the next lexeme }Lexeme, *pLexeme;
![Page 19: ScriptBasic Általános Architektúra](https://reader036.vdocuments.site/reader036/viewer/2022062519/568153ab550346895dc1ac86/html5/thumbnails/19.jpg)
S BSzintaxis analízis
• A token listából dolgozik• Összetett, darabokból álló memória
struktúrát készít (eNODE)• Tábla definiálja
– Parancsok szintaxisát– Unáris és bináris operátorokat– Beépített függvényeket– A kifejezések szintaktikájka a szokásos,
„hard-coded”
expression.c
![Page 20: ScriptBasic Általános Architektúra](https://reader036.vdocuments.site/reader036/viewer/2022062519/568153ab550346895dc1ac86/html5/thumbnails/20.jpg)
S BSzintaxis eNODE struktúra
typedef struct _eNODE { long OpCode; // the code of operation unsigned long NodeId; // the id of the node char *szFileName;// where the lexeme is long lLineNumber;// from which this syntax node is made union {
// when the node is a command struct { union { struct _SymbolLABEL *pLabel; struct _eNODE *pNode; struct _eNODE_l *pNodeList; long lLongValue; double dDoubleValue; char *szStringValue; }Argument; long sLen; struct _eNODE *next; }CommandArgument;
// when the node is an operation struct { struct _eNODE_l *Argument; }Arguments;
// when the node is a constant struct { union { double dValue; long lValue; char *sValue; }Value; long sLen; //the length of the string constant }Constant;
// when the node is a variable struct { unsigned long Serial; // the serial number of the variable }Variable;
// when node is a user functions struct { pSymbolUF pFunction; // pointer to the function struct _eNODE_l *Argument; }UserFunction;
}Parameter;
} eNODE,*peNODE;
• Egy kicsit bonyolult, később részletesen megnézzük.
![Page 21: ScriptBasic Általános Architektúra](https://reader036.vdocuments.site/reader036/viewer/2022062519/568153ab550346895dc1ac86/html5/thumbnails/21.jpg)
S B„Kód generátor”
• Feldolgozza az összepointerezett memória struktúrát
• Egy egyszerűsített, egybefüggő memóriaterületen levő, relatív pointereket használó kód.
• Ez a végső futtatható kód.• Függvény SAVE és LOAD.builder.c
![Page 22: ScriptBasic Általános Architektúra](https://reader036.vdocuments.site/reader036/viewer/2022062519/568153ab550346895dc1ac86/html5/thumbnails/22.jpg)
S BBuilder cNODE struktúra
• Ha ha ha !
![Page 23: ScriptBasic Általános Architektúra](https://reader036.vdocuments.site/reader036/viewer/2022062519/568153ab550346895dc1ac86/html5/thumbnails/23.jpg)
S BVégrehajtás
• A felépített kódot kapja meg, és végrehajtja
• Memóriát allokál a változóknak• Kezeli a lokális változókat• Kezeli a hiba helyzeteket, ...
execute.c
![Page 24: ScriptBasic Általános Architektúra](https://reader036.vdocuments.site/reader036/viewer/2022062519/568153ab550346895dc1ac86/html5/thumbnails/24.jpg)
S BSegéd Modulok
• Memória kezelő modul(myalloc.c)
• Változó kezelő modul(memory.c)
• Külső modulokat kezelő modul(modumana.c)
• Szimbólum tábla kezelő modul(sym.c)
![Page 25: ScriptBasic Általános Architektúra](https://reader036.vdocuments.site/reader036/viewer/2022062519/568153ab550346895dc1ac86/html5/thumbnails/25.jpg)
S BMiért ez az architektúra?
• Fordíthatóság• Gyors futtathatóság• Programozó védelme
![Page 26: ScriptBasic Általános Architektúra](https://reader036.vdocuments.site/reader036/viewer/2022062519/568153ab550346895dc1ac86/html5/thumbnails/26.jpg)
S BFordíthatóság
• Legyen a nyelv fordítható– Ellenpélda: PerlBEGIN { print "almaAAA\n"; }
zagyvavvavv "
![Page 27: ScriptBasic Általános Architektúra](https://reader036.vdocuments.site/reader036/viewer/2022062519/568153ab550346895dc1ac86/html5/thumbnails/27.jpg)
S BGyors futtathatóság
• A kód legyen újrafelhasználható– Nagyon fontos CGI scripteknél
• Szimbolikus információ nincs futási időben– Sebesség (n-edik változó elérése,
vagy mindig keressük meg név szerint?)
![Page 28: ScriptBasic Általános Architektúra](https://reader036.vdocuments.site/reader036/viewer/2022062519/568153ab550346895dc1ac86/html5/thumbnails/28.jpg)
S BProgramozó védelme
• Szimbolikus információ nincs futási időben– Intellectual property protection– A felhasználó megvédése önmagától
esetenként
![Page 29: ScriptBasic Általános Architektúra](https://reader036.vdocuments.site/reader036/viewer/2022062519/568153ab550346895dc1ac86/html5/thumbnails/29.jpg)
S BHátrányok
• Nincs futási időben változó név• Nincs szimbolikus referencia• Nincs eval ””• Nehezebb debuggert írni
![Page 30: ScriptBasic Általános Architektúra](https://reader036.vdocuments.site/reader036/viewer/2022062519/568153ab550346895dc1ac86/html5/thumbnails/30.jpg)
S B
Köszönöm a figyelmet.