1 / 30

ScriptBasic Általános Architektúra

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

india
Download Presentation

ScriptBasic Általános Architektúra

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. ScriptBasic Általános Architektúra Peter Verhás Február 2002

  2. Tartalom • Fordítás, értelmezés általában • ScriptBasic „fordító” felépítés, modulok • Megfontolások, miért?

  3. 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. 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. 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. 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. 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. 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. 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. Irodalom http://compilers.iecc.com/crenshaw/ http://accent.compilertools.net/tutorial.html http://www.acm.org/crossroads/xrds7-5/bison.html

  11. 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. XLISP rendszer • Beolvasás • Tokenizálás • Szintaxis? A LISP-et nem kell elemezni!?!?!

  13. 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. Mi egy modul? • Egy osztály, függvény csoport • A globális adatok egy typedefstruktúrába gyűjtve • Többszálas

  15. 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. Beolvasó struktúra typedef struct _SourceLine { char *line; long lLineNumber; long LineLength; char *szFileName; struct _SourceLine *next; } SourceLine, *pSourceLine;

  17. 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. 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. 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. 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. „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. BuildercNODE struktúra • Ha ha ha !

  23. 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. 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. Miért ez az architektúra? • Fordíthatóság • Gyors futtathatóság • Programozó védelme

  26. Fordíthatóság • Legyen a nyelv fordítható • Ellenpélda: Perl BEGIN { print "almaAAA\n"; } zagyvavvavv "

  27. 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. 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. Hátrányok • Nincs futási időben változó név • Nincs szimbolikus referencia • Nincs eval ”” • Nehezebb debuggert írni

  30. Köszönöm a figyelmet.

More Related