Lớp CodeGenerator
Lớp cho trình tạo mã có chức năng dịch các khối sang 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 | Mô tả |
---|---|---|
(hàm khởi tạo)(name) | Tạo một thực thể mới của lớp CodeGenerator |
Thuộc tính
Thuộc tính | Đối tượng sửa đổi | Loại | Mô tả |
---|---|---|---|
COMMENT_WRAP | số | Độ dài tối đa cho một nhận xét trước khi gói. Không tính đến mức thụt lề. | |
definitions_ | protected |
{ [khoá: string]: string; } | Từ điển các định nghĩa được in trước mã. |
forBlock | Ghi <string, (block: Block, generator: this) => [chuỗi, số] | chuỗi | rỗng> | Từ điển các hàm của trình tạo khối, được khoá theo loại khối. Mỗi hàm tạo khối nhận hai tham số: - Khối để tạo mã và - thực thể CodeGenerator (hoặc lớp con) đang gọi, để 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ộ dữ liệu [code, ưu tiên] (đối với các khối giá trị/biểu thức) hoặc – một chuỗi có chứa mã được tạo (đối với khối câu lệnh) hoặc – rỗng nếu không phát mã nào cho khối. |
|
FUNCTION_NAME_PLACEHOLDER_ | string | 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_. Mã này không được là mã hợp pháp có thể xuất hiện hợp pháp trong định nghĩa (hoặc nhận xét) hàm 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 |
{ [khoá: string]: string; } | Từ điển ánh xạ các tên hàm mong muốn trong định nghĩa_ với tên hàm thực (để tránh xung đột với các hàm của người dùng). |
TÍNH NĂNG | string | Phương pháp thụt lề. Mặc định là 2 dấu cách, nhưng 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 | rỗng | Mã tuỳ ý để đưa vào những vị trí có nguy cơ gây ra vòng lặp vô hạn. Mọi trường hợp của '%1' sẽ được thay thế bằng mã nhận dạng khối bị lỗi. Ví dụ: checkTimeout(%1);\n |
|
isInitialized | boolean | rỗng | Liệu phương thức init đã được gọi hay chưa. 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 hành cảnh báo nếu trình tạo chưa được khởi tạo. Nếu chưa chạm đến, cờ này 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 ghép nối bên ngoài KHÔNG yêu cầu dấu ngoặc đơn. | |
RESERVED_WORDS_ | protected |
string | Danh sách từ khoá được phân tách bằng dấu phẩy. |
STATEMENT_PREFIX | chuỗi | rỗng | Mã tuỳ ý để chèn vào trước mỗi câu lệnh. Mọi trường hợp của '%1' sẽ được thay thế bằng mã khối của câu lệnh. Ví dụ: highlight(%1);\n |
|
STATEMENT_SUFFIX | chuỗi | rỗng | Mã tuỳ ý để chèn sau mỗi câu lệnh. Mọi trường hợp của '%1' sẽ được thay thế bằng mã 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 | 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à 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) | Định kỳ thu thập dữ liệu cây các khối, trả về tất cả nhận xét của chúng. | |
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 đè dữ liệu này, ví dụ: để thêm câu lệnh nhập hoặc định nghĩa biến vào trước mã được tạo. | |
getProcedureName(name) | Lấy tên pháp lý duy nhất cho quy trình 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 này phải được khởi tạo. Việc 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 pháp lý 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 này phải được khởi tạo. Việc 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 để chạy mã trước khi bắt đầu tạo mã. Các lớp con có thể ghi đè dữ liệu này, ví dụ: để khởi tạo cơ sở dữ liệu về tên biến. | |
injectId(msg; khối) | Chèn một mã khối vào một thông báo để thay thế '%1'. Được dùng cho STATEMENT_PREFIX, STATEMENT_OFFSET và INFINITE_LOOP_TRAP. | |
prefixLines(text, prefix) | Thêm tiền tố chung vào mỗi dòng mã. Dành cho việc thụt lề mã hoặc thêm điểm đánh dấu nhận xét. | |
Cung cấpHàm_(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) cần đưa vào mã được tạo. Dùng để tạo các chức năng trợ giúp riêng tư. Lần đầu tiên gọi thuộc tính này bằng một BII nhất định, mã sẽ được lưu và tên thực sẽ được tạo. Các lệnh gọi tiếp theo có cùng mong muốnName không có hiệu lực nhưng có cùng giá trị trả về. Điều này phụ thuộc vào phương thức gọi để đảm bảo không sử dụng cùng một mong muốnName cho các chức năng trợ giúp khác nhau (ví dụ: sử dụng "colourRandom" và "listRandom", không phải "ngẫu nhiên"). Không có nguy cơ va chạm với các từ dành riêng hoặc tên quy trình hoặc biến do người dùng xác định. Mã sẽ nhận được kết quả khi gọi CodeGenerator.finish(). |
|
scrub_(_block; mã; _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 đè dữ liệu này, ví dụ: để tạo mã cho các câu lệnh theo sau khối này hoặc để xử lý chú thích cho khối được chỉ định cũng như mọi khối giá trị được kết nối. | |
scrubNakedValue(line) | Giá trị rỗng 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 đè dữ liệu này, ví dụ: nếu ngôn ngữ của họ không cho phép các giá trị rỗng. | |
statementToCode(block, name) | Tạo một chuỗi mã đại diện cho các khối đính kèm vào đầu vào của câu lệnh đã đặt tên. Thụt lề đoạn mã. Công nghệ này chủ yếu được dùng trong máy phát. Khi cố gắng tạo mã để đánh giá, hãy xem xét bằng cách sử dụ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 bằng ngôn ngữ được chỉ định. |