30
S B ScriptBasic Általános Architektúra Peter Verhás Február 2002

ScriptBasic Általános Architektúra

  • Upload
    india

  • View
    26

  • Download
    0

Embed Size (px)

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 Presentation

Citation preview

Page 1: ScriptBasic Általános Architektúra

S B

ScriptBasic Általános Architektúra

Peter VerhásFebruár 2002

Page 2: ScriptBasic Általános Architektúra

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

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

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

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

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

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

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

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

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

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

S BXLISP rendszer

• Beolvasás• Tokenizálás• Szintaxis? A LISP-et nem kell

elemezni!?!?!

Page 13: ScriptBasic Általános Architektúra

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

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

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

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

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

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

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

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

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

S BBuilder cNODE struktúra

• Ha ha ha !

Page 23: ScriptBasic Általános Architektúra

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

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

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

S BFordíthatóság

• Legyen a nyelv fordítható– Ellenpélda: PerlBEGIN { print "almaAAA\n"; }

zagyvavvavv "

Page 27: ScriptBasic Általános Architektúra

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

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

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

S B

Köszönöm a figyelmet.