2023/04

정규 문법과 문맥 자유 문법 위는 Noam Chomsky의 4 가지 언어 유형이다. 안으로 들어갈수록 문법의 제약, 구속력이 강해진다고 보면 된다 context-senstive가 한국어, 영어 등이라 생각하면 된다 이 4가지 언어 유형 중 정규 문법과 문맥 자유 문법이 프로그래밍 언어에 딱 맞아서 정규 문법을 이용하여 어휘 분석(lexical analysis)을 수행하고, 문맥 자유 문법을 이용하여 구문 분석(syntax analysis)을 수행합니다. 대부분의 프로그래밍 언어의 오류를 찾기 위해서 문맥 자유 문법을 사용한다 정규 문법(regular grammar) 모든 규칙이 다음과 같은 형태를 가지는 문법을 말합니다. A -> aB A -> a A -> ε A와 B는 비터미널 심볼(nontermina..
프로그래밍 언어 정의하는 방법 언어 인식기(recognizer): 어떤 문자열이 언어 L에 속하는지 판단하는 장치를 의미합니다. 이는 주로 컴파일러의 어휘 분석기, 구문 분석기에서 사용됩니다. 언어 생성기(generator): 어떤 문법을 이용하여 언어 L의 문장들을 생성하는 장치를 의미합니다. 그 후, 언어를 정의하는 방법으로 언어 인식기와 언어 생성기의 관점에서 설명하고 있습니다. 여기서는 정규표현식을 이용하여 언어를 정의하는 방법을 언어 인식기 관점에서 다루고, 문법(grammar)을 이용하여 언어를 정의하는 방법을 언어 생성기 관점에서 다루고 있습니다. 마지막으로, 노트에서는 예시를 통해 언어를 생성하는 방법을 설명하고 있습니다. 이 예시에서는 'S -> S10 | 0’이라는 문법을 이용하여 생성..
어휘 분석(lexical analysis) 위의 사진에서 오늘은 Lexical Analysis에 대해 알아보겠습니다 Token : 문법적으로 의미가 있는 최소 단위 Pattern : 토큰을 서술하는 규칙 Lexeme : 패턴에 의해 매칭 된 문자열 Token에 관하여 토큰은 크게 Special form과 General form으로 나눌 수 있습니다. Special form은 언어 디자이너가 미리 정의한 단어들로, 예약어(keyword), 연산자(operator), 구분자(delimiter)가 해당됩니다. 예약어(keyword)는 프로그래밍 언어에서 미리 정의된 단어 조건문(if, else), 반복문(for, while), 데이터 타입(int, float) 등이 해당됩니다. 예약어들은 프로그래머가 변수명이..
프로그래밍 언어의 구성 프로그래밍 언어의 구성 요소는 크게 구문(Syntax)과 의미론(Semantics)으로 나눌 수 있습니다. 구문은 프로그래밍 언어의 문법적인 부분으로, 프로그래밍 언어에서 올바른 문장을 구성하는 방법을 정의합니다. 이를 통해 프로그래밍 언어를 구성하는 단어, 구문 구조, 문장 등을 정의할 수 있습니다. 언어의 표현식, 문장 그리고 프로그램 단위의 형식 일반적으로 문맥 자유 문법으로 기술 의미론은 프로그래밍 언어의 의미적인 부분으로, 프로그래밍 언어에서 올바른 의미를 가지는 문장을 구성하는 방법을 정의합니다. 이를 통해 프로그래밍 언어에서 올바른 실행 결과를 얻을 수 있도록 문장의 의미를 정의합니다. 표현식, 문장, 프로그램 단위에 대한 의미 연산 의미론, 공리 의미론, 표기 의미론..
블록 암호 기반 MAC 블록 암호를 이용해서 MAC를 생성하는 몇 가지 방법에 대해서 알아보자 암호 - 기반 메시지 인증 코드(Cipher-based Message Authentication Code)(CMAC) 암호-기반 메시지 인증 코드(CMAC)의 생성 과정은 다음과 같습니다. 메시지 M을 n개의 블록으로 나눕니다. 각 블록을 M1, M2, …, Mn으로 표기합니다. CMAC 알고리즘에 사용할 대칭키 K와 부속키 K1을 설정합니다. K는 k 비트의 암호키이며, K1은 n 비트의 부속키입니다. CMAC 알고리즘에서 사용할 암호화 함수를 선택합니다. AES나 3DES 암호화 함수 중 하나를 선택하며, 이에 따라 블록 크기인 b도 결정됩니다. AES의 경우 b는 128비트, 3DES의 경우 b는 64비트..
HMAC HMAC(Hierarchical Message Authentication Code)은 키를 활용한 메시지 인증 방식으로, 메시지 무결성을 보호하는 데 사용됩니다. HMAC은 일반적으로 대칭키를 사용하며, 주어진 입력 메시지와 키를 이용하여 MAC(Message Authentication Code)을 생성합니다. HMAC은 다음과 같은 구성 요소를 사용하여 MAC을 생성합니다. 해시 함수 (Hash function) : SHA-1, SHA-256 등과 같은 해시 함수를 사용합니다. 내부 패딩 (Inner padding) : 0x36과 같은 내부 패딩 값을 사용하여 해시 함수를 적용하기 전 입력 메시지를 처리합니다. 외부 패딩 (Outer padding) : 0x5C와 같은 외부 패딩 값을 사용하여..
Scheme 기본 문법 Scheme 언어의 특징은 아래와 같다 Simple syntax - 간단한 문법 Functional programming - 함수가 일급 객체 취급 받는다 Dynamic typing - 동적 타입 지원 Tail recursion optimization - 꼬리 재귀 최적화 Basic Data Type s-expression은 symbolic expression의 약어로, Lisp 언어에서 모든 코드나 데이터를 나타내는 방식을 말합니다. 이는 리스트 구조를 이용한 트리 구조로 표현됩니다. 따라서 Lisp에서는 코드도 데이터와 마찬가지로 리스트 형태로 표현되어 처리됩니다. S-expression의 데이터 유형 Atom은 숫자, 심볼 등과 같은 단순한 데이터 유형을 나타냅니다. List..
사운드 엔지니어 (3) - 컴프레서 사용 방법 컴프레서는 오디오 신호의 동적 범위를 제어하는 데 사용되는 오디오 처리 도구입니다. 컴프레서는 큰 음량의 파트를 줄이고 작은 음량의 파트를 향상시켜, 전체적인 음량의 일관성을 유지하고 오디오 믹스에서의 선명도를 향상시킵니다. 컴프레서 사용 방법 및 팁: Threshold(임계값) 설정 컴프레서가 작동하기 시작하는 음량 수준을 결정합니다. 너무 낮게 설정하면 모든 소리가 압축되어 자연스럽지 않게 들릴 수 있습니다. 반면, 너무 높게 설정하면 압축 효과가 거의 없어질 수 있습니다. 적절한 임계값을 설정하여 원하는 압축 효과를 얻어보세요. Ratio(비율) 설정 입력 신호가 임계값을 초과할 때 적용되는 압축 비율을 결정합니다. 높은 비율은 강한 압축을 의미하며, ..
· ETC
Python 한글과 영어 예쁘게 정렬(포맷)하는 방법 Intro. 왜 띄어쓰기 제대로 했는데 포맷이 안맞는거지? product 별로 품목을 정렬해서 출력하려고 했더니 잘되지 않았다. 각 요소 별로 고정된 문자열을 배정하고, 입력 받은 값을 채운 후 나머지 값은 패딩으로 채운 후 출력하도록 했는데 말이다 그 이유는 내가 영어와 한글을 섞어 사용했기 때문에 글자 보폭이 달라서 발생한 문제였다. 해결 방법 class Product: def __init__(self, name: str, price: int, quantity: int) -> None: self.name = name self.price = price self.quantity = quantity def get_price(self) -> int: re..
· ETC
Pyenv 세팅 방법 pyenv는 여러 버전의 Python을 관리할 수 있는 도구입니다. 개인적으로 파이썬을 가지고 노는 것을 좋아하므로, 여러 가지 프로젝트에서 범용성을 위해 pyenv를 자주 사용하게 됩니다 Pyenv 설치 과정 Apple Silicon M1 Mac에서 pyenv를 설치하고 사용하는 방법은 다음과 같습니다. Homebrew 설치 먼저 Homebrew 패키지 관리자를 설치해야 합니다. 이미 설치되어 있다면 이 단계를 건너뛰어도 됩니다. 터미널에서 다음 명령어를 실행하여 Homebrew를 설치합니다: /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)" pyenv 설치 H..
berom
'2023/04 글 목록 (9 Page)