차단 > CodeGenerator

CodeGenerator 클래스

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

서명:

export declare class CodeGenerator 

생성자

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

속성

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

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

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

다음을 반환합니다.

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

FUNCTION_NAME_PLACEHOLDER_ 문자열 CodeGenerator.provideFunction_을 사용하여 정의된 함수에서 자리표시자로 사용됩니다. 함수 정의 (또는 주석)에 합법적으로 나타날 수 있는 합법적인 코드가 아니어야 하며 정규 표현식 파서를 혼동해서는 안 됩니다.
FUNCTION_NAME_PLACEHOLDER_REGEXP_ RegExp
functionNames_ protected { [키: 문자열]: 문자열; } 사용자 함수와의 충돌을 방지하기 위해 정의_에서 원하는 함수 이름을 실제 함수 이름에 매핑하는 사전입니다.
발견률 문자열 들여쓰기 방법입니다. 기본값은 공백 2개이지만, 들여쓰기를 늘리거나 탭을 변경하도록 언어 생성기에서 이 값을 재정의할 수 있습니다.
INFINITE_LOOP_TRAP 문자열 | 없음 무한 루프가 발생할 위험이 있는 위치에 삽입하는 임의의 코드입니다. '%1'의 모든 인스턴스 실패한 블록 ID로 대체됩니다. 예: checkTimeout(%1);\n
isInitialized 부울 | 없음 init 메서드가 호출되었는지 여부입니다. 생성 후 이 플래그를 false로 설정하고 init에서 true로 설정하는 생성기의 경우 생성기가 초기화되지 않은 경우 blockToCode에서 경고를 표시합니다. 이 플래그를 변경하지 않으면 아무런 영향을 미치지 않습니다.
name_ 문자열
nameDB_? 이름 (선택사항) 변수 및 프러시저 이름의 데이터베이스입니다.
ORDER_OVERRIDES 숫자[][] 괄호가 필요하지 않은 외부-내부 쌍의 목록입니다.
RESERVED_WORDS_ protected 문자열 예약된 단어의 쉼표로 구분된 목록입니다.
STATEMENT_PREFIX 문자열 | 없음 모든 문 앞에 삽입할 임의의 코드입니다. '%1'의 모든 인스턴스 구문의 블록 ID로 대체됩니다. 예: highlight(%1);\n
STATEMENT_SUFFIX 문자열 | 없음 모든 문 뒤에 삽입할 임의의 코드입니다. '%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(_작업공간) 코드 생성이 시작되기 전에 코드 실행을 위한 후크 서브클래스가 이를 재정의할 수 있습니다. 예를 들어 변수 이름의 데이터베이스를 초기화합니다.
injectId(msg, block) 메시지에 블록 ID를 삽입하여 '%1'을(를) 바꿉니다. STATEMENT_PREFIX, STATEMENT_SUFFIX, INFINITE_LOOP_TRAP에 사용됩니다.
prefixLines(text, prefix) 각 코드 줄 앞에 공통 접두사를 추가합니다. 코드를 들여쓰기하거나 주석 마커를 추가하기 위한 용도입니다.
ProvideFunction_(desiredName, code)

생성된 코드에 포함할 개발자 정의 함수 (사용자 정의 프로시져 아님)를 정의합니다. 비공개 도우미 함수를 만드는 데 사용됩니다. 지정된 원하는 이름으로 처음 호출되면 코드가 저장되고 실제 이름이 생성됩니다. 이후의 호출은 동일한 이름을 갖는 것은 아무런 효과가 없지만, 동일한 반환 값을 가집니다.

서로 다른 도우미 함수에 동일한 원하는 이름이 사용되지 않는지 확인하는 것은 호출자에 달려 있습니다 (예: 'random'이 아닌 'colourRandom' 및 'listRandom'을 사용). 예약어, 사용자 정의 변수 또는 프러시저 이름과 충돌할 위험이 없습니다.

CodeGenerator.finish()가 호출되면 코드가 출력됩니다.

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