blockly > CodeGenerator

CodeGenerator 클래스

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

Signature:

export declare class CodeGenerator 

생성자

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

속성

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

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

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

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

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

FUNCTION_NAME_PLACEHOLDER_ string 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_ string
nameDB_? 이름 (선택사항) 변수 및 프러시저 이름의 데이터베이스입니다.
ORDER_OVERRIDES 숫자[][] 괄호가 필요 없는 외부-내부 쌍 목록입니다.
RESERVED_WORDS_ protected string 쉼표로 구분된 예약어 목록입니다.
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(코드) 코드 생성이 끝날 때 코드를 실행할 후크 서브클래스는 이를 재정의할 수 있습니다. 예를 들어 생성된 코드 앞에 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)

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

다른 도우미 함수에 동일한 alternateName이 사용되지 않도록 하는 것은 호출자의 책임입니다 (예: '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) 작업공간의 모든 블록에 대한 코드를 지정된 언어로 생성합니다.