안녕하세요.
오늘도 역시 새벽에 정리를 쓰고있는 김정욱입니다....
오늘은 질문도 별로 안들어오고 다들 수월하게 하시는 것 같던데 전 역대급으로 막혀서 진땀뺐습니다ㅠㅠ
그럼 오늘 과제를 진행하면서 새롭게 알게된 내용에 대해서 정리하여 공유해보겠습니다!
지난 학습 정리 보기-> [부스트캠프 9기/챌린지] - [부스트캠프 9기 챌린지] 학습 정리 - 02일차
Tokenizer와 Lexer, Parser
- Tokenizer
입력된 문자열을 의미 있는 단위(token)로 분리하는 것입니다.
예를 들자면 sum = 3 + 5;라는 식이 있을 때 의미 있는 단어로 각각 쪼갠 아래 값처럼 되는 것입니다.
['sum', '=', '3', '+', '5', ';']
- Lexer
생성된 토큰들 각각의 타입 정보를 추가하여 더 구조화된 형태로 만드는 것입니다.
예를 들자면 위에서 만든 토큰을 아래와 같이 만들 수 있습니다.
[
{ type: 'IDENTIFIER', value: 'sum' },
{ type: 'ASSIGNMENT', value: '=' },
{ type: 'NUMBER', value: '3' },
{ type: 'OPERATOR', value: '+' },
{ type: 'NUMBER', value: '5' },
{ type: 'SEMICOLON', value: ';' }
]
- Parser
만들어진 렉서를 이용하여 추상 구문 트리 즉 AST를 만드는 것입니다.
토큰들을 구조화하여 트리 형태로 만드는 것인데요, 아래와 같이 만들 수 있습니다.
{
type: 'AssignmentExpression',
operator: '=',
left: { type: 'Identifier', name: 'sum' },
right: {
type: 'BinaryExpression',
operator: '+',
left: { type: 'Literal', value: 3 },
right: { type: 'Literal', value: 5 }
}
}
정규 표현식
제가 진짜 약한 정규표현식입니다ㅜ
하지만 과제 해결을 위해선 꼭 알아야 할 것 같아서 학습해봤습니다.
기본 형태
기본적으로는 /와 / 사이에 원하는 문자열 형태를 넣게 됩니다.
ex) /123/ -> 123이란 문자열을 내놔라
문자 클래스
대괄호를 사용합니다. 대괄호 안에는 해당 위치에 있으면 하는 문자가 들어있습니다. 이 중 하나라도 일치하면 됩니다.
ex) [123] -> 1, 2, 3중 아무거나 일치하는지 확인해라
ex) [a-z] -> a부터 z까지의 문자열 중 일치하는게 있는지 확인해라
ex) [a-zA-Z0-9] -> a~z 그리고 A~Z그리고 0~9 문자중 일치하는게 있는지 확인해라
반복
- * : 0회 이상 반복한다는 뜻입니다. 없어도 되고 여러 개 있어도 된다는 것 같네요.
ex) [a-z]* -> a~z 중 하나의 문자가 없어도 되고 여러개 있어도 됨
- + : 1회 이상 반복한다는 뜻입니다. 적어도 하나는 있어야 된다는 거겠죠.
- ? : 0 또는 1회 반복한다는 뜻입니다. 없거나 하나만 있어야 한다는 건가 봅니다.
- {n, m} : n번 이상 m번 이하 반복하라는 뜻입니다.
ex) [a-z]{3} -> a~z 중 하나의 문자가 정확히 3번 반복
ex) [a-z]{3, } -> a~z 중 하나의 문자가 최소 3번 이상 반복
ex) [a-z]{3, 5} -> a~z 중 하나의 문자가 3번 이상 5번 이하로 반복
앵커
복잡한 정규표현식 내에서 여기가 문자열 시작이고, 끝이라고 알려주는 표식입니다.
시작은 ^, 끝은 $로 나타냅니다.
특수문자
특수문자를 찾을 때 사용합니다. 이건 GPT가 알려준 내용 그대로 정리해놓겠습니다.
- . : 임의의 단일 문자와 일치합니다.
- \d : 숫자 문자와 일치합니다. [0-9]와 동일합니다.
- \D : 숫자가 아닌 문자와 일치합니다. [^0-9]와 동일합니다.
- \w : 단어 문자와 일치합니다. [a-zA-Z0-9_]와 동일합니다.
- \W : 단어 문자가 아닌 문자와 일치합니다. [^a-zA-Z0-9_]와 동일합니다.
- \s : 공백 문자와 일치합니다. [ \t\n\r\f\v]와 동일합니다.
- \S : 공백이 아닌 문자와 일치합니다. [^ \t\n\r\f\v]와 동일합니다.
- \b : 단어 경계와 일치합니다.
- \B : 단어 경계가 아닌 부분과 일치합니다.
플래그
정규 표현식 맨 마지막에 적는 하나의 알파벳입니다. 이 알파벳에 따라 문자열 검색의 형태가 달라집니다.
- g : 전역 검색 (global)
- i : 대소문자 구분 없는 검색 (case-insensitive)
- m : 여러 줄 검색 (multi-line)
- s : 줄바꿈 문자를 포함하여 .와 일치 (dotAll)
- u : 유니코드 코드 포인트로 검색 (unicode)
- y : “sticky” 검색, 현재 위치에서만 일치 (sticky)
JSON & XML
JSON은 API호출할 때, XML은 안드로이드나 스프링에서 설정 파일로 자주 봐 왔었습니다. 그러나 제대로 정리해보는건 이번이 처음인 것 같습니다!
- JSON
json은 무조건 키-값 형태로 쌍을 이루어 구성되어 있습니다.
javascript의 객체 구문을 기반으로 구성되어있고, 대부분의 언어에서 파싱하고 생성할 수 있습니다.
- XML
데이터와 데이터 구조를 동시에 표현하는 형태입니다.
계층적 데이터 구조를 지원합니다.
두 언어는 데이터를 표현하고 전송하는 데에 목적을 가진 포맷이라는 점과, 계층적으로 구조를 표현할 수 있다는 것이 공통점입니다.
차이점으로는 JSON {}와 []를 사용하지만 XML은 <tag></tag> 형식으로 표현하고 속성도 그 안에서 사용이 가능하기 때문에 JSON이 더 구조가 단순하다고 할 수 있습니다.
그리고 JSON은 여러 형태의 데이터가 저장 가능하지만 XML은 모든 타입이 문자열로만 저장이 되는 차이점이 있습니다.
오늘은 저의 부족함에 대해 많이 깨닫는 시간이었습니다.
일정 배분 실패의 늪에서 계속 못빠져나오고 있는 것 같은데 답을 찾게되면 좋겠네요!
'부스트캠프 9기 > 챌린지' 카테고리의 다른 글
[부스트캠프 9기 챌린지] 학습 정리 - 06일차 (0) | 2024.07.22 |
---|---|
[부스트캠프 9기 챌린지] 회고 - 1주차 (0) | 2024.07.20 |
[부스트캠프 9기 챌린지] 학습 정리 - 04일차 (1) | 2024.07.18 |
[부스트캠프 9기 챌린지] 학습 정리 - 02일차 (0) | 2024.07.16 |
[부스트캠프 9기 챌린지] 학습 정리 - 01일차 (1) | 2024.07.15 |