본문 바로가기

프로그래밍 언어24

2019년 2월 프로그래밍 언어 순위 및 비교 TIOBE Index for June 2018 TIOBE programming language index는 해당 프로그래밍 언어를 이용하는 엔지니어 및 업체의 수와 Google, Bing, Yahoo 등의 검색 엔진을 통해 검색되는 결과물의 수를 바탕으로 순위를 결정한다. 따라서 TIOBE index에서는 C/C++이나 Java와 같은 전통적인 프로그래밍 언어의 순위가 높게 산정되는 경향이 있다. 그림 1. 2019년 2월 TIOBE 프로그래밍 언어 순위 (출처: TIOBE). Top 5 프로그래밍 언어 2018년도까지만해도 Java와 C, C++, Python, C#은 최근 3년간 가장 인기 있는 프로그래밍 언어로 선정되었으며, 5개의 프로그래밍 언어의 rating을 합치면 약 50%에 해당하는 수치를.. 2019. 2. 16.
2018년 12월 최신 프로그래밍 언어 순위 TIOBE Index for December 2018 TIOBE programming language index는 해당 프로그래밍 언어를 이용하는 엔지니어 및 업체의 수와 Google, Bing, Yahoo 등의 검색 엔진을 통해 검색되는 결과물의 수를 바탕으로 순위를 결정한다. 따라서 TIOBE index에서는 JavaScript와 같은 가벼운 프로그래밍 언어보다는 C/C++이나 Java와 같이 전통적인 프로그래밍 언어의 순위가 높게 산정되는 경향이 있다. [그림 1] TIOBE programming language index (출처: TIOBE) Top 5 Programming languages 가장 특이한 점은 C# 대신 Visual Basic .NET이 top 5 프로그래밍 언어에 올라갔다는 것이.. 2018. 12. 23.
2018년 6월 최신 프로그래밍 언어 순위 TIOBE Index for June 2018 TIOBE programming language index는 해당 프로그래밍 언어를 이용하는 엔지니어 및 업체의 수와 Google, Bing, Yahoo 등의 검색 엔진을 통해 검색되는 결과물의 수를 바탕으로 순위를 결정한다. 따라서 TIOBE index는 C/C++이나 Java와 같이 전통적인 프로그래밍 언어의 순위가 높게 산정하는 경향이 있다. [그림 1] TIOBE programming language index (출처: TIOBE) Top 5 Programming languagesJava와 C, C++, Python, C#은 최근 3년간 꾸준히 가장 인기 있는 프로그래밍 언어로 선정되고 있다. 5개의 프로그래밍 언어의 ratings를 합치면 약 50%.. 2018. 6. 18.
2018년 프로그래밍 언어 순위 및 비교 TIOBE Index for April 2018 TIOBE programming language index는 해당 프로그래밍 언어를 이용하는 엔지니어 및 업체의 수와 Google, Bing, Yahoo 등의 검색 엔진을 통해 검색되는 결과물의 수를 바탕으로 순위를 결정한다. 따라서 TIOBE index는 C/C++이나 Java와 같이 전통적인 프로그래밍 언어의 순위를 높게 산정하는 경향이 있다. [그림 1] TIOBE programming language index (출처: TIOBE) RedMonk Programming Language Rankings for January 2018 RedMonk Programming Language Ranking은 GitHub에서 해당 프로그래밍 언어로 작성된 소스 코.. 2018. 5. 1.
[컴파일러] - 구문 분석 (Syntax Analysis) III 1. 상향식 파싱 (bottom-up parsing) 상향식 파싱은 트리의 가장 아래쪽에 위치한 leaf node에서 시작하여 트리의 최상단인 root node쪽으로 진행하면서 파싱을 수행하는 방법이다 [그릠 1]. 상향식 파싱에는 이동-감축 파싱 (shift-reduce parsing)이라고 하는 상향식 파싱의 일반적인 유형이 있으며, 하향식 파싱을 위한 LL 문법과 같이 상향식 파싱을 위한 LR 문법이 있다. 상향식 파싱은 완성된 파스 트리 (parse tree)의 관점에서 볼 때, 가장 우측의 nonterminal 부터 유도 (derivation)가 이루어지기 때문에 입력 문자열에 대한 최우단 유도 (rightmost derivation)을 찾는 것과 같다. [그릠 1] 상향식 파싱 (bottom-.. 2016. 8. 21.
[컴파일러] - 구문 분석 (Syntax Analysis) II 1. 하향식 파싱 (Top-down parsing) 하향식 파싱은 root node에서 시작하여 파스 트리의 노드들을 전위 순서 (preorder)에 따라 생성하는 것이다 [그림 1]. 따라서, 하향식 파싱은 항상 문자열의 가장 왼쪽 nonterminal부터 유도가 이루어지기 때문에 하향식 파싱은 입력 문자열에 대한 최좌단 유도 (leftmost derivation)을 찾는 것과 같다. [그림 1] 하향식 파싱 (top-down parsing)을 통한 파스 트리 (parse tree)의 생성 하향식 파싱에는 가장 일반적인 형태인 재귀적 하강 파싱 (recursive descent parsing)과 재귀가 필요없는 예측 파싱 (predict parsing) 등이 있다. 2, 재귀적 하강 파싱 (Recurs.. 2016. 8. 21.
[컴파일러] - 구문 분석 (Syntax Analysis) I 1. 개요 컴파일러에서는 구문 분석을 수행하는 모듈을 파서 (parser)라고 한다. 파서는 어휘 분석기에서 생성한 토큰 스트림이 생성 가능한 것인지를 판별하고, 토큰 스트림으로부터 파스 트리 (parse tree)를 생성한다.파서의 일반적인 유형으로는 보편적 (universal), 하향식 (top-down), 상향식 (bottom-up)이 있다. 보편적 파싱 방법은 어떠한 문법도 파싱할 수 있지만, 파싱 과정이 매우 비효율적이기 때문에 상용 컴파일러에는 적용될 수 없다. 따라서, 컴파일러에서는 하향식과 상향식 파서가 이용되며, 주로 상향식 파서가 많이 이용된다. 2. 문맥 자유 문법 (Context-free grammar, CFG) 우리가 영어 문장에서 문법적 오류를 검출하기 위해서는 영어 문법을 이해.. 2016. 8. 20.
2016년 1~2월 프로그래밍 언어 순위 및 순위표별 특징 TIOBETIOBE Programming Language Ranking은 전 세계의 프로그래머, 프로그래밍 강좌, 프로그래밍 그룹 수와 Google, Bing, Yahoo, Wikipedia, Amazon, YouTube와 같은 검색 엔진을 통해 검색되는 프로그래밍 언어의 종류를 분석하여 프로그래밍 언어 순위를 결정한다. 프로그래머, 프로그래밍 강좌, 프로그래밍 그룹 수를 순위에 반영하기 때문에 현재 주류를 이루고 있고, 프로그래밍 입문자가 가장 먼저 접하는 C/C++, Java와 같은 전통적인 프로그래밍 언어의 순위가 높게 랭크되는 경향이 있다. [2016년 2월 TIOBE 프로그래밍 언어 순위, 출처 : TIOBE] RedMonkRedMonk Programming Language Ranking은 Gi.. 2016. 2. 23.
[컴파일러] - 어휘 분석 (Lexical analysis) III 1. 개요 이전 글에서 서술한 어휘 분석의 토큰, 정규식, 정규문법 등의 개념을 이용하여 실제로 실행이 가능한 어휘 분석기를 구현하는 과정을 설명한다. C나 Java와 같은 프로그래밍 언어를 이용하여 직접 어휘 분석기를 구현한다면 파일입출력, 문자열 처리, 정규식과 정규문법의 구현 등 실질적으로는 컴파일러와 관련이 없는 프로그래밍 작업이 어휘 분석기 구현의 대부분을 이루게 될 것이다. 그래서 이 글에서는 "Flex"라는 오픈소스 툴을 이용하여 간단하게 어휘 분석기를 구현하는 방법을 설명한다. Flex는 어휘 분석기 툴로 가장 유명한 Lex의 최신 버전이다. 2. Flex 설치 Flex는 GNU General Public License로 공개된 소프트웨어로써, 별도의 라이센스 구입 없이 이용할 수 있다. .. 2016. 1. 25.
[컴파일러] - 어휘 분석 (Lexical analysis) II 1. 토큰(token) 언어 이론에서 알파벳 (alphabet)은 a, b, 1, 2, /와 같은 기호의 유한 집합이다. 알파벳에 속한 기호들의 유한한 나열을 스트링 (string) 또는 단어 (word)라고 한다. 어떠한 알파벳이 a, b, c를 포함한다면, abc는 이 알파벳으로 만들 수 있는 스트링이 된다. 그러나 만약 어떠한 알파벳이 a, b로 구성된다면 abc는 이 알파벳으로 만들 수 있는 스트링이 아니다.어떠한 스트링 $s$에 대해 $s$의 절댓값 $|s|$는 스트링에 나열된 기호의 수이며, 이를 스트링의 길이라고 한다. 예를 들어, 스트링 "lexical"의 길이는 7이 된다. 언어 이론에서는 길이가 0인 스트링도 존재하는데, 이를 empty string이라고 한다.언어 (language)는.. 2016. 1. 19.
[컴파일러] - 어휘 분석 (Lexical analysis) I 1. 개요 컴파일러의 첫 번째 단계는 소스 코드를 정규 문법 (regular grammar)에 따라 토큰 (token)으로 분류하는 어휘 분석 또는 스캐닝 (scanning)이다. 예를 들어, "Lexical analysis is the first step of compiler"라는 문장에서 'L', 'e', 'x', 'i', 'c', 'a', 'l'을 따로 놓으면 어떠한 의미도 없지만, "Lexical"이라는 하나의 조각으로 보면 의미를 갖게 된다. 어휘 분석 단계에서 검출되는 의미 있는 조각을 어휘항목 (lexeme)이라고 하며, 어휘 분석기는 소스 코드에서 이러한 어휘항목을 검출하여 토큰을 생성한다. 2. 용어 정의 어휘 분석에서 사용하는 용어를 정의한다. 그러나 용어의 정의만으로는 용어가 갖는 의.. 2016. 1. 18.
[컴파일러] - 컴파일러의 구조 1. 개요 컴퓨터에서 실행되는 모든 소프트웨어는 프로그래밍 언어로 작성된다. 그러나 프로그래밍 언어는 인간이 이해할 수 있는 수준의 언어로써, 기계어를 사용하는 컴퓨터는 이해할 수 없는 언어이다. 따라서 프로그래밍 언어로 작성된 프로그램은 컴퓨터에서 실행되기 위해 일정한 규칙에 따라 기계어의 형태로 번역되어야 하는데, 이러한 번역을 수행하는 시스템 소프트웨어를 컴파일러 (compiler)라고 한다. 예를 들어, 한국어를 모국어로 사용하는 사람이 영어로 작성된 글을 읽기 위해서는 영어를 한국어로 번역해야 한다. 이러한 상황에서 영어는 프로그래밍 언어이고, 한국어를 모국어로 사용하는 사람은 컴퓨터이며 한국어는 기계어이다. 그리고 영어를 한국어로 번역해주는 사람이나 소프트웨어는 컴파일러가 된다. 2. 컴파일러.. 2016. 1. 17.