scriptbasic Általános architektúra
DESCRIPTION
ScriptBasic Általános Architektúra. Peter Verh á s Február 2002. Tartalom. Fordítás, értelmezés általában ScriptBasic „fordító” felépítés, modulok Megfontolások, miért?. Hogyan fut le egy program?. Fordítás vagy értelmezés a két véglet Kevert megoldások - PowerPoint PPT PresentationTRANSCRIPT
S B
ScriptBasic Általános Architektúra
Peter VerhásFebruár 2002
S BTartalom
• Fordítás, értelmezés általában• ScriptBasic „fordító” felépítés,
modulok• Megfontolások, miért?
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)
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
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
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...
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
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
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
S BIrodalom
http://compilers.iecc.com/crenshaw/
http://accent.compilertools.net/tutorial.html
http://www.acm.org/crossroads/xrds7-5/bison.html
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.
S BXLISP rendszer
• Beolvasás• Tokenizálás• Szintaxis? A LISP-et nem kell
elemezni!?!?!
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
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
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
S BBeolvasó struktúra
typedef struct _SourceLine {
char *line;
long lLineNumber;
long LineLength;
char *szFileName;
struct _SourceLine *next;
} SourceLine, *pSourceLine;
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
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;
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
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.
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
S BBuilder cNODE struktúra
• Ha ha ha !
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
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)
S BMiért ez az architektúra?
• Fordíthatóság• Gyors futtathatóság• Programozó védelme
S BFordíthatóság
• Legyen a nyelv fordítható– Ellenpélda: PerlBEGIN { print "almaAAA\n"; }
zagyvavvavv "
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?)
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
S BHátrányok
• Nincs futási időben változó név• Nincs szimbolikus referencia• Nincs eval ””• Nehezebb debuggert írni
S B
Köszönöm a figyelmet.