blockly > CodeGenerator

CodeGenerator クラス

ブロックを言語に変換するコード生成ツールのクラス。

署名:

export declare class CodeGenerator 

コンストラクタ

コンストラクタ 修飾子 説明
(コンストラクタ)(名前) CodeGenerator クラスの新しいインスタンスを作成します。

プロパティ

プロパティ 修飾子 種類 説明
COMMENT_WRAP 数値 ラップする前のコメントの最大長。インデント レベルは考慮されません。
definitions_ protected { [key: string]: string; } コードの前に出力される定義のディクショナリ。
forBlock Record<string, (block: Block, generator: this) => [string, number] | string | null>

ブロックタイプをキーとするブロック ジェネレータ関数の辞書。各ブロック ジェネレータ関数は、次の 2 つのパラメータを受け取ります。

- コードを生成するブロック、および - 呼び出し元の CodeGenerator(またはサブクラス)インスタンス。これにより、関数は下記(blockToCode など)または関連するサブクラス(JavascripGenerator など)で定義されるメソッドを呼び出すことができます。

戻り値は次のとおりです。

- [コード、優先順位] タプル(値/式ブロックの場合)、または - 生成されたコードを含む文字列(ステートメント ブロックの場合)。 - ブロックにコードを出力しない場合は null。

FUNCTION_NAME_PLACEHOLDER_ string これは、CodeGenerator.provideFunction_ を使用して定義された関数でプレースホルダとして使用されます。関数定義(またはコメント)に正当に出現する可能性のある法的なコードや、正規表現パーサーを混同してはなりません。
FUNCTION_NAME_PLACEHOLDER_REGEXP_ RegExp
functionNames_ protected { [key: string]: string; } (ユーザー関数との競合を回避するため)Definition_ 内の目的の関数名を実際の関数名にマッピングする辞書。
INDENT string インデントの方法。デフォルトは 2 つのスペースですが、言語生成ツールによってインデントを増やしたりタブを変更したりするためにこの設定をオーバーライドできます。
INFINITE_LOOP_TRAP 文字列 | null 無限ループを引き起こす危険性のある場所に任意のコードを挿入する。「%1」のインスタンスはすべて、失敗したブロック ID に置き換えられます。例: checkTimeout(%1);\n
isInitialized boolean | null init メソッドが呼び出されたかどうか。ジェネレータの作成後にこのフラグを false に設定し、init で true を設定するジェネレータでは、ジェネレータが初期化されていない場合に blockToCode が警告を発します。このフラグが未設定の場合、効果はありません。
name_ string
nameDB_? 名前 (省略可)変数とプロシージャ名のデータベース。
ORDER_OVERRIDES 数値 [][] かっこを必要としない外部と内部のペア設定のリスト。
RESERVED_WORDS_ protected string 予約語のカンマ区切りリスト。
STATEMENT_PREFIX 文字列 | null 各ステートメントの前に挿入する任意のコード。「%1」のインスタンスはすべて、ステートメントのブロック ID に置き換えられます。例: highlight(%1);\n
STATEMENT_SUFFIX 文字列 | null 各ステートメントの後に挿入する任意のコード。「%1」のインスタンスはすべて、ステートメントのブロック ID に置き換えられます。例: highlight(%1);\n

Methods

メソッド 修飾子 説明
addLoopTrap(branch, block) ループの内容に無限ループトラップを追加する。ループ ブロックの先頭(ループ ステートメントの実行直後)にステートメント接尾辞を追加し、ループ ブロックの最後(ループ ステートメントの実行の直前)にステートメントの接頭辞を追加します。
addReservedWords(words) この言語の予約語リストに 1 つ以上の単語を追加します。
allNestedComments(block) ブロックのツリーに再帰的にスパイダーを適用し、すべてのコメントを返します。
blockToCode(block, opt_thisOnly) 指定したブロック(および接続されたブロック)のコードを生成します。この関数を呼び出す前に、ジェネレータを初期化する必要があります。
finish(code) コード生成の終了時に実行するコードのフック。サブクラスでこれをオーバーライドできます。たとえば、生成されたコードに import ステートメントや変数定義を付加できます。
getProcedureName(name) ユーザー定義プロシージャの一意の正式名を取得します。このメソッドを呼び出す前に、クラスの nameDB_ プロパティがすでに初期化されている必要があります。これは通常、コード生成クラスの init 関数で行います。
getVariableName(nameOrId) ユーザー定義変数の一意の正式名を取得します。このメソッドを呼び出す前に、クラスの nameDB_ プロパティがすでに初期化されている必要があります。これは通常、コード生成クラスの init 関数で行います。
init(_workspace) コード生成の開始前に実行するコードのフック。サブクラスでこれをオーバーライドできます(変数名のデータベースを初期化する場合など)。
injectId(msg, block) メッセージにブロック ID を挿入して「%1」を置き換えます。STATEMENT_PREFIX、STATEMENT_SUFFIX、INFINITE_LOOP_TRAP に使用されます。
prefixLines(text, prefix) コードの各行の先頭に共通の接頭辞を付けます。コードのインデントやコメント マーカーの追加を対象としています。
provideFunction_(desiredName, code)

生成されるコードに含める、ユーザー定義のプロシージャではなく、デベロッパー定義の関数を定義します。非公開ヘルパー関数を作成するために使用されます。指定された requiredName で初めてこれを呼び出すと、コードが保存され、実際の名前が生成されます。同じ requiredName の後続の呼び出しは効果がありませんが、同じ戻り値になります。

複数のヘルパー関数で同じ requiredName が使用されないようにすることは、呼び出し元次第です(たとえば、「random」ではなく「colourRandom」と「listRandom」を使用します)。予約語、ユーザー定義の変数名、プロシージャ名と衝突するおそれはありません。

CodeGenerator.finish() が呼び出されると、コードが出力されます。

scrub_(_block, code, _opt_thisOnly) protected ブロックからコードを生成するための一般的なタスクこれは blockToCode から呼び出され、最上位ブロックだけでなく、すべてのブロックで呼び出されます。サブクラスでこれをオーバーライドできます。たとえば、ブロックに続くステートメントのコードを生成したり、指定されたブロックと接続された値ブロックのコメントを処理したりするために使用できます。
scrubNakedValue(line) ネイキッド値は、何にもプラグインされていない出力を含むトップレベル ブロックです。サブクラスは、ネイティブな値が使用できない言語などでは、これをオーバーライドできます。
statementToCode(block, name) 名前付きステートメントの入力に添付されたブロックを表すコード文字列を生成します。コードをインデントします。主にジェネレータで使用されます。評価するコードを生成する場合は、workspaceToCode または blockToCode を使用してください。
valueToCode(block, name, outerOrder) 指定された値の入力を表すコードを生成します。
workspaceToCode(workspace) ワークスペース内のすべてのブロックのコードを指定の言語に生成します。