blockly > CodeGenerator

Lớp Trình tạo mã

Lớp cho một 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)(name) 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 một nhận xét trước khi xuố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 trình 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, do đó, 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ả lại:

– một bộ dữ liệu [mã, ư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ó mã nào được phát cho khối.

FUNCTION_NAME_PLACEHOLDER_ string Giá trị 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đị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).
CHỈ DÀNH CHO string Phương pháp thụt lề. Giá trị mặc định là 2 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 chuyển sang 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 chạy. Nếu không được chạm, 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 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 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 vào trước mỗi câu lệnh. Mọi trường hợp '%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 | giá trị rỗng Mã tuỳ ý để chèn vào sau mỗi câu lệnh. Mọi trường hợp '%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 Nội dung mô tả
addLoopTrap(branch, block) Thêm một vòng lặp vô hạn vào nội dung của vòng lặp. Thêm hậu tố của câu lệnh vào đầu khối vòng lặp (ngay sau khi câu lệnh lặp thực thi) và tiền tố câu lệnh vào cuối khối vòng lặp (ngay trước khi câu lệnh vòng lặp thực thi).
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 dữ liệu định kỳ 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 đã chỉ định (và các khối đính kèm). Bạn phải khởi động trình tạo trước khi gọi hàm này.
finish(mã) Kết nối với mã để chạy khi kết thúc quá trình tạo mã. Lớp con có thể ghi đè giá trị 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 một 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 phải được khởi tạo từ trước. Bướ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 phải được khởi tạo từ trước. Bướ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) Kết nối với mã để chạy trước khi bắt đầu tạo mã. Lớp con có thể ghi đè giá trị này, ví dụ: để khởi tạo cơ sở dữ liệu của tên biến.
injectId(msg, block) Chèn mã khối vào một thông báo để thay thế '%1'. Dùng cho STATEMENT_PREFIX, STATEMENT_SUFFIX và INFINITE_LOOP_TRAP.
prefixLines(text, prefix) Thêm một tiền tố chung vào mỗi dòng mã. Dành để thụt lề mã hoặc thêm điểm đánh dấu nhận xét.
Cung cấp_(desiredName, mã)

Xác định một 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 gọi với tên mong muốn đã cho, 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ề.

Đảm bảo rằng phương thức gọi không sử dụng cùng mong muốn đó 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 "Random"). Không có nguy cơ xung đột với các từ dành riêng hoặc tên biến hay quy trình do người dùng xác định.

Mã này nhận được kết quả khi gọi CodeGenerator.finish().

scrub_(_block, mã, _opt_thisOnly) protected 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, không chỉ trên các khối cấp cao nhất. Các lớp con có thể ghi đè giá trị này, ví dụ: để tạo mã cho các câu lệnh theo sau 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ỳ mục nào. 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 bằng ngôn ngữ được chỉ định.