blockly > CodeGenerator

CodeGenerator 클래스

블록을 언어로 번역하는 코드 생성기의 클래스입니다.

Signature:

export declare class CodeGenerator 

생성자

생성자 수정자 설명
(생성자)(이름) CodeGenerator 클래스의 새 인스턴스를 구성합니다.

속성

속성 수정자 유형 설명
COMMENT_WRAP 숫자 래핑 전 주석의 최대 길이입니다. 들여쓰기 수준을 고려하지 않습니다.
definitions_ protected { [키: 문자열]: string; } 코드 앞에 출력할 정의 사전입니다.
forBlock Record<string, (block: Block, generator: this) => [string, number] | string | null>

블록 유형에 따라 키가 지정된 블록 생성기 함수 사전입니다. 각 블록 생성기 함수는 다음 두 매개변수를 사용합니다.

- 코드를 생성할 블록 및 - CodeGenerator (또는 서브클래스) 인스턴스 호출. 함수가 아래에 정의된 메서드 (예: blockToCode) 또는 관련 서브클래스 (예: JavascripGenerator)에 정의된 메서드를 호출할 수 있도록 합니다.

그리고 다음을 반환합니다.

- [코드, 우선순위] 튜플 (값/표현식 블록의 경우) 또는 - 생성된 코드를 포함하는 문자열 (문 블록의 경우), 또는 - 블록에 대해 내보내지 않아야 하는 코드가 없는 경우 null입니다.

FUNCTION_NAME_PLACEHOLDER_ 문자열 CodeGenerator.provideFunction_을 사용하여 정의된 함수에서 자리표시자로 사용됩니다. 함수 정의 (또는 주석)에 적법하게 나타날 수 있는 합법적인 코드가 아니어야 하고 정규 표현식 파서를 혼동해서는 안 됩니다.
FUNCTION_NAME_PLACEHOLDER_REGEXP_ RegExp
functionNames_ protected { [키: 문자열]: string; } 사전은 정의_에서 원하는 함수 이름을 실제 함수 이름에 매핑합니다 (사용자 함수와의 충돌을 방지하기 위해).
들여쓰기 문자열 들여쓰기 방법입니다. 기본적으로 공백은 2개이지만, 언어 생성기는 이보다 들여쓰기를 늘리거나 탭으로 변경할 수 있습니다.
INFINITE_LOOP_TRAP 문자열 | null 무한 루프를 일으킬 위험이 있는 위치에 삽입할 임의 코드입니다. '%1'의 모든 인스턴스는 실패한 블록 ID로 대체됩니다. 예: checkTimeout(%1);\n
isInitialized boolean | null init 메서드가 호출되었는지 여부입니다. 생성 후에 이 플래그를 false로 설정하고 init에서 true로 설정하는 생성기는 생성기가 초기화되지 않은 경우 blockToCode에서 경고를 표시합니다. 이 플래그를 변경하지 않으면 아무 효과가 없습니다.
name_ 문자열
nameDB_? 이름 (선택사항) 변수 및 프러시저 이름의 데이터베이스입니다.
ORDER_OVERRIDES 숫자[][] 괄호가 필요하지 않은 외부-내부 쌍 목록입니다.
RESERVED_WORDS_ protected 문자열 쉼표로 구분된 예약어 목록입니다.
STATEMENT_PREFIX 문자열 | null 모든 문 앞에 삽입할 임의의 코드입니다. '%1'의 모든 인스턴스는 문의 블록 ID로 대체됩니다. 예: highlight(%1);\n
STATEMENT_SUFFIX 문자열 | null 모든 문 뒤에 삽입할 임의 코드입니다. '%1'의 모든 인스턴스는 문의 블록 ID로 대체됩니다. 예: highlight(%1);\n

메서드

메서드 수정자 설명
addLoopTrap(branch, block) 루프 콘텐츠에 무한 루프 트랩을 추가합니다. 루프 블록의 시작 부분 (루프 문 실행 바로 후)에 문 접미사를 추가하고 루프 블록 끝 (루프 문 실행 직전)에 문 접두사를 추가합니다.
addReservedWords(words) 이 언어의 예약어 목록에 하나 이상의 단어를 추가합니다.
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)

생성된 코드에 포함할 개발자 정의 함수 (사용자 정의 프로시저가 아님)를 정의합니다. 비공개 도우미 함수를 만드는 데 사용됩니다. 지정된 RecommendedName으로 이 메서드를 처음 호출하면 코드가 저장되고 실제 이름이 생성됩니다. 동일한 nextName을 사용한 후속 호출은 아무런 영향을 미치지 않지만 동일한 반환 값을 갖습니다.

다른 도우미 함수에 동일한 preferredName이 사용되지 않도록 할지는 호출자가 결정합니다 (예: 'Random'이 아닌 'colourRandom'과 'listRandom' 사용). 예약어, 사용자 정의 변수 또는 프러시저 이름과 충돌할 위험이 없습니다.

CodeGenerator.finish()가 호출되면 코드가 출력을 가져옵니다.

scrub_(_block, code, _opt_thisOnly) 블록에서 코드를 생성하는 일반적인 작업 이는 blockToCode에서 호출되며 최상위 블록뿐만 아니라 모든 블록에서 호출됩니다. 서브클래스는 이를 재정의할 수 있습니다. 예를 들어 블록 뒤에 오는 문의 코드를 생성하거나 지정된 블록 및 연결된 값 블록에 대한 주석을 처리할 수 있습니다.
scrubNakedValue(line) 네이키드 값은 출력이 어떤 것에도 연결되지 않은 최상위 블록입니다. 언어에서 네이키드 값을 허용하지 않는 경우 서브클래스는 이를 재정의할 수 있습니다.
statementToCode(block, name) 이름이 지정된 문 입력에 연결된 블록을 나타내는 코드 문자열을 생성합니다. 코드를 들여씁니다. 주로 생성기에서 사용됩니다. 평가할 코드를 생성하려고 할 때 workspaceToCode 또는 blockToCode를 사용하여 살펴봅니다.
valueToCode(block, name, outerOrder) 지정된 값 입력을 나타내는 코드를 생성합니다.
workspaceToCode(workspace) 작업공간의 모든 블록에 대한 코드를 지정된 언어로 생성합니다.