Lớp CodeGenerator
Lớp cho trình tạo mã giúp dịch các khối sang một ngôn ngữ.
Chữ ký:
export declare class CodeGenerator
Hàm khởi tạo
Hàm dựng | Đối tượng sửa đổi | Nội dung mô tả |
---|---|---|
(hàm khởi tạo)(tên) | Tạo một thực thể mới của lớp CodeGenerator |
Thuộc tính
Tài sản | Đối tượng sửa đổi | Loại | Nội dung mô tả |
---|---|---|---|
COMMENT_WRAP | number | Độ dài tối đa cho nhận xét trước khi xuống dòng. Không tính đến mức thụt lề. | |
definitions_ | protected |
{ [key: string]: string; } | Từ điển gồm các định nghĩa sẽ được in trước mã. |
forBlock | Record<string, (block: Block, generator: this) => [string, number] | string | null> | Từ điển về các hàm tạo khối, được khoá theo loại khối. Mỗi hàm tạo khối nhận 2 tham số: – Khối để tạo mã và – thực thể CodeGenerator (hoặc lớp con) đang gọi, vì vậy hàm có thể gọi các phương thức được xác định bên dưới (ví dụ: blockToCode) hoặc trên lớp con có liên quan (ví dụ: JavascripGenerator), và trả về: – một bộ [mã, mức độ ưu tiên] (đối với các khối giá trị/biểu thức) hoặc – một chuỗi chứa mã đã tạo (đối với các khối câu lệnh) hoặc – rỗng nếu không cần phát mã nào cho khối. |
|
FUNCTION_NAME_PLACEHOLDER_ | string | Hàm này được dùng làm phần giữ chỗ trong các hàm được xác định bằng CodeGenerator.provideFunction_. Đây không được là mã hợp pháp có thể xuất hiện hợp pháp trong định nghĩa hàm (hoặc nhận xét) và không được gây nhầm lẫn cho trình phân tích cú pháp biểu thức chính quy. | |
FUNCTION_NAME_PLACEHOLDER_REGEXP_ | RegExp | ||
functionNames_ | protected |
{ [key: string]: string; } | Từ điển ánh xạ các tên hàm mong muốn trong Definition_ đến tên hàm thực tế (để tránh xung đột với các hàm của người dùng). |
NỘI DUNG | string | Phương pháp thụt lề. Giá trị mặc định là hai dấu cách, nhưng các trình tạo ngôn ngữ có thể ghi đè giá trị này để tăng thụt lề hoặc thay đổi thành thẻ. | |
INFINITE_LOOP_TRAP | chuỗi | giá trị rỗng | Mã tuỳ ý để chèn vào các vị trí có nguy cơ gây ra vòng lặp vô hạn. Mọi trường hợp '%1' sẽ được thay thế bằng mã khối không thành công. Ví dụ: checkTimeout(%1);\n |
|
isInitialized | boolean | null | Liệu phương thức init có được gọi hay không. Các trình tạo đặt cờ này thành false sau khi tạo và true trong init sẽ khiến blockToCode phát ra cảnh báo nếu trình tạo chưa được khởi động. Nếu cờ này không có hiệu lực, nó sẽ không có hiệu lực. | |
name_ | string | ||
nameDB_? | Tên | (Không bắt buộc) Cơ sở dữ liệu gồm tên biến và tên quy trình. | |
ORDER_OVERRIDES | số[][] | Danh sách các cặp ghép bên ngoài KHÔNG yêu cầu dấu ngoặc đơn. | |
RESERVED_WORDS_ | protected |
string | Danh sách các từ dành riêng được phân tách bằng dấu phẩy. |
STATEMENT_PREFIX | chuỗi | giá trị rỗng | Mã tuỳ ý để chèn trước mỗi câu lệnh. Mọi trường hợp '%1' đều sẽ được thay thế bằng ID khối của câu lệnh. Ví dụ: highlight(%1);\n |
|
STATEMENT_SUFFIX | chuỗi | giá trị rỗng | Mã tuỳ ý để chèn vào sau mỗi câu lệnh. Mọi trường hợp '%1' đều sẽ được thay thế bằng ID khối của câu lệnh. Ví dụ: highlight(%1);\n |
Phương thức
Phương thức | Đối tượng sửa đổi | Nội dung mô tả |
---|---|---|
addLoopTrap(branch, block) | Thêm một bẫy vòng lặp vô hạn vào nội dung của vòng lặp. Thêm hậu tố câu lệnh vào đầu khối vòng lặp (ngay sau khi thực thi câu lệnh vòng lặp) và thêm tiền tố câu lệnh vào cuối khối vòng lặp (ngay trước khi thực thi câu lệnh vòng lặp). | |
addReservedWords(words) | Thêm một hoặc nhiều từ vào danh sách các từ dành riêng cho ngôn ngữ này. | |
allNestedComments(block) | Trình thu thập thông tin định kỳ của một cây khối, trả về tất cả nhận xét của họ. | |
blockToCode(block, opt_thisOnly) | Tạo mã cho khối được chỉ định (và các khối đính kèm). Bạn phải khởi tạo trình tạo trước khi gọi hàm này. | |
finish(mã) | Móc để mã chạy khi kết thúc quá trình tạo mã. Các lớp con có thể ghi đè thuộc tính này, ví dụ: để thêm câu lệnh nhập hoặc định nghĩa biến vào trước mã đã tạo. | |
getProcedureName(name) | Lấy tên pháp lý duy nhất cho một thủ tục do người dùng xác định. Trước khi gọi phương thức này, thuộc tính nameDB_ của lớp phải được khởi tạo từ trước. Điều này thường được thực hiện trong hàm init của lớp trình tạo mã. |
|
getVariableName(nameOrId) | Lấy tên hợp pháp, duy nhất cho biến do người dùng xác định. Trước khi gọi phương thức này, thuộc tính nameDB_ của lớp phải được khởi tạo từ trước. Điều này thường được thực hiện trong hàm init của lớp trình tạo mã. |
|
init(_workspace) | Móc để mã chạy trước khi bắt đầu tạo mã. Các lớp con có thể ghi đè thuộc tính này, ví dụ: để khởi tạo cơ sở dữ liệu tên biến. | |
injectId(msg, block) | Chèn mã khối vào thông báo để thay thế '%1'. Dùng cho STATEMENT_PREFIX, STATEMENT_ rợ và INFINITE_LOOP_TRAP. | |
prefixLines(text, prefix) | Thêm một tiền tố thường dùng vào mỗi dòng mã. Dùng để thụt lề mã hoặc thêm dấu đánh dấu nhận xét. | |
providerFunction_(desiredName, mã) | Xác định hàm do nhà phát triển xác định (không phải quy trình do người dùng xác định) để đưa vào mã được tạo. Dùng để tạo các hàm trợ giúp riêng tư. Lần đầu tiên phương thức này được gọi với một tên mong muốn cho sẵn, mã sẽ được lưu và tên thực tế sẽ được tạo. Các lệnh gọi tiếp theo có cùng mong muốnName không có tác dụng nhưng có cùng giá trị trả về. Phương thức gọi có thể tuỳ ý đảm bảo cùng một uniqueName không được sử dụng cho các hàm trợ giúp khác nhau (ví dụ: sử dụng "colorourRandom" và "listRandom", không phải là "Random"). Không có nguy cơ xung đột với các từ dành riêng hoặc tên biến hoặc quy trình do người dùng xác định. Mã sẽ nhận được kết quả khi CodeGenerator.finish() được gọi. |
|
scrub_(_block, code, _opt_thisOnly) | Các thao tác phổ biến để tạo mã từ các khối. Lệnh này được gọi từ blockToCode và được gọi trên mỗi khối chứ không chỉ các khối cấp cao nhất. Các lớp con có thể ghi đè lớp này, ví dụ: để tạo mã cho các câu lệnh theo khối hoặc để xử lý nhận xét cho khối đã chỉ định và bất kỳ khối giá trị được kết nối nào. | |
scrubNakedValue(line) | Giá trị trần là các khối cấp cao nhất có đầu ra không được cắm vào bất kỳ thứ gì. Các lớp con có thể ghi đè giá trị này, ví dụ: nếu ngôn ngữ của chúng không cho phép các giá trị không có giá trị. | |
statementToCode(block, name) | Tạo một chuỗi mã đại diện cho các khối đính kèm với đầu vào câu lệnh được đặt tên. Thụt lề mã. Hàm này chủ yếu được dùng trong trình tạo. Khi cố gắng tạo mã để đánh giá, hãy xem xét bằng workspaceToCode hoặc blockToCode. | |
valueToCode(block, name, outerOrder) | Tạo mã đại diện cho giá trị đầu vào được chỉ định. | |
workspaceToCode(workspace) | Tạo mã cho tất cả các khối trong không gian làm việc theo ngôn ngữ được chỉ định. |