<aside> 💡 공부한 자료, 시도한 경험, 트러블 슈팅, 레퍼런스
</aside>
<aside> 💡 XML에 대해서는 Xcode 작업할 때 Info.plist 에서만 보았다. 이를 트리 형태 데이터 구조로 만들고, JSON으로 변환하는 것에 대해 막막함이 앞선다. 트리 형태 데이터 구조 분석을 위한 기본 동작부터 이해하려 한다. 또한, Parser가 데이터를 처리하는 방식과 만들어 내는 데이터 구조도 익히려 한다.
</aside>
컴파일 이론, Tokenizer, Lexer, Parser, 토큰 종류, throw & do-catch 예외처리, 정규표현식
컴파일러는 ‘구문 분석 → 최적화 → 코드생성 → 링킹’ 과정을 거침
구분분석: Tokenizer → Lexer → Parser 이 결과로 추상구문트리 (AST)가 나오게 됨

어떤 대상의 의미있는 요소들을 토큰으로 쪼갬 토큰 종류를 지정해두고, 토큰 종류별로 잘라내는 식인듯 ex) identifer, operator, ..
Tokenizer가 쪼갠 토큰을 분석 의미있는 조각을 검출하여 토큰을 생성하는 것
토큰화된 데이터로 구조를 나타냄
Parser에 의해 AST 완성
// 입력값 :
[1, [2,[3]], "he is tall"]
// 토크나이저 결과
[ "1", "[2,[3]]", "['he', 'is', 'tall']"]
// 렉서 결과
[
{type: 'number', value:"1" },
{type: 'array', value: "[2, [3]]"},
{type: 'array', value: "['he', 'is', 'tall']"},
]
파서 결과
{
type: 'array',
child: [
{type: 'number', value:'1', child:[] },
{type: 'array',
child: [
{ type: 'number', value: '2', child:[] },
{ type: 'array',
child:[ {type:'number', value:'3', child:[]}
]
}]
},
{type: 'array',
child:[
{ type: 'string', value: 'he', child:[] },
{ type: 'string', value: 'is', child:[] },
{ type: 'string', value: 'tall', child:[] },
]
}]
}
프로그래밍 언어로 쓰여진 소스코드의 구조를 표현하기 위해 사용되는 Tree -> 특정 언어로 작성된 프로그램 소스코드를 컴퓨터가 이해할 수 있는 구조로 변환
AST의 모든 단계를 거쳤을 때 이상이 없다면, 프로그램이 정확하다는 의미

while b != 0:
if a > b:
a = a − b
else:
b = b − a
return a
'<P><IMG SRC="camp.jpg">camp</IMG></P>' 와 같은 XML 태그가 주어지면,
이를 Parser 할 때, P 태그 자식인 IMG 태그는 Token을 어떻게 분류하고 관리할까 ?
struct로 관리하면 자신을 참조할 수 없어 문제가 생긴다. 물론, class를 써도 된다.
그러나 class를 쓰지 않고, 재귀적인 방법을 찾아보다가 indirect enum 문법을 발견했다.