어셈블리 언어
초기 프로그래밍에서 각 명령어에 대한 비트 조합을 외우지 않고 이해하기 쉬운 니모닉을 통해 프로그램을 작성하는 방법.
- 주소에 이름(레이블)을 붙있을 수 있다.
- 주석을 달 수 있다.
- 이 방식이 발전함에 따라 부트(부트 스트랩)이라는 말이 생겨났다.
어셈블러
어셈블리 언어로 작성된 코드를 기계어 코드로 바꿔주는 프로그램.
- 레이블이나 심볼의 값을 결정해 채워준다.
- 덕분에, 코드에서 명령어 위치가 바뀌어도 문제가 되지 않는다.
고수준 언어
어셈블리 언어보다 더 높은 추상화 단계에서 작동하는 방식.
- 컴파일러를 통해 기계어로 번역된다. 이 과정을 컴파일이라 한다.
- 명시적으로 메모리를 선언할 필요 X
- 코드가 복잡해지면 분기문의
GOTO
로 이뤄진 연결을 관리하기 매우 힘들다.
- 레이블 번호를 10이나 100 정도 떨어뜨려 여유를 두는 방식도 있긴하나, 이는 항상 잘 통하는 것은 아니다.
구조적 프로그래밍
GOTO
와 레이블을 조합할 때 발생하는 스파게티 코드 문제를 해결하기 위해 개발된 방식
- 초기 포트란, 베이직 언어는 비구조적 언어라 한다.
- 명시적 분기(레이블 값)이 없다.
- 덕분에, 제어 흐름이 깔끔하여 프로그램의 직관성이 높아진다.
어휘 분석
코드를 기호(문자)로 부터 단어와 같은 성격의 토큰으로 변환하는 과정.
- 실용성을 위해 이름, 숫자, 연산자, 구분자 유무 등 다양한 유형으로 토큰을 구분할 필요가 있다.
상태 기계
상태로 이뤄진 집합과 한 상태에서 다른 상태로 전이되는 원인의 목록들로 이루어진 표.

- ex)
- 상태 1에서 숫자 -> 상태 3
- 상태 1에서 e 또는 E -> 상태 5
이를 사용하면 아래와 같이 간단한 코드를 사용해 입력을 분류할 수 있다.

- 다른 유형의 토큰에 대해서 각기 다른 완료 상태값을 부여하면 이 접근 방법을 쉽게 적용할 수 있다.
정규식
앞서 상태 기계에서 사용되는 테이블을 만드는 부가 비용을 없애기 위해 나온 언어를 지정하기 위한 새로운 언어.
- 패턴 매칭에서 중추적 역할을 수행

- 왼쪽에서 오른쪽으로 처리
.
은 아무 글자든 한 글자와 매치될 수 있다.
|
은 이 기호의 왼쪽과 오른쪽 패턴 중 하나와 매치되면 된다.
()
은 수학과 동일하게 정규식을 그룹으로 묶을 때 쓰인다.
\
을 통해 이러한 예약어들을 매치할 수 있다.