home *** CD-ROM | disk | FTP | other *** search
/ Amiga MA Magazine 1998 #6 / amigamamagazinepolishissue1998.iso / coders / jËzyki_programowania / oberon / text / analyzer.text (.txt) < prev    next >
Oberon Text  |  1977-12-31  |  3KB  |  85 lines

  1. Syntax10.Scn.Fnt
  2. ParcElems
  3. Alloc
  4. Syntax14b.Scn.Fnt
  5. Syntax14.Scn.Fnt
  6. TableElems
  7. Alloc
  8. Syntax14.Scn.Fnt
  9. /nolines"*"/nohead"*"/table
  10. Modul    Statements
  11. OPP    1108
  12. OP2    135
  13. Summe    1243
  14. Analyzer    1442
  15. Syntax14i.Scn.Fnt
  16. Syntax10.Scn.Fnt
  17. ParcElems
  18. Alloc
  19. Syntax14.Scn.Fnt
  20. /col"LCCCC"/table
  21. Modul    Never used    Used before Set    Never Set    Set but never Used
  22. FileDir    6 (loc. Vars)
  23. Files    3
  24. Modules
  25. Fonts            2 (array)
  26. Texts    7
  27. TextFrames    4            5
  28. Viewers                1
  29. MenuViewers    1 (import)
  30. Oberon    4    4 (Loop)        7 (MV.New)
  31. Programm Analyse - oder, weshalb steht da bloss diese ?@!#$ Variable ?
  32. Um was geht's?
  33. - Nie gebraucht: 
  34. nderungen und Revisionen eines Moduls => Variablen, Konstanten, Typen, Felder in Typen, Prozeduren und Module, welche deklariert wurden und nicht mehr gebraucht werden.
  35.     Kein Fehler, aber Programm schwerer verst
  36. ndlich.
  37. - Gebrauch vor Initialisierung: Variablen werden vor ihrer Initialisierung gebraucht. Variablen werden nie initialisiert.
  38.     Echter Fehler, sofern im selben Scope (intermediate Variables!).
  39. - Initialisierung ohne Gebrauch: typisches Beispiel, welches keinen Fehler darstellt:
  40.     V := MenuViewers.New(...)
  41. - Nicht_exportierte (typ_gebundene) Prozeduren, welche nie aufgerufen werden (dead code).
  42. - Importierte Module, welche nie referenziert werden. Probleme mit Lader m
  43. glich (v.a. wenn es distributiert wird). Langsamere Compilation.
  44. Implementation:
  45. Diplomarbeit bei Karl Rege. Source war schwer lesbar und war nicht f
  46. r Oberon_2.
  47. => Parser Modul (OPP)
  48. Vorteile:
  49.     - immer auf aktuellem Sprachstand. Analyzer ist OPP+OP2 Modul
  50.     - Symboltabelle und Syntaxbaum vorhanden => mehr Checks und sicherere Analyse
  51. Nachteile:
  52.     - V3 Gruppe
  53. r gewisse F
  54. lle immer noch zuwenig Information (intermediate Variables). W
  55. rde Datenflussanalyse erfordern.
  56. In OPT.Objekt hat es zwei Felder (adr, linkadr), welche nur vom back_end gebraucht werden. => Missbrauch f
  57. r Position im Source und Nummer f
  58. r usage.
  59. Nach jeder Prozedur wird der Scope (lokale Objekte) nochmals durchlaufen und entsprechende Fehlermeldungen generiert, falls die usage_Nummer nicht ok ist.
  60. Probleme:
  61. a := a+1 oder INC(a)    (* a used, then set *)
  62. Naive Implementation: set before used! => Durchlaufen des Syntaxbaums und Sonderbehandlung auch von Var_Parametern!
  63. a[i].b.c := 5;    (* a used, i used, b used, c assigned *)
  64. Durchlaufen des Syntaxbaums und nochmaliges 'parsen' von Designator.
  65. Standart/System Prozeduren:
  66.     LEN(a) oder SYSTEM.ADR(a);    (* used before set unterdr
  67. cken! *)
  68.     SYSTEM.GETREG(a, 1);    (* Var_Parameter *)
  69. Optionen:
  70. - Zus
  71. tzliche Checks f
  72. r intermediate objects. Zuweisung an / Zugriff auf Variablen in einem 
  73. usseren Scope. Deklaration von Objekten welche gleichen Namen in 
  74. usserem Scope haben.
  75. - Anzahl Statements (assignment, proc call, if, while, etc.) als genaues Komplexit
  76. tsmass.
  77. - Markieren von redefinierten Methoden (da es kein REDEFINE gibt, Wink mit dem ...).
  78. - Analyse auch f
  79. r exportierte Objekte.
  80. Beispiele:
  81.     Oberon System:
  82. Interessiert?
  83.     Net.ReceiveFiles Pluto shml:Analyzer.Tool~
  84.     Auch bei Portierungen vorhanden (ausser DOS)
  85.