Function: parse()
parse(
codeFile
,optimistic
):ParseResult
CodeFile
에 포함된 토큰들을 파싱하여 추상 구문 트리(AST)를 생성합니다. 파싱은 토큰 목록을 바탕으로 코드의 문법적 구조를 분석하고 계층적인 트리 구조로 변환하는 과정입니다.
이 함수는 다음과 같은 내부 단계를 거칩니다:
createDynamicRule
: 현재 파일 및 의존성에서내보내기
된 것들을 기반으로 동적 파싱 규칙을 생성합니다.convertTokensToNodes
: 1차적으로 토큰을 기본적인 노드(Node)로 변환합니다.parseIndent
: 들여쓰기를 기반으로 코드 블록의 계층 구조를 파악합니다.parseBracket
: 괄호(()
,[]
,{}
) 안의 표현식을 먼저 파싱하여 처리합니다.callParseRecursively
: Shift-Reduce 파싱 알고리즘을 사용하여 최종 AST를 구성합니다.
Parameters
• codeFile: CodeFile
파싱할 코드를 담고 있는 CodeFile
객체입니다. 토큰 정보와 세션 컨텍스트를 제공합니다.
• optimistic: boolean
= false
true
로 설정하면 일부 파싱 오류를 무시하고 AST를 최대한 생성하려고 시도합니다. 주로 언어 서버(LSP)에서 불완전한 코드를 분석할 때 사용됩니다.
Returns
ParseResult
파싱 결과로 생성된 AST와 내보내기 규칙을 포함하는 ParseResult
객체를 반환합니다.
See
- CodeFile
- ParseResult
Example
ts
// (개념적인 예시)
// 실제 사용 시에는 YaksokSession을 통해 CodeFile이 관리됩니다.
const session = new YaksokSession();
session.addModule('main', '"안녕" 보여주기');
const codeFile = session.getCodeFile('main');
// CodeFile은 내부적으로 토크나이저를 호출하여 토큰을 생성합니다.
// codeFile.tokenize();
// 그 다음 parse 함수가 호출되어 AST를 생성합니다.
const { ast, exportedRules } = parse(codeFile);
console.log(ast); // 프로그램의 구조를 나타내는 Block 노드