Dieses Dokument zeigt die tatsächlichen AST-Knotentypen aus der tree-sitter-pascal Grammar, verifiziert anhand der node-types.json des Pakets.
Hinweis: CodeGraph nutzt keine
.scm-Dateien zur Extraktion, sondern einLanguageExtractor-Objekt in TypeScript. Die hier dokumentierten AST-Strukturen zeigen, wie der Parser Delphi-Code als Baum darstellt.
(unit (kUnit) (moduleName (identifier)) (interface ...) (implementation ...) (kEndDot))
(program (kProgram) (moduleName (identifier)) ...body...)
(library (kLibrary) (moduleName (identifier)) ...body...)
(declType
name: (identifier) ← "TMyClass"
value: (type (declClass
(kClass) ← oder (kRecord), (kObject)
parent: ((typeref) (typeref) ...) ← Basisklasse + Interfaces
(declSection (kPublic) ← Sichtbarkeit
(declProc ...) ← Methoden
(declField ...) ← Felder
(declProp ...) ← Properties
)
(kEnd))))
(declType
name: (identifier) ← "IMyInterface"
value: (type (declIntf
(kInterface)
parent: ((typeref) ...) ← Basis-Interface
guid: (guid ...) ← optionale GUID
(declProc ...) (declProp ...)
(kEnd))))
(declProc
(kFunction) ← oder kProcedure, kConstructor, kDestructor
name: (identifier) ← "MyMethod"
args: (declArgs (declArg name: (identifier) type: (type ...)))
type: (type ...) ← Rückgabetyp (nur bei functions)
attribute: (procAttribute ...)) ← z.B. override, virtual, static
Unterscheidung Funktion vs. Methode:
declProc als Kind von interface/implementationdeclProc als Kind von declClass oder declIntfkClass Kind-Knoten (class procedure)(declProp (kProperty) name: (identifier) type: (type ...) (kRead) (identifier) (kWrite) (identifier))
(declField name: (identifier) type: (type ...))
(declEnum (declEnumValue name: (identifier)) (declEnumValue name: (identifier)) ...)
(declUses (kUses) (identifier) (identifier) ...)
Optional mit Pfadangabe: (kIn) (literalString) für uses Foo in 'path/Foo.pas'
(declConst name: (identifier) type: (type ...) defaultValue: (defaultValue ...))
(exprCall (identifier) ...args...) ← WriteLn(...)
(exprDot lhs: (identifier) operator: (kDot) rhs: (exprCall (identifier) ...)) ← Svc.Login(...)
(exprDot lhs: (identifier) operator: (kDot) rhs: (identifier)) ← TAuthService.Create
(declSection (kPublic)) ← oder kPrivate, kProtected, kPublished, kStrict
Gilt für alle nachfolgenden Deklarationen bis zum nächsten declSection oder kEnd.
Das parent-Feld enthält eine Liste von typeref-Knoten:
typeref = Basisklasse → EdgeKind extendsWeitere typerefs = Interfaces → EdgeKind implements
(declClass (kClass) parent: ((typeref (identifier "TInterfacedObject")) (typeref (identifier "ITokenValidator"))) ...)
| AST-Knotentyp | Feld name |
Weitere wichtige Felder |
|---|---|---|
unit/program/library |
Kind: moduleName |
interface, implementation |
declClass |
via Parent declType |
parent (Vererbung), declSection |
declIntf |
via Parent declType |
parent, guid |
declProc |
name |
args, type, attribute |
declProp |
name |
type |
declField |
name |
type |
declEnum |
— | Kind: declEnumValue |
declEnumValue |
name |
value |
declConst |
name |
type, defaultValue |
declUses |
— | Kind: identifier |
exprCall |
— | Kind: identifier (callee) |
exprDot |
— | lhs, rhs |