처리 과정
Source Program
Source Program
↓
Lexical Analyzer ... (lexical_analyzer, lexical_analysis)↓ Tokens ... (토큰,token)
Syntax Analyzer ... (syntactic_analysis)↓ Tree ... (AST)
Intermediate Code Generator↓ Intermediate Code ... (intermediate_code) // intermediate_representation { https://en.wikipedia.org/wiki/Intermediate_representation Up: 표현,representation }
Code Optimizer ... (code_optimization)↓ Optimized Code
Target Code Generator↓
Object Program....
data_flow?
source_code -> lexical_analyzer does lexical_analysis -> 토큰,token으로 해체 -> 파서,parser가 파싱,parsing(구문_분석) -> abstract_syntax_tree -> ...
source_code -> lexical_analyzer does lexical_analysis -> 토큰,token으로 해체 -> 파서,parser가 파싱,parsing(구문_분석) -> abstract_syntax_tree -> ...
MKL
transpiler =,transpiler transpiler (볼필요x) = transcompiler =,transcompiler transcompiler
{
Sub:
cross_compiler =,cross_compiler . cross_compiler
transpiler =,transpiler transpiler (볼필요x) = transcompiler =,transcompiler transcompiler
{
Sub:
cross_compiler =,cross_compiler . cross_compiler
{
cross compiler
cross_compiler ... aka cross-compiler.
https://ko.wikipedia.org/wiki/크로스_컴파일러
https://en.wikipedia.org/wiki/Cross_compiler
https://ja.wikipedia.org/wiki/クロスコンパイラ
} // cross compiler cross compiler cross compiler
} // transpiler transpiler // transcompiler transcompilercross compiler
cross_compiler ... aka cross-compiler.
https://ko.wikipedia.org/wiki/크로스_컴파일러
https://en.wikipedia.org/wiki/Cross_compiler
https://ja.wikipedia.org/wiki/クロスコンパイラ
} // cross compiler cross compiler cross compiler
Sub:
just-in-time_compiler (JIT_compiler)
source-to-source_compiler
구성: // due to libre
frontend / backend
인터프리터,interpreter
just-in-time_compiler (JIT_compiler)
source-to-source_compiler
구성: // due to libre
frontend / backend
front-end : source_code { 소스코드 말고 다른번역: 원시코드 } dependent
ddddddddddddddddddddlexical_analyzer / lexical_analysis : lexeme(단순한 어휘소)
scanner = tokenizer : 토큰,token 분리. token(의미를 가짐)
scanner = tokenizer : 토큰,token 분리. token(의미를 가짐)
정규식,regular_expression,regex을 기반으로 한 DFA deterministic_finite_automaton 을 구현하여 제작됨 (? chk)
parser 파서,parser말고 좋은 번역은 없을지.. =,parser .scanner에서 얻은 token을 이용해 parse_tree를 생성.
이 때 source_code 가 신택스,syntax에 맞는지 파악할 수 있으므로, syntax_analyzer
parser의 분류
이 때 source_code 가 신택스,syntax에 맞는지 파악할 수 있으므로, syntax_analyzer
( syntax_analyzer = syntactic_analyzer ?? chk
2024-06-17 둘다없음, instead chkout syntax_analysis = syntactic_analysis
) 라고도 부른다.
parser의 분류 기준2024-06-17 둘다없음, instead chkout syntax_analysis = syntactic_analysis
) 라고도 부른다.
- code를 : 왼쪽에서 오른쪽으로 해석하는지 / 오른쪽에서 왼쪽으로 해석하는지
- token의 string 유도가 : 왼쪽에서 오른쪽으로 일어나는지 / 오른쪽에서 왼쪽으로 일어나는지
- lookahead { 현재 토큰의 다음에 올 토큰,token. 파서 lookahead 파서 lookahead 파서 lookahead } 를 최대 몇 개 고려해 설계되는지
- 어떻게 실행되는지
parser의 분류
- recursive descendant parser // recursive descendant parser recursive descendant parser recursive descendant parser
parse_tree를 top-down으로 재귀호출,recursive_call해가며 순회,traversal하는 parser. 코딩하기 간단하다는 장점 / error_chaining =,error_chaining . error_chaining (DEL OK) { error chaining 실제 오류는 n번 일어났지만 상위 단계의 문법에서도 오류가 있다고 처리되어 한 오류에 대하여 여러 번의 오류 알림이 일어나는 현상[1] Up: 에러,errorerror_chainingError_chainingx (2023-08-29) error chaining error chaining error chaining "error chaining" } 현상을 처리하기 힘들다는 단점.
back-end : machine dependent
Cmp:인터프리터,interpreter
code_generation / code_generator
=,code_generation =,code_generator .
dynamic_compilation =,dynamic_compilation =,dynamic_compilation . dynamic_compilation
{
=,code_generation =,code_generator .
dynamic_compilation =,dynamic_compilation =,dynamic_compilation . dynamic_compilation
{
dynamic_recompilation =,dynamic_recompilation =,dynamic_recompilation . dynamic_recompilation
{
동적_재컴파일
= https://ko.wikipedia.org/wiki/동적_재컴파일
Dynamic_recompilation
= https://en.wikipedia.org/wiki/Dynamic_recompilation
}
{
동적_재컴파일
= https://ko.wikipedia.org/wiki/동적_재컴파일
Dynamic_recompilation
= https://en.wikipedia.org/wiki/Dynamic_recompilation
}
just-in-time_compilation = JIT_compilation (= dynamic_translation (wp))
// =,just-in-time_compilation =,JIT_compilation =,dynamic_translation .
{
MKLINK
바이트코드,bytecode =바이트코드,bytecode =,bytecode 바이트코드 bytecode
{
Sub:
Java_bytecode =,Java_bytecode =,Java_bytecode . Java_bytecode
{
자바_바이트코드
= https://ko.wikipedia.org/wiki/자바_바이트코드
Java_bytecode
= https://simple.wikipedia.org/wiki/Java_bytecode
Java_bytecode
= https://en.wikipedia.org/wiki/Java_bytecode
Javaバイトコード
= https://ja.wikipedia.org/wiki/Javaバイトコード
= https://en.wikipedia.org/wiki/List_of_Java_bytecode_instructions
// =,just-in-time_compilation =,JIT_compilation =,dynamic_translation .
{
MKLINK
바이트코드,bytecode =바이트코드,bytecode =,bytecode 바이트코드 bytecode
{
Sub:
Java_bytecode =,Java_bytecode =,Java_bytecode . Java_bytecode
{
자바_바이트코드
= https://ko.wikipedia.org/wiki/자바_바이트코드
Java_bytecode
= https://simple.wikipedia.org/wiki/Java_bytecode
Java_bytecode
= https://en.wikipedia.org/wiki/Java_bytecode
Javaバイトコード
= https://ja.wikipedia.org/wiki/Javaバイトコード
Java 바이트 코드
List_of_Java_bytecode_instructions= https://en.wikipedia.org/wiki/List_of_Java_bytecode_instructions
JIT_컴파일
= https://ko.wikipedia.org/wiki/JIT_컴파일
= https://simple.wikipedia.org/wiki/Just-in-time_compilation
= https://ko.wikipedia.org/wiki/JIT_컴파일
"JIT 컴파일(just-in-time compilation) 또는 동적 번역(dynamic translation)은 프로그램을 실제 실행하는 시점에 기계어로 번역하는 컴파일 기법"
Just-in-time_compilation= https://simple.wikipedia.org/wiki/Just-in-time_compilation
}
Sources
처리과정: 최린 컴구 slide #2 p5
처리과정: 최린 컴구 slide #2 p5