PQA — Programmable Query Automation
PQA là viết tắt của Programmable Query Automation: một ngôn ngữ lập trình
mới, độc lập, có kiểu tĩnh, lấy mô hình task–data–automation làm trung tâm.
Phiên bản v0.2.0 có hai nhánh biên dịch:
mã task .pqa → lexer → parser/AST → type checker → interpreter
mã website .pqa → PQA Web parser → website chạy trên trình duyệt
PQA Web dùng cú pháp giao diện riêng; người viết PQA không phải viết HTML, CSS
hay JavaScript.
Chạy nhanh
Yêu cầu Python 3.10 trở lên.
python -m venv .venv
source .venv/bin/activate
python -m pip install -e '.[dev]'
pqa run examples/hello.pqa
Kết quả:
Hello PQA
Chỉ kiểm tra cú pháp và kiểu, không chạy chương trình:
pqa check examples/calculator.pqa
Không cần cài đặt cũng có thể chạy bằng:
PYTHONPATH=src python -m pqa run examples/hello.pqa
Dùng trong VS Code
Repository có extension PQA — Programmable Query Automation. Sau khi cài tệp .vsix:
Để dùng bảng màu cố định của PQA, mở Preferences: Color Theme bằng
⌘K ⌘T trên macOS hoặc Ctrl+K Ctrl+T trên Windows/Linux, rồi chọn
PQA Rainbow Cartoon.
- Tạo một folder dự án mới và mở folder đó trong VS Code.
- Tạo tệp
start.pqa.
- Gõ
start rồi chọn snippet để tạo chương trình mẫu.
- Bấm nút ▶ ở góc trên bên phải editor để chạy.
Extension tự nhận diện .pqa, hiển thị biểu tượng PQA, tô màu cú pháp, tự đóng
ngoặc, cung cấp snippet và đánh dấu lỗi ngay trên dòng code. Runtime PQA đã được
đóng trong extension; máy chỉ cần Python 3.10 trở lên.
Bạn cũng có thể nhấp chuột phải vào tệp .pqa rồi chọn Chạy tệp PQA hoặc
Kiểm tra tệp PQA. Với website, chọn Xem PQA Web hoặc nút hình quả địa
cầu để biên dịch, mở trình duyệt và chạy máy chủ xem trước. Lệnh Run mở Terminal để chương trình có thể nhận dữ liệu
từ bàn phím; kết quả Check xuất hiện trong bảng Output → PQA.
Để đóng gói lại extension:
npm run check
npm run package
Sau đó vào Extensions → menu ... → Install from VSIX... và chọn
pqa-language-support-0.2.0.vsix.
PQA Web
Website được viết hoàn toàn bằng DSL riêng của PQA:
website "Trang PQA" {
palette {
primary violet;
background night;
surface plum;
text snow;
accent sun;
}
page "/" {
stack center {
badge "PQA WEB";
heading "Xin chào từ PQA";
text "Không cần viết HTML, CSS hay JavaScript.";
button "Bắt đầu" shows "PQA Web đang hoạt động!";
}
}
}
Biên dịch hoặc xem trực tiếp:
pqa web examples/first-web.pqa
pqa web examples/first-web.pqa --serve
Xem hướng dẫn PQA Web để biết page, stack, row, card,
field, link, image và bảng màu riêng của PQA.
Ví dụ
task add(a: Whole, b: Whole) gives Whole {
yield a + b;
}
task start() gives Whole {
const result: Whole = add(10, 20);
write(result);
yield 0;
}
Mọi chương trình cần có task start() gives Whole. PQA kiểm tra toàn bộ cú pháp
và kiểu dữ liệu trước khi chạy start, vì vậy lỗi ở task chưa được gọi vẫn được báo sớm.
OOP
object Person {
const name: Text;
state age: Whole;
task create(name: Text, age: Whole) gives Nothing {
self.name = name;
self.age = age;
}
task birthday() gives Nothing {
self.age = self.age + 1;
}
}
task start() gives Whole {
const person: Person = Person("Minh", 20);
person.birthday();
write(person.age);
yield 0;
}
Mọi thuộc tính phải được khởi tạo trong create. Thuộc tính const chỉ được gán lần
đầu trong constructor; thuộc tính state có thể thay đổi trong các method.
Tính năng hiện có
- Kiểu
Whole, Decimal, Flag, Text, Nothing và Array<T>.
const, state, phép gán, biểu thức số/logic/so sánh.
- Câu lệnh đơn kết thúc bằng dấu
;, tương tự C/C++.
- Task, tham số,
gives, yield và phạm vi lồng nhau.
- OOP với
object, thuộc tính, task khởi tạo create, self và method.
when/otherwise, repeat, each item from items.
cycle-repeat, stop, next và span cho vòng lặp đếm.
- Nhập liệu
read, chuyển kiểu tường minh và thư viện toán học cơ bản.
- Mảng an toàn bằng
Array<T>: chỉ số, count, append, take và mảng nhiều chiều.
- Hàm dựng sẵn
write(value).
- DSL PQA Web với page, bố cục, thành phần, palette và hành động button.
- Lỗi từ vựng, cú pháp, kiểu và lỗi lúc chạy bằng tiếng Việt, kèm dòng/cột.
- CLI
pqa run, pqa check và pqa web.
struct, import, WebAssembly, HTTP, MQTT và backend mã máy vẫn nằm ngoài phạm
vi hiện tại. Xem triết lý thiết kế,
đặc tả ngôn ngữ,
giáo trình và
lộ trình.
Kiểm thử
python -m pytest
Giấy phép
MIT. PQA và Programmable Query Automation là tên của ngôn ngữ trong dự án này;
cần kiểm tra nhãn hiệu trước khi phát hành công khai.