Előadást letölteni
Az előadás letöltése folymat van. Kérjük, várjon
KiadtaAlíz Bognárné Megváltozta több, mint 10 éve
1
SB ScriptBasic Általános Architektúra Peter Verhás Február 2002
2
SB Tartalom Fordítás, értelmezés általában ScriptBasic „fordító” felépítés, modulok Megfontolások, miért?
3
SB Hogyan 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)
4
SB A 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
5
SB Az é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
6
SB A 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...
7
SB Beolvasó 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
8
SB Lexiká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
9
SB Szintaxis 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
10
SB Irodalom http://compilers.iecc.com/crenshaw/ http://accent.compilertools.net/tutorial.html http://www.acm.org/crossroads/xrds7-5/bison.html
11
SB Perl 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.
12
SB XLISP rendszer Beolvasás Tokenizálás Szintaxis? A LISP-et nem kell elemezni!?!?!
13
SB ScriptBasic 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
14
SB Mi egy modul? Egy osztály, függvény csoport A globális adatok egy typedef struktúrába gyűjtve Többszálas
15
SB READER 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
16
SB Beolvasó struktúra typedef struct _SourceLine { char *line; long lLineNumber; long LineLength; char *szFileName; struct _SourceLine *next; } SourceLine, *pSourceLine;
17
SB LEXER 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énik lexer.c
18
SB Lexer 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;
19
SB Szintaxis 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
20
SB Szintaxis 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.
21
SB „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
22
SB Builder cNODE struktúra Ha ha ha !
23
SB Vé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
24
SB Segé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 )
25
SB Miért ez az architektúra? Fordíthatóság Gyors futtathatóság Programozó védelme
26
SB Fordíthatóság Legyen a nyelv fordítható –Ellenpélda: Perl BEGIN { print "almaAAA\n"; } zagyvavvavv "
27
SB Gyors 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?)
28
SB Programozó védelme Szimbolikus információ nincs futási időben –Intellectual property protection –A felhasználó megvédése önmagától esetenként
29
SB Hátrányok Nincs futási időben változó név Nincs szimbolikus referencia Nincs eval ”” Nehezebb debuggert írni
30
SB Köszönöm a figyelmet.
Hasonló előadás
© 2024 SlidePlayer.hu Inc.
All rights reserved.