"매 source code → AST 의 변환기". 매 tokenizer (lexer) → parser → AST tree. 2026 frontend 매 Babel (JS) → SWC (Rust) → oxc (faster Rust) 의 evolution. Vite 7 / Next 16 / Turbopack 의 내부 매 oxc/SWC.
매 핵심
매 Pipeline
Lexer (Tokenizer): 매 character stream → token stream (const, x, =, 1).
Transformer: 매 AST 의 modify (JSX → JS, TS → JS, ES2025 → ES5).
Generator: 매 AST → source code (codegen).
매 Modern Parsers (2026)
oxc (Boshen, Rust): 매 fastest — Babel 의 50-100×, SWC 의 3×. Vite 7 default.
SWC (Vercel, Rust): 매 Next.js / Turbopack 의 backbone. Babel 의 20×.
Babel (JS): 매 legacy ecosystem 의 최대 plugin 호환성. 매 새 project 에서 비추.
esbuild (Go): 매 bundler 내장 parser — Vite dev 의 default.
Acorn: 매 ESLint 9 의 default parser.
매 응용
Bundling: 매 Vite/Webpack/Turbopack 의 module graph 빌드.
Linting: 매 ESLint/Biome 의 rule 적용.
Type checking: 매 TS Compiler / SWC @swc/plugin-tsc.
Code transformation: 매 JSX, TS, decorator, JSX-runtime, optional chaining.
💻 패턴
Babel 의 AST 분석
import*asparserfrom'@babel/parser';importtraversefrom'@babel/traverse';constcode=`const x = 1 + 2;`;constast=parser.parse(code,{sourceType:'module'});traverse(ast,{BinaryExpression(path){if(path.node.operator==='+'){console.log('Found addition:',path.node.left.value,'+',path.node.right.value);}},});
SWC programmatic
import{parse,transform}from'@swc/core';constast=awaitparse('const x: number = 1;',{syntax:'typescript',target:'es2022',});const{code}=awaittransform('const x: number = 1;',{jsc:{parser:{syntax:'typescript'},target:'es2020'},});
oxc parser (Rust crate)
useoxc_allocator::Allocator;useoxc_parser::Parser;useoxc_span::SourceType;letallocator=Allocator::default();letsource="const x = 1;";letsource_type=SourceType::default();letret=Parser::new(&allocator,source,source_type).parse();println!("{:#?}",ret.program);
import*astfrom'@babel/types';constnode=t.variableDeclaration('const',[t.variableDeclarator(t.identifier('x'),t.numericLiteral(42)),]);// → const x = 42;
ESLint custom rule
exportdefault{create(context){return{VariableDeclaration(node){if(node.kind==='var'){context.report({node,message:'Use let/const instead of var'});}},};},};
매 결정 기준
상황
Parser
New Vite project
oxc (default)
Next.js / Turbopack
SWC (built-in)
Custom transform plugin (rich ecosystem)
Babel
Bundler dev mode
esbuild
Lint custom rule
Acorn (ESLint default)
Rust toolchain
oxc
기본값: oxc 또는 SWC — 2026 매 Babel 의 production 사용 비추.