분류 전체보기
-
BNF의 한계컴공지식/프로그래밍언어론 2024. 9. 8. 15:17
Linux에서는 공백을 허용하지 않는다.예를 들어 다음과 같은 파일 이름이 있다고 해보자filename with spaces and quotes 12.3.txt우리가 BNF에 공백 문자("\"")를 정의해 놓아도 Linux는 이것을 6개의 식별자(identifier)로 본다. 근데 만약 escape 처리를 해놓으면 안전하게 공백을 처리할 수 있게 된다.예를 들어 다음과 같이 말이다.filename\ with\ spaces\ and\ quotes\ 12.3.txt 또한 BNF는 중복 처리적으로 한계가 있다.예를 들어 다음과 같은 코드가 있다고 해보자public public int x; BNF 문법적으로 틀렸다고 하지는 않지만 실제로는 컴파일 오류가 난다..BNF로는 이 중복 오류를 체크할 방법이 없다는 게..
-
왜 대부분의 프로그래밍 언어가 대체(substitution)기능을 지원하는가?컴공지식/프로그래밍언어론 2024. 9. 8. 14:52
코드에서 같은 연산을 여러 번 반복해서 사용하게 되면, 그 계산을 매번 다시 하는 건 시간도 낭비고, 실수할 가능성도 커진다.예를 들어 1 + 1 을 직접 계산하는 과정을 1만번 반복한다고 생각해봐라..정말 비효율적이고 이미 증명돼있는 값을 1만번 계산하여 다시 도출하는 꼴이 된다.그래서 많은 프로그래밍 언어는 이걸 최적화하고, 코드 유지보수를 쉽게 하려고 '대체' 기능을 제공하는 거다. # 대체를 안 한 경우 result = 10 + 20 + 30 other_result = 10 + 20 + 30 + 40 # 대체를 한 경우 sum_value = 10 + 20 + 30 result = sum_value other_result = sum_value + 40 # 대체를 안 한 경우 x = 10 * 5 y..
-
BNF로 산술 표현식 정의하기컴공지식/프로그래밍언어론 2024. 9. 8. 14:49
특정 언어를 만든다고 생각해보자이 때 우리는 산술 표현식을 정의해야 할 필요가 있다.일단 정수랑 float의 연산식이나 숫자를 표현하는 문법을 정의하려면 어떻게 해야할까?다음과 같다. ::= | + | - | * | / ::= -? + ? ::= .+ ::= 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 이렇게 정의하면 더하기, 빼기, 곱하기, 나누기와 같은 단순한 산술 표현식을 사용하는 게 가능해지고단순하게 number를 표시하는 게 가능해진다.뒤에 ?(물음표)는 있어도 되고 없어도 되는 것을 뜻한다. -?는 음수일 수도 있으니 물음표를 붙인거고 ?는 소수가 ..
-
변동성(혹은 분산)을 측정하는 방법경제 2024. 9. 7. 22:44
평균 같은 것만으로는 데이터가 어떻게 퍼져 있는지 알 수 없으니 데이터가 얼마나 흩어져 있는지 알려주는 방법을 알아야 한다.그런 방법들은 아래와 같다. Range: 데이터에서 가장 큰 값과 가장 작은 값의 차이를 말한다. 제일 간단한 변동성 측정 방법이다. Interquartile Range (IQR): 제1사분위수(Q1)와 제3사분위수(Q3)의 차이다. 즉, 데이터 중간 50%가 어디에 몰려 있는지를 보여주는 거다.극단적인 값(이상치)의 영향을 덜 받으니 많이 쓰인다. Variance(분산): 각 데이터가 평균에서 얼마나 떨어져 있는지를 계산한 값이다. 평균과의 차이(편차)를 제곱해서 다 더하고, 데이터 개수로 나눈 값이다. 분산이 크면 데이터가 많이 퍼져 있는 거고, 작으면 덜 퍼져 있다는 뜻이다...
-
평균, 중앙값, 최빈값, 그리고 백분위수경제 2024. 9. 7. 20:57
Mean: 평균값이다. 다 더해서 개수로 나누는 거 Median: 중앙값인데, 데이터를 크기 순으로 나열했을 때 딱 가운데 오는 값이다.(Median Filtering이 생각난다)극단적인 값(이상치, outliers)가 있을 때 평균보다 중앙값을 더 신뢰할 수 있다.예를 들어, 부자 한 명이 엄청나게 많은 돈을 벌고 있는 집단에서는 평균을 쓰면 부자가 전체 평균을 확 끌어올려서 나머지 사람들이 모두 부자인 것처럼 보이기 때문이다 ㅋㅋ하지만 중앙값을 쓰면 그 극단적인 값을 무시하고 전체의 중간 위치를 보여준다.근데 만약 짝수개의 데이터가 있으면.. 어떤 값이 중앙값이 될까?만약 4개의 값이 있다면 2번째, 3번째 값 중 어떤 값이 중앙값이 될까?데이터셋이 1, 2, 3, 4라고 해보자.여기서 가운데에 있는..
-
탐색적 데이터 분석(Exploratory Data Analysis)경제 2024. 9. 7. 20:30
탐색적 데이터 분석은 데이터를 분석하기 전에 그 데이터를 시각적으로 탐색하고, 패턴이나 이상점 같은 것들을 찾아내는 방법이다. 말하자면, 데이터를 정리하고 시각적으로 표현해서 "이 데이터가 어떤 특성을 가지고 있나?"를 알아보는 거다.탐색적 데이터 분석(Exploratory Data Analysis) 기법들에 대해서 알아보자 줄기-잎 그림(stem-and-leaf display) : 줄기-잎 그림은 데이터를 순서대로 나열하면서 분포의 모양을 보여준다. 히스토그램이랑 비슷하지만, 실제 데이터 값을 보여준다는 장점이 있다. 왼쪽에 있는 게 줄기(stem)고, 오른쪽에 있는 게 잎(leaf)인 거다.여기서 줄기는 10의 자리, 잎은 1의 자리를 나타낸다.예를 들어 줄기 5와 잎의 2는 52, 줄기 5와 잎의..
-
Ammonite란?컴공지식/프로그래밍언어론 2024. 9. 7. 15:07
Ammonite는 Scala REPL (Read-Eval-Print Loop) 의 더 모던한 버전이다.REPL은 코드를 바로 실행하고 결과를 바로 볼 수 있는 인터프리터 같은 역할을 한다.그래서 Ammonite도 Scala 코드를 작성하고 바로 실행할 수 있는 도구라고 보면 된다. 일반적인 Scala REPL보다 더 많은 기능을 지원하는 개선된 버전이고기본적인 Scala 인터프리터는 외부 라이브러리를 직접 가져오는(import) 걸 지원하지 않는데, Ammonite는 이걸 지원한다.즉, Ammonite에서는 쉽게 외부 패키지를 가져다 쓸 수 있다는 말이다.Ammonite는 Scala 코드를 빠르게 테스트하고 외부 패키지를 쉽게 가져올 수 있게 도와주는 강력한 도구다. https://ammonite.io/..
-
Parser란?컴공지식/프로그래밍언어론 2024. 9. 7. 14:56
Parser는 인터프리터나 컴파일러의 일부다.프로그램(코드)을 분석해서 이게 뭔지 파악하고, 그 구체적인 문법(Concrete Syntax)을 추상 문법(Abstract Syntax) 으로 변환해 주는 역할을 한다. 구체적 문법(Concrete Syntax)이 뭔지 다시 간단하게 정리를 해보자면예를 들어, x + 1 같은 코드가 구체적 문법이다. 추상 문법(Abstract Syntax)는 x + 1이라는 코드를 Add(Var("x"), Num(1)) 같은 구조로 변환하는 게 추상 문법으로 바꾸는 과정이다. 이 과정을 파싱이라고 한다.그래서 파서를 만들려면, 언어의 구체적 문법(Concrete Syntax)에 대한 명확한 명세(specification)가 필요하다.바로 BNF를 이용하여 명세하는 것이다...