반응형
SMALL

전체 글 143

[컴개/CI] 어휘 분석기 만들기

이번에는 가장 전통적으로 유명한 도구를 이용하여 어휘 분석기를 직접 만들어 보자. 오래 되었지만, 다른 도구들도 이 도구를 기반하여 만들어졌다. 어휘 분석기 도구 Lex 전통적인 방법으로 C 언어가 기반이다. 구문 분석기인 yacc과 밀접한 관련이 있으며 발전된 버전인 flex를 더 많이 사용한다. ANTLR java 기반으로, 구문 분석 시 다시 언급하겠다. 기타 도구로는 JavaCC, SableCC가 있다. Lex(렉스) 렉스는 1975년 레스크에 의해 발표된 어휘분석기 생성기이다. 이때 주의할 점은 어휘 분석기가 아니라 어휘 분석기 "생성기"라는 것이다. 사용자가 정의한 프로그램의 정규표현과 실행코드를 입력받아 C언어로 쓰여진 프로그램(어휘분석기)을 출력한다. 어휘 분석기의 생성 및 동작 어휘 분석..

[컴개/CI] Token

토큰을 어떻게 기술할까? 프로그래밍 언어 제작자는 토큰에 대해 하나하나 기술해야 할 필요가 있다. 이때 주로 사용하는 방법이 정규 표현식(regular expression)이다. 정규표현식이란 특정한 규칙을 가진 문자열의 집합을 표현하는 데에 사용하는 형식 언어이다. 표현 방식에 대한 설명은 사진으로 대체하겠다. 위는 표현, 아래는 예시이다. 마지막 예시는 2진수 집합? 이라고 쓰여있는데, 해당 표현 방식이 2진수의 모든 집합을 나타낸 것일까? 정답은 아니요이다. 왜냐하면, 2진수에는 0을 포함해야 하는데, 해당 예시에서는 무조건 1부터 시작해야 하기 때문이다. 또 다른 표현식과 예시를 보자. 위의 표현식에서 표기할 수 있는 기호와 괄호 안에 들어간 지의 여부를 파악해서 헷갈리지 않도록 조심하자. 토큰을..

[컴개/CI] 어휘 분석(Lexical Analysis)

