# Pascal và Delphi trên Maguyva: đồ thị unit và lớp

Canonical source: https://maguyva.ai/vi/languages/pascal

License: text under [CC BY 4.0](https://creativecommons.org/licenses/by/4.0/); code samples under [MIT-0](https://opensource.org/license/mit-0); the Maguyva name, logos, brand assets and other code are not covered. Details: [maguyva.ai/license](https://maguyva.ai/license).

Maguyva hỗ trợ unit Pascal và Delphi với AST, ký hiệu và đồ thị, để agent AI có thể lập bản đồ mệnh đề uses, lớp và thủ tục trước khi thay đổi chúng.

## Tổng quan hỗ trợ

- Cấp độ: Hỗ trợ AST và symbol
- Lập trình
- Phần mở rộng: .pas, .pp
- Phân tích AST thật cho tìm kiếm nhận biết cú pháp và context cấu trúc.
- Các symbol có tên cung cấp dữ liệu cho tra cứu ngữ nghĩa và tham chiếu chéo. Điều hướng graph khả dụng khi bật trích xuất quan hệ.
- Ngôn ngữ này đóng góp symbol và quan hệ cho tìm kiếm nhận biết graph; các loại edge được hỗ trợ thay đổi theo cấu trúc riêng của ngôn ngữ.
- Cả phân tích AST và trích xuất symbol đều khả dụng.

## Phù hợp nhất

- Các nhóm duy trì ứng dụng Delphi hoặc Lazarus/Free Pascal mà tác giả ban đầu đã rời đi từ lâu.
- Codebase Object Pascal có hệ phân cấp lớp sâu, interface và các unit dùng chung lớn.
- Dự án hiện đại hóa hoặc chuyển đổi nền tảng, nơi sản phẩm bàn giao đầu tiên là bản đồ các unit và phụ thuộc của chúng.

## Workflow agent

- Liệt kê mọi unit có một unit dùng chung trong mệnh đề `uses` trước khi unit đó thay đổi.
- Tìm các lớp kế thừa từ một form hoặc component cơ sở và các phương thức chúng ghi đè.
- Lần theo các thủ tục gọi một routine trước khi tham số của nó thay đổi.

## Vì sao codebase Pascal cần bản đồ trước tiên

Ứng dụng Delphi và Free Pascal thường phát triển quanh vài unit lớn mà mọi phần khác đều dùng. Form kế thừa từ form cơ sở, component từ component cơ sở, và quy tắc nghiệp vụ nằm trong các thủ tục mà hàng chục màn hình gọi tới. Mã đọc từng tệp thì dễ, nhưng thay đổi lại vấp ở phụ thuộc.

Maguyva đưa cho agent cấu trúc unit và lớp trước, để nó có thể nói một thay đổi chạm vào đâu trước khi viết bất cứ điều gì.

## Maguyva trích xuất gì từ Pascal

Maguyva bao phủ các unit nguồn `.pas` và `.pp`. Định nghĩa thủ tục và hàm được trích xuất thành ký hiệu có thể gọi, và các từ khóa `procedure`, `function`, `var` và `const` được bỏ khỏi tên định nghĩa. Lớp và interface có thể được chọn làm định nghĩa kiểu trong tìm kiếm cấu trúc.

Quan hệ nhập đến từ mệnh đề `uses`; từ khóa được bỏ đi để đồ thị lưu tên unit. Lời gọi được chuẩn hóa bằng cách bỏ tiền tố thành viên, đối số và dấu ngoặc ngoài, nên lời gọi viết là `Self.Save(x)` được lưu thành `Save`.

Đồ thị ghi lại lời gọi, kế thừa, triển khai interface, ghi đè, khởi tạo, tham chiếu kiểu, đọc và ghi, cùng các cạnh raise và xử lý ngoại lệ. Khoảng 107 routine thư viện runtime (`WriteLn`, `ReadLn`, `Inc`, `Dec`, `Ord` và tương tự) bị lọc khỏi các quan hệ.

## Ví dụ prompt cho agent

- "Những unit nào dùng `DataModuleMain`, và chúng gọi gì từ unit đó?" (`dependency_search` theo chiều vào)
- "Những form nào kế thừa từ `TBaseEditForm`, và chúng ghi đè phương thức nào?" (`find_symbol`, sau đó `dependency_search`)
- "Giải thích cách một hóa đơn được ghi sổ, từ trình xử lý nút bấm tới unit cơ sở dữ liệu." (`get_task_context`)

## Giới hạn đã biết

- Chỉ `.pas` và `.pp` được ánh xạ sang Pascal. Các tệp dự án và form của Delphi như `.dpr` và `.dfm` không có trong danh sách phần mở rộng, nên bố cục form và liên kết dự án nằm ngoài đồ thị.
- Phương thức dùng cùng cú pháp với thủ tục tự do, nên preset `methods` trong `structural_search` không chọn gì. Hãy dùng preset `functions`.
- Lời gọi tới các routine thư viện runtime đã bị lọc không xuất hiện dưới dạng cạnh đồ thị. Dùng `text_pattern_search` cho chúng.

## Bước tiếp theo

Kết nối một kho mã bằng [hướng dẫn bắt đầu nhanh](/vi/docs/quickstart), sau đó xem ma trận hỗ trợ trên [trang tương thích](/vi/docs/compatibility). Nếu ứng dụng liên kết với thư viện C, hãy đọc thêm [hướng dẫn C](/vi/languages/c).

## Chi tiết engine

- Hỗ trợ Pascal bao phủ unit `.pas` và `.pp`. Các tệp dự án và form của Delphi như `.dpr` và `.dfm` không có trong danh sách phần mở rộng.
- Mệnh đề `uses` trở thành quan hệ nhập, và lời gọi được chuẩn hóa bằng cách bỏ tiền tố thành viên, đối số và dấu ngoặc ngoài.
- Khoảng 107 routine thư viện runtime, như `WriteLn`, `Inc` và `Ord`, bị lọc khỏi quan hệ để mã ứng dụng nổi bật lên.

## Điểm khởi đầu MCP hữu ích

- `find_symbol`: Dùng với tên lớp, form hoặc thủ tục khi bạn cần định nghĩa và các tham chiếu.
- `dependency_search`: Dùng duyệt theo chiều vào trên một unit dùng chung hoặc lớp cơ sở để thấy unit và lớp con nào phụ thuộc vào nó.
- `get_task_context`: Dùng cho các prompt như “giải thích cách một hóa đơn được ghi sổ, từ trình xử lý nút bấm tới unit cơ sở dữ liệu”.