컴파일 과정 컴파일러는 소스코드를 입력으로 받으면 전처리기를 통해 소스코드를 전처리(#include, #defines, #ifdef 등을 처리)하고 해당 결과물로 어휘, 구문, 의미 분석 과정을 거쳐 추상구문트리(AST)를 만든다. 이 과정에서 어휘 분석이라는 과정을 거치는데, 어휘 분석이 무엇인지 알아보자. 어휘 분석(Lexical Analysis) 어휘 분석이란 원시 프로그램(소스 코드)을 긴 문자열로 보고 차례대로 문자를 검사하여 의미 있는 최소 단위들로 변환하는 것이다. space와 같은 공백을 제거하여 코드의 크기도 줄일 수 있다. 이때, 의미 있는 최소 단위를 토근(token)이라고 하는데 이 토큰은 문법적으로 의미있는 최소 단위이다. 토큰의 종류는 아래와 같다. 식별자: x, y와 같은 변수..

[컴개/CI] 컴파일러

컴파일러란? 우리도 한국어, 영어 등의 언어가 존재하지만, 컴퓨터에도 마찬가지로 언어가 존재한다. 컴퓨터는 2진수를 통해 통신하는데, 이를 사람이 보고 해석하기란 불가능에 가깝다. 따라서 사람들은 어셈블리어를 만들어 컴퓨터와의 소통을 시작하였다. 어셈블리어 사람들이 직접 2진수를 쓰지 않고 기호로 표기하였다. 예를 들면 ADD(덧셈) -> 0010, SUB(뺄셈) -> 0101 등과 같이 말이다. 이렇게 기호로 표기된 언어(어셈블리어)를 어셈블러에 넣으면 컴퓨터 언어로 전환해주는데, 이때 어셈블러란 번역을 전담하는 SW이다. 그러나, 이러한 어셈블러는 CPU가 바뀌면 새롭게 만들어야 했다. 고급 언어 CPU 별 다른 어셈블러를 만들어야 한다는 사실을 불편하게 여겨 우리는 고급 언어를 탄생시켰다. 0과 1..

[Flutter] 구글 플레이 스토어 어플 출시하기(AAB 파일 Export)

구글 플레이스토어에 어플리케이션을 출시하기 위해서는 구글 개발자 계정을 만들어야 한다. 개발자 계정을 만드는 방법은 다른 사람들이 더 자세히 설명을 해뒀을 것이니 다른 블로그를 참고하도록 하자. cmd+shift+f를 눌러서 com.example.[프로젝트명]을 검색하여 example 부분을 회사/기업 이름으로 바꾸던지, 원하는 이름으로 바꾸어 준다. example로 되어 있다면 구글 플레이 스토어에서 받아 주지 않는다고 한다. 그 다음으로 안드로이드 스튜디오에서 프로젝트의 android 폴더를 연다. (인텔리제이로 개발하여 인텔리제이로 하려고 했는데 안 되었다...) android 폴더를 안드로이드 스튜디오로 열면 사진과 같이 귀여운 안드로보이가 보일 것이다. 이때, Build탭의 Generate Si..

Flutter 2023.10.16

[컴네/CN] IP Address

인터넷 주소 인터넷 주소는 인터넷에 연결된 장치의 주소이다. 장치의 주소는 두 가지로 나눌 수 있는데, ip 주소와 mac 주소가 그것이다. ip address ip주소는 인터넷에 연결되어 있는 개체(컴퓨터 또는 네트워크 카드)의 식별자(주소)이다. 즉, 논리적인 주소로 네트워크에 따라 변동된다는 특징이 있으며, ISP/공유기에서 할당한다. mac address mac 주소는 디바이스 고유의 식별자로 hardware에 존재하는 physical 주소이다. 즉, 물리적인 주소로 네트워크 카드를 만드는 제조사에서 일정한 규칙에 따라 부여한다. 물리적 주소와 논리적 주솔흘 쉽게 이해하기 위해 예를 들어 보자면, 우리가 택배를 보낼 때 사용하는 도로명주소가 논리적 주소의 예이고, 위치를 지구상의 위도와 경도로 표..

[컴네/CN] 프로토콜 및 소켓

TCP/IP 프로토콜 계층 왼쪽이 TCP/IP, 오른쪽이 osi 프로토콜 계층이다. TCP/IP의 application 계층이 osi에서는 application, presentation, session의 세 계층으로 나뉜다. application 계층은 자유롭게 변경이 가능하며 대부분의 일은 이 계층에서 발생한다. 그 아래의 계층은 운영체제와 가까우며 쉽게 바뀌지는 않지만 지속적으로 변화하고 있는 부분이다. 계층별 식별자 데이터를 전송하면 각 계층 별로 식별자가 존재한다. Application 계층에서는 웹&email&http&P2P를 식별하고, Transport 계층에서는 port number를 통해 식별하고, Network 계층에서는 ip address를 통해 식별한다. ip는 각 인터페이스에게 각각..

[컴네/CN] HTTP와 Cookie

⭐️Review⭐️ HTTP/1.1 위 사진은 HTTP/1.1의 헤더의 모습이며, TCP 연결 재사용을 위해 헤더에서는 Keep-Alive 필드로 표시한다. Keep-Alive 필드는 timeout이라는 최소 시간 동안 max 시간까지 TCP 연결을 유지하라는 의미를 가지고 있다. HTTP/1.1은 한 개의 TCP 연결만을 사용하는 것이 아니라 여러 개의 TCP 연결을 사용하는데 TCP 연결이 너무 많이 생성되면 자원 관리 차원에서 문제가 발생하므로 성능 관리를 위해 브라우저에서는 도메인 당 최대 연결 수를 제한한다. HTTP/1.1 domain sharding HTTP/1.1은 pipelining을 사용하기 때문에 HoL 병목 현상이 발생한다.(이전 포스트 참고) 따라서 해당 pipelining은 많이..

[컴네/CN] HTTP 버전

HTTP 발전 현재는 HTTP/1.1 이상의 버전만 사용한다. HTTP/1.0 HTTP GET 메소드에 대해 1개의 TCP 연결을 사용한다. 즉, 객체 1개 전송할 때 1개의 TCP 연결을 사용한다는 의미이다. 따라서 객체 하나를 전송할 때에 새로운 TCP socket를 생성하고 새롭게 연결을 수행해야 하므로 생성과 연결에 지연 시간이 발생한다. 즉, 왕복지연시간문제(non-persistent HTTP)가 발생한다. 우리는 이러한 왕복지연시간문제를 해결하기 위하여 HTTP/1.1을 만들었다. 이때, 우리는 왜 왕복지연시간을 줄여야 할까? 아래 표는 지연 시간에 따른 사용자 체감을 나타낸 표이다. 밀리초(1/1000초)라는 아주 작은 시간 동안에도 사용자는 체감을 할 수 있다. 사용자가 이러한 지연 시간을..

[컴네/CN] HTTP

HTTP: Hyper-text transfer protocol HTTP는 socket을 이용한 웹 페이지 전송 프로토콜이다. 클라이언트가 서버에 요청을 보내면, 서버는 클라이언트에게 응답을 전송하는 구조로, 서버와 클라이언트의 모든 통신은 request와 response로 구성된다. HTTP는 TCP 위에 존재하며, TCP는 socket 위에 존재한다. (HTTP/3는 TCP 대신 UDP를 사용한다.) 이때 웹 페이지는 객체들의 집합이며, 각 객체는 웹 페이지가 보유할 수 있는 HTML file, JPEG image, audio/video file 등을 일컫는다. 이때 웹 페이지는 url을 통해 식별되는데, url은 universal resource locator의 약어로 네트워크 상에서 자원이 어디 있..

반응형
LIST