KR101985309B1 - 최적화된 높이를 가지는 밸런스드 파스 트리를 생성하는 방법 - Google Patents

최적화된 높이를 가지는 밸런스드 파스 트리를 생성하는 방법 Download PDF

Info

Publication number
KR101985309B1
KR101985309B1 KR1020170073401A KR20170073401A KR101985309B1 KR 101985309 B1 KR101985309 B1 KR 101985309B1 KR 1020170073401 A KR1020170073401 A KR 1020170073401A KR 20170073401 A KR20170073401 A KR 20170073401A KR 101985309 B1 KR101985309 B1 KR 101985309B1
Authority
KR
South Korea
Prior art keywords
node
tree
parse tree
ary
generating
Prior art date
Application number
KR1020170073401A
Other languages
English (en)
Other versions
KR20180135528A (ko
Inventor
전보성
정성희
Original Assignee
주식회사 티맥스데이터
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by 주식회사 티맥스데이터 filed Critical 주식회사 티맥스데이터
Priority to KR1020170073401A priority Critical patent/KR101985309B1/ko
Priority to US15/659,552 priority patent/US10416971B2/en
Publication of KR20180135528A publication Critical patent/KR20180135528A/ko
Application granted granted Critical
Publication of KR101985309B1 publication Critical patent/KR101985309B1/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/42Syntactic analysis
    • G06F8/427Parsing

Abstract

인코딩된 명령들을 포함하는 컴퓨터 판독 가능 저장 매체에 저장된 컴퓨터 프로그램으로서, 상기 컴퓨터 프로그램은 컴퓨터 시스템의 하나 이상의 프로세서들에 의해 실행되는 경우, 상기 하나 이상의 프로세서들로 하여금 최적화된 높이를 가지는 밸런스드 파스 트리를 생성하기 위한 이하의 단계들을 수행하도록 하며, 상기 단계들은: 적어도 하나의 토큰(token)을 포함하는 토큰열을 수신하는 단계-상기 토큰열은 결합법칙을 만족함-; n-ary 파스 트리(n-ary parse tree)가 풀(full)인지 여부를 결정하는 단계-상기 n-ary 파스 트리는 적어도 하나의 노드(node)를 포함하고, 상기 적어도 하나의 노드는 각각 n개 이하의 자식 노드(child node)를 포함함-; 상기 n-ary 파스 트리가 풀인 경우에, 상기 토큰열에 기초하여 상기 파스 트리의 높이를 증가시키면서 노드를 생성하는 제 1 노드 생성 단계; 및 상기 n-ary 파스 트리가 풀이 아닌 경우에, 상기 토큰열에 기초하여 상기 파스 트리의 높이를 유지하면서 노드를 생성하는 제 2 노드 생성 단계; 를 포함하는, 컴퓨터 판독가능 저장 매체에 저장된 컴퓨터 프로그램을 제공할 수 있다.

Description

최적화된 높이를 가지는 밸런스드 파스 트리를 생성하는 방법{METHOD OF CREATING THE BALANCED PARSE TREE HAVING OPTIMIZED HEIGHT}
본 발명은 컴파일러에 관한 것으로, 보다 구체적으로 컴파일러 파싱(parsing) 과정에서 파스 트리(parse tree)를 생성하는 방법에 관한 것이다.
컴퓨터에서 특정한 연산을 수행하거나 원하는 결과를 얻기 위한 연산 과정을 서술하기 위하여, 사용자는 “프로그래밍 언어”로 프로그램을 작성하고 실행하여야 한다.
컴퓨터 언어로 작성된 프로그램을 실행하기 전에, 실행하고자 하는 프로그램을 컴퓨터 시스템에 정의된 명령어로 변환하여야 하며, 이때 컴파일러가 변환과정을 수행한다.
컴파일러는 실행할 프로그램을 입력받아, 출력으로 동일한 목적을 가진 다른 형태의 프로그램을 생성한다. 이 과정에서, 컴파일러는 입력된 프로그램의 오류를 찾고 의미있는 에러 메시지를 출력하기도 한다.
컴파일러는 소스 프로그램에 어떤 단어들이 포함되어 있는지 확인한다. 여기서 의미있는 단어는 토큰이라고 한다. 결국 소스 프로그램을 목적 프로그램으로 번역하기 위해 첫번 째로 해야할 일은 소스 프로그램에서 어떤 토큰이 사용되었는지 구분 하는 것이다. 컴파일러에서는 이를 어휘 분석이라 한다.
두번 째로는, 이러한 단어가 문장의 구성 요소 가운데 어디에 맞는지 확인해야 한다. 즉 문법을 보면서 토큰들이 문법에 맞는지 검사하는데, 컴파일러에서는 이를 구문 분석이라 한다. 컴파일러에서는 이를 구문 분석이라 한다.
세 번째로는 단어의 의미를 검사하는 것, 즉 의미 분석을 한다. 하지만 형식 언어는 의미를 가지고 있지 않기 때문에 이 과정에서 주로 타입(type)을 검사한다. 의미 분석으로 생성된 코드의 실행 시간을 줄이거나 메모리를 줄이기 위한 코드 최적화를 하고, 마지막으로 목적 기계(target machine)의 특성을 고려하여 목적 프로그램을 생성한다.
컴파일러의 논리적 구조를 설명하는 방법은 많지만, 주로 전단부(front-end)와 후단부(back-end)로 나누어 설명한다. 전단부는 목적 기계에 독립적인 부분으로 목적 기계에 관계없이 소스 프로그램을 분석하고 중간 코드를 생성하며, 후단부는 목적 기계에 의존적인 부분으로 전단부에서 생성한 중간 코드를 특정 기계에 대한 목적 코드로 번역한다.
더 세분하면, 컴파일러는 소스 프로그램을 한 표현에서 다른 표현으로 변환하는 각 단계(컴퓨터에서 소스 프로그램의 어떤 표현을 다른 표현으로 변환하는 것)에 의해 동작한다. 컴파일러의 몇 개의 단계를 묶어서 패스(pass)라고 하는데, 하나의 패스는 한 번 읽어서(scanning) 출력을 발생시키는 것을 의미한다. 컴파일러의 각 단계를 전단부와 후단부로 2개의 패스로 나누면, 2-패스 컴파일러가 된다.
컴파일러는 구문 분석 과정에서 결합법칙이 보장되는 연쇄적인 단일 연산을 표현하는데 있어서 바이너리 트리(binary tree)를 사용하는 것이 일반적이다. 이 경우에 트리가 균형있게 생성되지 못하고 어느 한쪽으로 치우치는(skew) 문제점이 발생한다. 이러한 트리를 스큐드 트리(skewed tree)라고 한다. 스큐드 트리는 스택(stack) 메모리 사용량을 증가시키고 컴파일 시간을 증가시키는 문제점 등이 있다.
본 개시 내용은, 컴파일러 파싱 과정에서 최적화된 높이를 가지는 밸런스드 파스 트리를 제공하기 위한 기술적 특징들을 제시하고자 한다.
본 개시 내용의 예시적인 일 실시예에 따라, 인코딩된 명령들을 포함하는 컴퓨터 판독 가능 저장 매체에 저장된 컴퓨터 프로그램으로서, 상기 컴퓨터 프로그램은 컴퓨터 시스템의 하나 이상의 프로세서들에 의해 실행되는 경우, 상기 하나 이상의 프로세서들로 하여금 파싱(parsing)을 위한 이하의 단계들을 수행하도록 하며, 상기 단계들은: 적어도 하나의 토큰(token)을 포함하는 토큰열을 수신하는 단계; n-ary 파스 트리(n-ary parse tree)가 풀(full)인지 여부를 결정하는 단계-상기 n-ary 파스 트리는 적어도 하나의 노드(node)를 포함하고, 상기 적어도 하나의 노드는 각각 n개 이하의 자식 노드(child node)를 포함함-; 상기 n-ary 파스 트리가 풀인 경우에, 상기 토큰열에 기초하여 상기 파스 트리의 높이를 증가시키면서 노드를 생성하는 제 1 노드 생성 단계; 및 상기 n-ary 파스 트리가 풀이 아닌 경우에, 상기 토큰열에 기초하여 상기 파스 트리의 높이를 유지하면서 노드를 생성하는 제 2 노드 생성 단계; 를 포함하는, 컴퓨터 판독가능 저장 매체에 저장된 컴퓨터 프로그램을 제공 할 수 있다.
본 개시 내용의 예시적인 다른 실시예에 따라, 컴퓨팅 장치의 하나 이상의 프로세서에서 수행되는 파싱 방법으로서, 적어도 하나의 토큰을 포함하는 토큰열을 수신하는 단계; n-ary 파스 트리가 풀인지 여부를 결정하는 단계-상기 n-ary 파스 트리는 적어도 하나의 노드를 포함하고, 상기 노드는 n개 이하의 자식 노드를 포함함-; 상기 n-ary 파스 트리가 풀인 경우에, 상기 토큰열에 기초하여 상기 파스 트리의 높이를 증가시키면서 노드를 생성하는 제 1 노드 생성 단계; 및 상기 n-ary 파스 트리가 풀이 아닌 경우에, 상기 토큰열에 기초하여 상기 파스 트리의 높이를 유지하면서 노드를 생성하는 제 2 노드 생성 단계; 를 포함하는, 컴퓨팅 장치의 하나 이상의 프로세서에서 수행되는 파싱 방법을 제공할 수 있다.
본 개시 내용의 예시적인 또 다른 실시예에 따라, 컴퓨팅 장치로서, 하나 이상의 프로세서; 및 상기 하나 이상의 프로세서에서 실행가능한 명령들을 저장하는 메모리; 를 포함하고, 상기 하나 이상의 프로세서는, 적어도 하나의 토큰을 포함하는 토큰열을 수신하는 단계; n-ary 파스 트리가 풀인지 여부를 판단하는 단계-상기 n-ary 파스 트리는 적어도 하나의 노드를 포함하고, 상기 노드는 n개 이하의 자식 노드를 포함함-상기 n-ary 파스 트리가 풀인 경우에, 상기 토큰열에 기초하여 상기 파스 트리의 높이를 증가시키면서 노드를 생성하는 제 1 노드 생성 단계; 및 상기 n-ary 파스 트리가 풀이 아닌 경우에, 상기 토큰열에 기초하여 상기 파스 트리의 높이를 유지하면서 노드를 생성하는 제 2 노드 생성 단계; 컴퓨팅 장치를 제공할 수 있다.
본 개시된 내용에 의해 생성되는 최적화된 높이를 가지는 밸런스드 파스 트리는 컴파일 파싱 과정에서 스택 메모리의 사용량을 감소시키고 컴파일 시간을 단축시킬 수 있다.
다양한 양상들이 이제 도면들을 참조로 기재되며, 여기서 유사한 참조 번호들은 총괄적으로 유사한 구성요소들을 지칭하는데 이용된다. 이하의 실시예에서, 설명 목적을 위해, 다수의 특정 세부사항들이 하나 이상의 양상들의 총체적 이해를 제공하기 위해 제시된다. 그러나, 그러한 양상(들)이 이러한 특정 세부사항들 없이 실시될 수 있음은 명백할 것이다. 다른 예시들에서, 공지의 구조들 및 장치들이 하나 이상의 양상들의 기재를 용이하게 하기 위해 블록도 형태로 도시된다.
도 1은 본 발명의 일 실시예에 따른, 예시적인 컴파일러의 구조를 설명하기 위한 도면이다.
도 2는 스큐드 트리를 설명하기 위한 도면이다.
도 3은 본 발명의 일 실시예에 따른, 최적화된 높이를 가지는 밸런스드 파스 트리(balanced parse tree)를 설명하기 위한 도면이다.
도 4는 본 발명의 일 실시예에 따른, 최적화된 높이를 가지는 밸런스드 파스 트리를 생성하기 위한 단계를 설명하기 위한 도면이다.
도 5는 본 발명의 일 실시예에 따른, 파스 트리가 풀인지 여부를 판단하는 단계를 설명하기 위한 도면이다.
도 6은 본 발명의 일 실시예에 따른, 제 1 노드 생성 단계를 설명하기 위한 도면이다.
도 7은 본 발명의 일 실시예에 따른, 탑-트리 노드가 바이너리 노드이고 탑-트리 노드를 제외한 각각의 부모 노드가 n개의 자식 노드를 가지는 경우에 제 2 노드 생성 단계를 설명하기 위한 도면이다.
도 8은 본 발명의 일 실시예에 따른, 탑-트리 노드가 바이너리 노드이고 n개 미만의 자식 노드를 가지는 부모 노드가 존재하는 경우에 제 2 노드 생성 단계를 설명하기 위한 도면이다.
도 9는 본 발명의 일 실시예에 따른, 탑-트리 노드가 n-ary 노드인 경우에 제 2 노드 생성 단계를 설명하기 위한 도면이다.
도 10은 본 개시내용의 일 실시예에 따라 밸런스드 파스 트리를 생성하기 위한 방법을 구현하기 위한 예시적인 컴퓨팅 장치에 대한 블록도를 도시한다.
다양한 실시예들 및/또는 양상들이 이제 도면들을 참조하여 개시된다. 하기 설명에서는 설명을 목적으로, 하나 이상의 양상들의 전반적 이해를 돕기 위해 다수의 구체적인 세부사항들이 개시된다. 그러나, 이러한 양상(들)은 이러한 구체적인 세부사항들 없이도 실행될 수 있다는 점 또한 본 발명의 기술 분야에서 통상의 지식을 가진 자에게 인식될 수 있을 것이다. 이후의 기재 및 첨부된 도면들은 하나 이상의 양상들의 특정한 예시적인 양상들을 상세하게 기술한다. 하지만, 이러한 양상들은 예시적인 것이고 다양한 양상들의 원리들에서의 다양한 방법들 중 일부가 이용될 수 있으며, 기술되는 설명들은 그러한 양상들 및 그들의 균등물들을 모두 포함하고자 하는 의도이다.
또한, 다양한 양상들 및 특징들이 다수의 디바이스들, 컴포넌트들 및/또는 모듈들 등을 포함할 수 있는 시스템에 의하여 제시될 것이다. 다양한 시스템들이, 추가적인 장치들, 컴포넌트들 및/또는 모듈들 등을 포함할 수 있다는 점 그리고/또는 도면들과 관련하여 논의된 장치들, 컴포넌트들, 모듈들 등 전부를 포함하지 않을 수도 있다는 점 또한 이해되고 인식되어야 한다.
본 명세서에서 사용되는 "실시예", "예", "양상", "예시" 등은 기술되는 임의의 양상 또는 설계가 다른 양상 또는 설계들보다 양호하다거나, 이점이 있는 것으로 해석되지 않을 수도 있다. 아래에서 사용되는 용어들 '컴포넌트', '모듈', '시스템', '인터페이스' 등은 일반적으로 컴퓨터 관련 엔티티(computer-related entity)를 의미하며, 예를 들어, 하드웨어, 하드웨어와 소프트웨어의 조합, 및 소프트웨어를 의미할 수 있다.
더불어, 용어 "또는"은 배타적 "또는"이 아니라 내포적 "또는"을 의미하는 것으로 의도된다. 즉, 달리 특정되지 않거나 문맥상 명확하지 않은 경우에, "X는 A 또는 B를 이용한다"는 자연적인 내포적 치환 중 하나를 의미하는 것으로 의도된다. 즉, X가 A를 이용하거나; X가 B를 이용하거나; 또는 X가 A 및 B 모두를 이용하는 경우, "X는 A 또는 B를 이용한다"가 이들 경우들 어느 것으로도 적용될 수 있다. 또한, 본 명세서에 사용된 "및/또는"이라는 용어는 열거된 관련 아이템들 중 하나 이상의 아이템의 가능한 모든 조합을 지칭하고 포함하는 것으로 이해되어야 한다.
또한, "포함한다" 및/또는 "포함하는"이라는 용어는, 해당 특징 및/또는 구성요소가 존재함을 의미하지만, 하나 이상의 다른 특징, 구성요소 및/또는 이들의 그룹의 존재 또는 추가를 배제하지 않는 것으로 이해되어야 한다. 또한, 달리 특정되지 않거나 단수 형태를 지시하는 것으로 문맥상 명확하지 않은 경우에, 본 명세서와 청구범위에서 단수는 일반적으로 "하나 또는 그 이상"을 의미하는 것으로 해석되어야 한다.
본 명세서에서의 컴퓨터 판독 가능 저장 매체는 컴퓨터 시스템에 의해서 판독될 수 있도록 프로그램 및 데이터가 저장되는 모든 종류의 저장 매체를 포함할 수 있다. 본 발명의 일 양상에 따르면, 이러한 매체는 ROM(판독 전용 메모리), RAM(랜덤 액세스 메모리), CD(컴팩트 디스크)-ROM, DVD(디지털 비디오 디스크)-ROM, 자기 테이프, 플로피 디스크, 광 데이터 저장장치 등을 포함할 수 있다. 추가적으로, 이러한 매체는 네트워크로 연결된 시스템에 분산되어, 분산 방식으로 컴퓨터가 판독 가능한 코드들 및/또는 명령들을 저장할 수도 있다.
본 발명의 실시를 위한 구체적인 내용을 설명하기에 앞서, 본 발명의 기술적 요지와 직접적 관련이 없는 구성에 대해서는 본 발명의 기술적 요지를 흩뜨리지 않는 범위 내에서 생략하였음에 유의하여야 할 것이다. 또한, 본 명세서 및 청구범위에 사용된 용어 또는 단어는 발명자가 자신의 발명을 최선의 방법으로 설명하기 위해 적절한 용어의 개념을 정의할 수 있다는 원칙에 입각하여 본 발명의 기술적 사상에 부합하는 의미와 개념으로 해석되어야 할 것이다.
도 1은 본 발명의 일 실시예에 따른, 예시적인 컴파일러 모듈(1000)의 구조를 설명하기 위한 도면이다.
컴파일러 모듈(1000)의 논리적 구조는 크게 전단부(100) 및 후단부(200)로 구분할 수 있다. 더 자세히는, 도 1에 도시되는 바와 같이 여섯 부로 나눌 수 있다.
전단부(100)는 어휘 분석부(110), 구문 분석부(120), 의미 분석부(130) 및 중간 코드 생성부(140)를 포함할 수 있다. 후단부(200)는 코드 최적화부(210) 및 목적 코드 생성부(220)를 포함할 수 있다.
전단부(100)는 목적 기계에 독립적인 부분으로 목적 기계에 관계없이 소스 프로그램을 분석하고 중간 코드를 생성할 수 있다. 후단부는 목적 기계에 의존적인 부분으로 전단부에서 생성한 중간 코드를 특정 기계에 대한 목적 코드로 번역할 수 있다.
도시되어 있지 않지만, 기호표(symbol table) 관리부와 에러 처리(error hander)부는 여섯 부 모두와 상호 작용할 수 있다.
다만 이러한 컴파일러의 논리적 구조는 예시적인 것으로, 실시예에 따라 일부 구성이 생략되거나 새로운 구성이 추가 될 수 있다.
컴파일러 모듈(1000)의 첫 번째 단계는 어휘 분석(lexical analysis) 또는 스캐닝(scanning)이라 한다. 어휘 분석이란 소스 프로그램을 읽어들여 토큰이라는 의미 있는 문법적 단위로 분리하고 토큰열(token stream)을 생성하는 것이다. 이러한 어휘 분석을 담당하는 도구는 어휘 분석부(110)(lexical analyzer) 또는 스캐너(scanner)라고 한다.
컴파일러 모듈(1000)의 두 번째 단계는 구문 분석(syntax analysis) 또는 파싱(parsing)이라 한다. 이 단계는 어휘 분석 단계의 결과인 토큰열을 입력받아 주어진 문법에 맞는지 검사한다. 주어진 문법에 맞는 문장의 경우에 그 문장에 대한 파스 트리(parsing tree)가 출력된다. 올바르지 않은 문장의 경우 에러 메시지가 출력된다. 이처럼 구문 분석을 담당하는 도구는 구문 분석부(120)(syntax analyzer) 또는 파서(parser)라고 한다.
일반적으로 파스 트리는 터미널 노드(terminal node)로 토큰을 포함할 수 있다. 파스 트리는 중간 코드 생성 단계에서 입력으로 이용될 수 있다. 일반적으로 파스 트리는 다음 단계에서 사용하지 않는 불필요한 정보인 논터미널 기호를 가지고 있으므로 기억 공간을 낭비하고 컴파일 시간을 증가시키는 요인이 된다. 따라서 이 단계에서는 이러한 불필요한 정보를 제거하고 다음 단계에서 꼭 필요한 정보만으로 구성된 트리를 생성할 수 있다. 이러한 트리는 추상 구문 트리(abstract syntax tree) 혹은 간단히 구문 트리(syntax tree)라고 한다.
구문 트리는 연산자를 내부 노드에 나타내고, 그 연산자에 대한 피연산자를 연산자의 자식 노드(children node)에 나타내는 구조를 가진 파스 트리의 축약된 형태이다.
컴파일러 모듈(1000)의 세 번째 단계는 의미 분석(semantic anlysis)이라 한다. 이 단계는 구문 트리와 기호표에 있는 정보를 이용하여 소스 프로그램이 언어 정의에 의미적으로 일치하는지를 검사한다. 그리고 이 단계는 다음 단계인 중간 코드 생성에 이용하기 위해 자료형 정보를 수집하여 구문 트리나 기호표에 저장한다. 이와 같은 일을 담당하는 도구는 의미 분석부(130)(semantic anlyzer)라고 한다.
컴파일러 모듈(1000)의 네 번째 단계는 중간 코드 생성(intermediate code generation)이라 한다. 중간 코드 생성 단계에서는 구문 트리를 이용하여 각 구문에 해당하는 중간 코드를 생성하거나 구문 지시적 번역(syntax-directed translation)이 이루어 진다. 구문 지시적 번역은 문법 규칙이 감축되는 경우에 그 규칙에 알맞은 코드 생성 루틴을 호출함으로써 중간 코드를 생성하는 것이다. 이러한 중간 코드 생성을 담당하는 도구는 중간 코드 생성부(140)(intermediate code generator)라고 한다.
컴파일러의 다섯 번째 단계는 코드 최적화(code optimization)라 한다. 코드 최적화 단계는 주어진 입력 프로그램과 의미적으로 동등하면서 좀 더 효율적인 코드를 생성한다. 따라서 이 단계는 코드를 실행하는 경우에 기억 공간이나 실행시간을 절약하기 위한 단계이다. 이러한 코드 최적화를 담당하는 도구는 코드 최적화부(210)라고 한다.
컴파일러의 마지막 단계는 목적 코드 생성(object code generation)이라고 한다. 목적 코드 생성 단계는 연산을 수행할 레지스터를 선택하거나 데이터의 메모리 위치를 정해주며, 실제로 목적 기계에 맞는 코드를 생성한다. 이러한 목적 코드 생성을 담당하는 도구는 목적 코드 생성부(220)(object code generator)라 한다.
컴파일러 모듈(1000)는 소스 프로그램에 나타난 모든 데이터에 대한 정보를 가지고 있어야 한다. 예를 들어, 컴파일러 모듈(1000)는 어떤 변수가 정수를 나타내는지 실수를 나타내는지, 배열의 크기가 얼마나 되는지, 함수의 매개변수가 몇 개 필요한지를 알아야 한다. 이와 같은 데이터에 관한 정보는 어휘 분석, 구문 분석 단계에서 수집되어 기호표에 저장된다.
또한 컴파일러 모듈(1000)는 소스 프로그램에서 에러를 발견하면 사용자에게 알려주어야 한다. 예를 들어, 어휘 분석 단계에서 소스 프로그램에서 사용할 수 없는 문자를 사용한다거나, 구분 분석 단계에서 괄호가 빠지는 것과 같은 문법 규칙의 에러가 발생할 수 있다. 컴파일러 모듈(1000)는 이와 같은 에러를 처리해주는 에러 처리 루틴(error handling routine)을 가질 수 있다.
데이터 베이스 서버에서 사용되는 컴파일러로서 어플리케이션 컴파일러 (application compiler)는 클라이언트로부터 발행된 쿼리를 수신하는 것에 응답하여, 쿼리에 대한 구문을 체크할 수 있으며, 파스 트리를 생성할 수 있으며, 추상 구문 트리를 생성할 수 있으며, 그리고 구문을 확인할 수 있다. 여기서, 상기 쿼리는 ESQL, PL/SQL 등과 같은 언어를 사용하는 애플리케이션 프로그램 또는 C, C++, Java DB Client Library 등을 사용하는 애플리케이션 프로그램에서 사용되는 SQL과 관련된 임의의 언어 표현을 포함할 수 있다.
데이터 베이스 서버에서 사용되는 컴파일러로서 SQL 컴파일러는 어플리케이션 컴파일러에 의해 수행된 컴파일링 동작, 쿼리 재기록 동작 및 실행 코드 생성 동작에 따라 수신된 재기록되어 변환된 쿼리의 힌트 정보를 기초로 하여, 수신된 쿼리에 대해 최적화된 실행 플랜(optimized execution plan)을 결정할 수 있다.
본 개시된 내용은 데이터 베이스 서버에 사용되는 어플리케이션 컴파일러 및 SQL 컴파일러에도 사용될 수 있다.
컴파일러 파싱 과정에서는 주로 바이너리 트리(binary tree)가 사용된다. 바이너리 트리가 사용되는 경우에, 새로운 노드가 파스 트리의 어느 한 쪽으로만 생성되는 문제가 발생한다. 이러한 트리를 스큐드 트리라고 한다. 스큐드 트리는 컴파일 작업의 효율성을 감소시킨다. 따라서 컴파일 작업의 효율성 제고를 위해 최적화된 파스 트리를 생성하는 것이 중요하다.
본 개시 내용의 방법은 파스 트리가 풀인 경우에는 파스 트리의 높이를 증가시키면서 새로운 노드를 생성하고, 파스 트리가 풀이 아닌 경우에는 파스 트리의 높이를 유지하면서 새로운 노드를 생성할 수 있다. 따라서 본 발명에 의해 생성되는 파스 트리는 최적화된 높이를 가지는 밸런스드 파스 트리(balanced parse tree)일 수 있다. 따라서 컴파일 작업이 효율적으로 수행될 수 있다.
도 2는 스큐드 트리(skewed tree)를 설명하기 위한 도면이다.
도 2에서 그림 300은 토큰열의 한 예시를 나타낸다. 토큰이란 문법적으로 의미를 갖는 최소의 단위를 의미할 수 있다. 토큰은 일반 형태로 프로그래머에 의해 지정되는 명칭이나 상수들을 포함할 수 있다. 또한, 토큰은 특수 형태로 언어 설계자에 의해 지정 되는 키워드(keyword), 오퍼레이터(operator), 구분 기호(delimiter) 등을 포함할 수 있다.
컴파일러는 파싱 과정에서 결합법칙이 보장되는 연쇄적인 단일 연산을 표현하는데 있어서 바이너리 트리(binary tree)를 사용하는 것이 일반적이다. 이 경우에 트리가 균형있게 생성되지 못하고 어느 한쪽으로 치우치는(skew) 문제점이 발생한다. 이러한 트리는 스큐드 트리(skewed tree)라고 한다. 스큐드 트리는 스택 메모리 사용량을 증가시키고 컴파일 시간을 증가시키는 문제점 등이 있다.
도2에서 예시로 든 토큰열(300)은 9 개의 토큰 'a', '||', 'b', '||', 'c', '||', 'd', '||', 'e'으로 구성되어 있다. 이러한 토큰열은 바이너리 트리를 사용하는 파싱 과정에서 그림 310의 파스 트리로 변환될 수 있다. 그림 310의 파스 트리는 스큐드 트리의 한 예이다.
도 3은 본 발명의 일 실시예에 따른, 최적화된 높이를 가지는 밸런스드 파스 트리를 설명하기 위한 도면이다.
도 3의 그림 320은 동일한 토큰열(300)이 본 발명의 밸런스드 파스 트리를 생성하기 위한 방법를 통해 생성된 최적화된 높이를 가지는 밸런스드 파스 트리를 도시한다. 파스 트리의 높이가 그림 310의 스큐드 트리에 비해 감소한 것을 볼 수 있다.
본 발명에 의하면 파스 트리의 높이는 n에서 ceil(log(n))으로 최적화되며, 스택 메모리 사용량은 n/ceil(log(n))으로 감소한다. 또한 본 발명에 의하면 컴파일러 모듈(1000)는 이진 연산(binary operation) 대신 n-ary 연산(n-ary operation)으로 동작할 수 있어, 함수 호출 오버헤드(overhead)를 줄일 수 있다. 본 발명의 알고리즘은 대부분의 시스템에 큰 변화없이 적용될 수 있다.
도 4는 본 발명의 일 실시예에 따른, 최적화된 높이를 가지는 밸런스드 파스 트리(balanced parse tree)를 생성하기 위한 단계를 설명하기 위한 도면이다.
본 발명의 일 실시예에서, 본 발명의 밸런스드 파스 트리를 생성하기 위한 방법은 적어도 하나의 토큰(token)을 포함하는 토큰열을 수신하는 단계(400)를 포함할 수 있다.
구문 분석부(120)는 토큰열을 입력 받아 파스 트리를 출력할 수 있다. 즉, 구문 분석부(120)는 토큰열의 구문을 분석하여 파스 트리를 생성할 수 있다. 파스 트리는 유도 과정을 구조화한 트리를 의미할 수 있다.
파스 트리를 생성하는 과정에서 동일한 문자열이 두가지 이상의 유도 과정으로 생성될 수 있는 경우에, 이를 모호하다고 한다(ambiguous grammar). 모호함을 해결하기 위해서, 우선 순위(precedence)를 두는 방법이나 결합 순서(associativity)를 주는 방법 등이 사용된다.
다만, 모호함이 문제가 되지 않는 경우에 있으며, 이는 결합 법칙(associate law)이 성립하는 경우이다. 결합 법칙이란 세 수를 더하거나 곱할 때에, 앞의 두 수 또는 뒤의 두 수를 먼저 더하거나 곱하고 그 결과에 나머지 한 수를 더하거나 곱해도 결과는 같다는 법칙을 말한다. 예를 들어 '1+1+1'은 '(1+1)+1'이든 '1+(1+1)'이든 의미의 변화가 없다. 다른 예로, 's;s;s;'는 '(s;s);s'이든 's;(s;s)'이든 의미의 변화가 없다.
본 발명의 일 실시예에서, 본 발명의 밸런스드 파스 트리를 생성하기 위한 방법은 결합 법칙이 성립하는 토큰열에 대해서 적용될 수 있다. 따라서, 본 발명은 모호함이 문제되지 않는 경우에 적용될 수 있다. 다만 이에 한정되는 것은 아니다.
본 발명의 일 실시예에서, 본 발명의 밸런스드 파스 트리를 생성하기 위한 방법은 n-ary 파스 트리가 풀인지 여부를 판단하는 단계(410)를 포함할 수 있다.
본 발명의 일 실시예에서 n-ary 파스 트리란 파스 트리에 포함되는 각각의 노드(node)들이 n개 이하의 자식 노드(child node)를 가지는 것일 수 있다. 자식 노드란 트리 구조에서 현재 위치한 한 노드 아래에 종속되어 위치하는 노드일 수 있다. 다시 설명하면, 자식 노드란 어느 한 노드에 연결되어 있는 하위 노드일 수 있다.
파스 트리에 포함되는 노드에 대해 더 설명하면, 잎 노드는 자식 노드를 가지지 않는 노드일 수 있고, 탑-트리 노드는 트리 구조의 최상위 노드일 수 있다. 탑-트리 노드 또한 자식 노드를 가지므로 부모 노드일 수 있다. 노드의 뎁스란 탑-트리 노드에서 어느 한 노드까지의 최단 경로에 포함되는 노드의 수일 수 있다. 파스 트리가 풀인 경우에 모든 잎 노드의 뎁스는 동일할 수 있다. 다시 설명하면, 잎 노드의 뎁스는 탑-트리 노드에서 잎 노드까지의 최단 경로에 포함되는 노드의 수일 수 있다.
본 발명의 일 실시예에서, 파스 트리가 풀인 경우는 2가지 경우를 포함할 수 있다. 파스 트리가 풀이라는 것은 파스 트리가 높이를 증가시키지 않고는 노드를 생성할 수 없는 상태일 수 있다. 본 발명의 밸런스드 파스 트리를 생성하기 위한 방법은 파스 트리가 풀인 경우에 높이를 증가시키면서 노드를 생성할 수 있고, 풀이 아닌 경우에는 파스 트리의 높이를 증가시키지 않고 노드를 생성할 수 있다.
본 발명의 일 실시예에서, 파스 트리가 풀인지 여부를 판단하는 단계는 파스 트리에 포함되는 노드의 수가 1개인 경우에 파스 트리를 풀로 결정하는 단계를 포함할 수 있다.
자세히 설명하면, 파스 트리에 포함되는 노드가 1 개인 경우에 파스 트리가 풀로 결정될 수 있다. 다시 설명하면, 이는 토큰열로부터 토큰을 선택하여 노드를 처음 생성한 경우일 수 있다.
본 발명의 일 실시예에서, 파스 트리가 풀인지 판단하는 단계는 n-ary 파스 트리에 포함되는 각각의 부모 노드가 n개의 자식 노드를 가지는지 결정하는 단계 및 각각의 부모 노드가 n개의 자식 노드를 가지는 경우에 n-ary 파스 트리를 풀로 결정하는 단계를 포함할 수 있다.
본 발명의 일 실시예에서, 부모 노드는 어떤 하나의 노드에 대하여 이 노드의 상위에 연결된 노드일 수 있다. 다시 설명하면, 부모 노드는 적어도 하나의 자식 노드를 가지는 노드를 의미할 수 있다. 여기서 부모 노드가 모두 n개의 자식 노드를 가지는 경우에 트리 구조는 그림 320과 같이 어느 한쪽으로 치우치지 않고 균형있게 생성될 수 있다.
따라서 본 발명의 밸런스드 파스 트리를 생성하기 위한 방법은 파스 트리에 포함되는 모든 부모 노드가 n개의 자식 노드를 가지는 경우에 파스 트리의 높이를 증가시키므로, 파스 트리가 균형있는 구조로 생성될 수 있다.
본 발명의 일 실시예에서, 본 발명의 밸런스드 파스 트리를 생성하기 위한 방법은 n-ary 파스 트리가 풀인 경우에, 토큰열에 기초하여 파스 트리의 높이를 증가시키면서 노드를 생성하는 제 1 노드 생성 단계(420)를 포함할 수 있다.
자세히 설명하면, 본 발명의 밸런스드 파스 트리를 생성하기 위한 방법은 파스 트리가 풀인 경우에 높이를 증가시키면서 새로운 노드를 생성할 수 있다. 본 명세서에서 이 단계는 제 1 노드 생성 단계(420)로 지칭될 수 있다. 파스 트리가 풀인 경우는 상기한 2가지 경우를 포함할 수 있으며, 다만 두 경우에 대해 새로운 노드를 생성하는 단계는 다음과 같이 동일할 수 있다.
본 발명의 일 실시예에서, 제 1 노드 생성 단계(420)는 토큰열에 기초하여 탑-트리 노드를 생성하는 단계 및 탑-트리 노드를 바이너리 노드(binary node)로 결정하는 단계를 포함할 수 있다.
제 1 노드 생성 단계는 파스 트리가 풀인 상태에서 노드를 생성하는 단계일 수 있다. 수신된 토큰열에 기초한다는 것은 수신된 토큰열에서 다음 생성될 노드에 포함될 토큰을 선택하는 것일 수 있다. 예를 들어, 새로운 노드는 수신된 토큰열에 포함되는 적어도 하나의 토큰을 포함할 수 있다. 생성되는 노드에 어떠한 토큰을 포함시킬 것인지는 다양한 방식으로 수행될 수 있다.
제 1 노드 생성 단계(420)에서는 기존의 탑-트리 노드를 자식 노드로 하는 새로운 노드가 생성될 수 있다. 다시 설명하면, 새로운 노드는 기존의 탑-트리 노드를 자식 노드로 하는 노드일 수 있다. 또한 새로운 노드는 파스 트리의 탑-트리 노드가 될 수 있다. 따라서 파스 트리의 높이가 증가될 수 있다.
본 발명의 일 실시예에서, 제 1 노드 생성 단계(420)는 생성된 탑-트리 노드를 바이너리 노드(binary node)로 결정하는 단계를 포함할 수 있다.
제 1 노드 생성 단계에서 새로이 생성된 탑-트리 노드는 바이너리 노드로 결정될 수 있다. 따라서 이 경우에 탑-트리 노드는 2개의 자식 노드를 가질 수 있다.
본 발명의 일 실시예에서, 제 1 노드 생성 단계(420)는 탑-트리 노드가 생성되는 경우에, 토큰열에 기초하여 상기 탑-트리 노드에 연결되는 자식 노드를 생성하는 단계를 포함할 수 있다.
자세히 설명하면, 탑-트리 노드는 파스 트리가 풀인 경우에 파스 트리의 높이가 증가되면서 생성된다. 따라서 파스 트리가 균형 있게 생성되기 위해, 새로이 생성되는 노드는 탑-트리 노드에 연결되는 자식 노드로 생성되어야 한다. 따라서 새로운 탑-트리 노드가 생성되면, 이어서 탑-트리에 노드에 연결되는 자식 노드가 생성된다.
본 발명의 일 실시예에서, 본 발명의 밸런스드 파스 트리를 생성하기 위한 방법은 n-ary 파스 트리가 풀이 아닌 경우에 토큰열에 기초하여 파스 트리의 높이를 유지하면서 노드를 생성하는 제 2 노드 생성 단계(430)를 포함할 수 있다.
자세히 설명하면, 본 발명의 밸런스드 파스 트리를 생성하기 위한 방법은 n-ary 파스 트리가 풀이 아닌 경우에는 파스 트리의 높이를 유지하면서 노드를 생성할 수 있다. 새로운 노드는 n개 미만의 자식 노드를 가지는 노드들에 연결되도록 생성되며, 따라서 파스 트리가 균형있는 구조로 생성될 수 있다. 파스 트리가 풀인 경우와 달리, 파스 트리가 풀이 아닌 경우에는 그 유형에 따라 새로운 노드가 생성되는 방식이 다소 상이할 수 있다. 이 단계는 본 명세서에서 제 2 노드 생성 단계(430)로 지칭될 수 있고, 제 2 노드 생성 단계(430)는 다음과 같은 단계를 포함 할 수 있다.
본 발명의 일 실시예에서, 제 2 노드 생성 단계(430)는 탑-트리 노드가 바이너리 노드이고 부모 노드 각각이 n개의 자식 노드를 가지는 경우에, 상기 탑-트리 노드를 n-ary 노드로 결정하고 토큰열에 기초하여 상기 탑-트리 노드에 연결되는 자식 노드를 생성하는 단계를 포함할 수 있다. 여기서 부모 노드들에는 탑-트리 노드가 제외될 수 있다.
상기한 제 1 노드 생성 단계에서, 새롭게 생성되는 탑-트리 노드는 바이너리 노드로 결정된다. 따라서 탑-트리 노드는 2개의 자식 노드를 가질 수 있다. 다만 새로운 노드가 추가되면서 탑-트리 노드를 제외한 모든 부모 노드가 n개의 자식 노드를 가지는 경우에, 파스 트리의 높이를 유지하면서 노드를 생성하기 위해서 탑-트리 노드는 n-ary로 결정될 수 있다.
탑-트리 노드를 제외한 부모 노드 각각이 n개의 자식 노드를 가진다는 것은 파스 트리가 균형 있게 생성되었다는 것을 나타낸다. 이 경우에 파스 트리의 높이를 유지하면서 새로운 노드를 생성하기위해 새로운 노드는 탑-트리 노드에 연결되는 자식 노드로 생성되는 것이 필요하다. 따라서 제 2 생성 단계는 다음과 같은 단계를 포함할 수 있다.
바이너리 노드인 탑-트리 노드를 제외한 부모 노드 모두가 n개의 자식 노드를 가지는 경우에, 제 2 노드 생성 단계(430)는 탑-트리 노드를 n-ary 노드로 결정할 수 있다. 그리고 새로운 노드가 n-ary 노드로 결정된 탑-트리 노드에 연결되는 자식 노드로 생성될 수 있다. 이후에 생성되는 노드들은 탑-트리 노드에 연결된 하위 노드들이 각각 n-개의 노드를 가지도록 생성되고, 따라서 파스 트리는 균형있게 생성될 수 있다.
본 발명의 다른 일 실시예에서, 상기 제 2 노드 생성 단계는 탑-트리 노드가 바이너리 노드이고 2개의 잎 노드를 가지는 경우에, 탑-트리 노드를 n-ary 노드로 결정하고 상기 토큰열에 기초하여 상기 탑-트리 노드에 연결되는 자식 노드를 생성하는 단계를 포함할 수 있다.
자세히 설명하면, 이 경우는 파스 트리에 총 3개의 노드가 존재하는 경우이다. 이 경우에 바이너리 노드인 탑-트리 노드는 n-ary 노드로 결정되어, n개의 자식 노드를 가질 수 있다. 따라서 제 2 노드 생성 단계는 파스 트리의 높이를 유지하면서 새로운 노드를 생성할 수 있다.
본 발명의 또 다른 일 실시예에서, 제 2 노드 생성 단계(430)는 탑-트리 노드가 바이너리 노드이고 n개 미만의 자식 노드를 가지는 부모 노드가 있는 경우에, 마지막 노드에 연결되는 자식 노드를 생성하는 단계를 포함할 수 있다. 여기서 마지막 노드는 n개 미만의 자식 노드를 포함하고 최하위 노드의 뎁스와 상이한 뎁스를 갖는 노드들 중, 뎁스가 가장 깊은 노드일 수 있다.
자세히 설명하면, 파스 트리가 풀이 아닌 경우에, 탑-트리 노드는 바이너리 코드이고 n개 미만의 자식 노드를 가지는 부모 노드가 존재하는 경우가 있다. 이 경우에 제 2 노드 생성 단계(430)는 새로운 노드를 n개 미만의 자식 노드를 가지는 노드에 연결되도록 생성할 수 있다.
뎁스란 탑-트리 노드에서 어느 한 노드까지의 최단 경로에 포함되는 노드의 수일 수 있다. 최하위 노드의 뎁스란 탑-트리 노드에서 최하위 노드까지의 최단 경로에 포함된 노드의 수일 수 있다. 최하위 노드는 파스 트리의 최하위에 존재하는 노드일 수 있다. 따라서 파스 트리의 높이는 최하위 노드의 뎁스와 동일할 수 있다. 따라서 최하위 노드의 뎁스와 상이한 뎁스를 갖는 노드란 최하위 노드를 제외한 모든 노드일 수 있다. 자식 노드가 최하위 노드에 연결되어 생성되는 경우에 파스 트리의 높이가 증가되기 때문에, 마지막 노드에서 최하위 노드는 제외된다.
다시 설명하면, 탑-트리 노드가 바이너리 노드이고 n개 미만의 자식 노드를 가지는 부모 노드가 존재하는 경우에, 제 2 노드 생성 단계(430)는 모든 부모 노드가 n개의 자식 노드를 가지는 방향으로 새로운 노드를 생성한다. 예를 들어, 마지막 노드는 파스 트리가 왼쪽에 오른쪽으로 그리고 아래에서 위로 확장되는 경우에, 가장 왼쪽에 있는 노드이면서 아래쪽에 있는 노드일 수 있다. 상기한 바와 같이, 마지막 노드에는 최하위 노드가 제외된다. 새로운 노드가 최하위노드에 연결되는 경우에 파스 트리의 높이가 증가되기 때문이다. 따라서 마지막 노드는 n-ary 파스 트리의 높이와 상이한 뎁스를 갖는 노드 중에서 선택될 수 있다.
또한, 마지막 노드는 n개 미만의 자식 노드를 가지는 노드 중에서 선택될 수 있다. 상기한 바와 같이, 본 발명의 밸런스드 파스 트리를 생성하기 위한 방법은 모든 부모 노드가 n개의 자식 노드를 가지도록 파스 트리를 생성하기 위해서이다.
n개 미만의 자식 노드를 포함하고 최하위 노드의 뎁스와 상이한 뎁스를 갖는 노드들은 여러 개 존재할 수 있다. 이중에 가장 깊은 뎁스를 가지는 노드가 마지막 노드로 결정된다. 따라서 마지막 노드는 어느 하나의 노드로 특정될 수 있다. 제 2 노드 생성 단계(430)는 새로운 노드들을 이러한 마지막 노드에 연결되도록 생성할 수 있다. 다음은 탑-트리 노드가 n-ary인 경우에 제 2 노드 생성 단계를 설명한다.
본 발명의 또 다른 일 실시예에서, 제 2 노드 생성 단계(430)는 탑-트리 노드가 n-ary 노드인 경우에, 마지막 노드에 연결되는 자식 노드를 생성하는 단계를 포함할 수 있다.
자세히 설명하면, 제 2 노드 생성 단계(430)는 탑-트리 노드가 n-ary인 경우에 모든 부모 노드들이 n개의 자식 노드를 포함하도록 새로운 노드들을 생성하기 위해서, 탑-트리 노드가 n-ary 노드인지 판단한다. 그리고 탑-트리 노드가 n-ary인 경우에, 제 2 노드 생성 단계(430)는 마지막 노드에 연결되는 새로운 자식 노드를 생성한다.
여기서 마지막 노드는 상기한 바와 같이 n개 미만의 자식 노드를 포함하고 최하위 노드의 뎁스와 상이한 뎁스를 갖는 노드들 중, 뎁스가 가장 깊은 노드일 수 있다.
제 2 노드 생성 단계(430)는 상기 단계들을 반복하여 결국 파스 트리가 풀이 되도록 한다. 이 경우에 제 1 노드 생성 단계가 수행되고, 그 다음에 다시 제 2 노드 생성 단계(430)가 수행된다. 이러한 과정은 최종 파스 트리가 생성될 때까지 반복될 수 있다.
도 5는 본 발명의 일 실시예에 따른, n-ary 파스 트리가 풀인지 여부를 판단하는 단계를 설명하기 위한 도면이다.
도 5에서는 n-ary 파스 트리가 풀이라고 결정되는 2 가지 경우에 대한 예시를 도시하고 있다.
첫 번째로 도 5의 (a)는 본 발명의 일 실시예에서 파스 트리에 포함되는 노드의 수가 1개인 경우를 도시하고 있다. 파스 트리는 1 개의 노드(500)를 포함하고 있으므로, 이 경우에 파스 트리는 풀로 결정된다. 이는 주로 파스 트리가 생성되기 시작한 경우에 해당할 수 있다. 이 경우에도 파스 트리는 높이를 증가시켜야 하므로 n-ary 파스 트리는 풀로 결정될 수 있다.
두 번째로 도 5의 (b)는 본 발명의 일 실시예에서 각각의 부모 노드(parent node)가 n개의 자식 노드를 가지는 경우를 도시하고 있다. 도 5의 (b)에 도시된 파스 트리는 3-ary 파스 트리에 해당한다. 따라서 파스 트리에 포함되는 노드는 최대 3개의 자식 노드를 가질 수 있다.
자세히 설명하면, 도 5의 (b)에서 부모 노드는 600, 610, 620 및 630에 해당한다. 부모 노드 600, 610, 620 및 630은 모두 자식 노드를 3개씩 포함하고 있다. 즉 부모 노드 600은 자식 노드 610, 620 및 630을 포함하고 있다. 부모 노드 610은 자식 노드 611, 612 및 613을 포함하며, 부모 노드 620은 자식 노드 621, 622, 및 623을 포함하고 있다. 마지막으로 부모 노드 630은 자식 노드 631, 632, 633을 포함하고 있다.
따라서 도 5의 (b)에 도시한 3-ary 파스 트리는 풀로 결정될 수 있다. 이 경우에 새로운 노드는 파스 트리의 높이를 유지하면서 생성될 수 없다. 따라서 파스 트리는 풀로 결정될 수 있고, 새로운 노드는 파스 트리의 높이를 증가시키면서 생성된다.
도 6은 본 발명의 일 실시예에 따른, 제 1 노드 생성 단계(420)를 설명하기 위한 도면이다.
첫 번째로 도 6의 (a)는 파스 트리에 포함되는 노드의 수가 1개인 경우에 새로운 노드를 생성하는 단계에 대해 도시하고 있다.
자세히 설명하면, 제 1 생성 단계(420)는 기존의 파스 트리에 포함되는 노드 500을 자식 노드로 하는 탑-트리 노드 5000을 생성한다. 따라서 파스 트리의 높이는 총 2로 증가하게 된다. 그리고 상기 탑-트리 노드 5000은 바이너리 노드로 결정되어 2개의 자식 노드를 포함할 수 있다.
두 번째로 도 6의 (b)는 본 발명의 일 실시예에서, 각각의 부모 노드(parent node)가 n개의 자식 노드를 가지고 각각의 잎 노드의 뎁스(depth)가 동일한 경우에, 새로운 노드를 생성하는 단계에 대해 도시하고 있다. 도 6의 (b)에 도시된 파스 트리는 3-ary 파스 트리에 해당한다. 따라서 파스 트리에 포함되는 노드는 최대 3개의 자식 노드를 가질 수 있다.
도 6의 (b)의 좌측의 그림은 도 5의 (b)의 그림과 동일한 것으로, 3-ary 파스 트리가 풀인 상태이다. 이 경우에, 제 1 노드 생성 단계(420)는 기존의 탑-트리 노드인 600을 자식 노드로 하는 탑-트리 노드 6000을 생성할 수 있다. 따라서 3-ary 파스 트리의 높이는 3에서 4로 증가하게 된다. 그리고 상기 탑-트리 노드 6000은 바이너리 노드로 결정되어 2개의 자식 노드를 포함할 수 있다.
도 7은 본 발명의 일 실시예에 따른, 탑-트리 노드가 바이너리 노드이고 탑-트리 노드를 제외한 부모 노드 각각이 n개의 자식 노드를 가지는 경우에 제 2 노드 생성 단계(430)를 설명하기 위한 도면이다.
본 발명의 밸런스드 파스 트리를 생성하기 위한 방법은 탑-트리 노드가 바이너리 노드이고 탑-트리 노드를 제외한 부모 노드 각각이 n개의 자식 노드를 가지는 경우에, 탑-트리 노드를 n-ary 노드로 결정하고 토큰열에 기초하여 상기 탑-트리 노드에 연결되는 자식 노드를 생성하는 단계를 포함할 수 있다.
도 7에 도시된 파스 트리는 4-ary 파스 트리이다. 따라서 파스 트리에 포함되는 노드는 최대 4개의 자식 노드를 포함할 수 있다.
도 7에 도시된 파스 트리는 부모 노드인 710과 720은 4개의 자식 노드를 가지나, 부모 노드 700이 2개의 자식 노드를 가지므로 풀이 아니다. 따라서 제 2 노드 생성 단계(430)에 의해 새로운 노드가 생성될 수 있다. 따라서 새로운 노드는 파스 트리의 높이를 유지하면서 생성될 수 있다.
탑-트리 노드 700은 2개의 자식 노드를 가지는 바이너리 노드에 해당한다. 그리고 탑-트리 노드인 700을 제외한 나머지 부모 노드 710과 720은 모두 4개의 자식 노드를 가지고 있다. 따라서 제 2 노드 생성 단계(430)는 바이너리 노드인 탑-트리 노드 700을 4-ary 노드로 결정하고, 탑-트리 노드 700에 연결되는 자식 노드 730을 생성할 수 있다.
도 8은 본 발명의 일 실시예에 따른, 탑-트리 노드가 바이너리 노드이고 n개 미만의 자식 노드를 가지는 부모 노드가 존재하는 경우에 제 2 노드 생성 단계(430)를 설명하기 위한 도면이다.
본 발명의 밸런스드 파스 트리를 생성하기 위한 방법은 탑-트리 노드가 바이너리 노드이고 n개 미만의 자식 노드를 가지는 부모 노드가 존재하는 경우에, 마지막 노드에 연결되는 자식 노드를 생성하는 단계를 포함할 수 있다. 여기서 마지막 노드는 n개 미만의 자식 노드를 포함하고 최하위 노드의 뎁스와 상이한 뎁스를 갖는 노드들 중, 뎁스가 가장 깊은 노드일 수 있다.
도 8에 도시된 파스 트리는 4-ary 파스 트리이다. 따라서 파스 트리에 포함되는 노드는 최대 4개의 자식 노드를 포함할 수 있다.
도 8에 도시된 파스 트리는 부모 노드인 710과 720은 4개의 자식 노드를 가지나, 부모 노드 700이 2개의 자식 노드를 가지므로 풀이 아니다. 따라서 제 2 노드 생성 단계(430)에 의해 새로운 노드가 생성될 수 있다. 따라서 새로운 노드는 파스 트리의 높이를 유지하면서 생성될 수 있다.
자세히 설명하면, 탑-트리 노드는 2개의 자식 노드 710 및 720을 가지는 바이너리 노드에 해당한다. 그리고 부모 노드 710은 자식 노드를 모두 4개를 포함하고 있으나, 부모 노드 720은 721, 772 및 723의 3개의 자식 노드를 가진다. 따라서 도 8의 파스 트리는 탑-트리 노드가 바이너리 노드이고 4개 미만의 자식 노드를 가지는 부모 노드가 있는 경우이다.
여기서 마지막 노드는 720에 해당한다. 구체적으로 설명하면, 파스 트리의 높이는 탑-트리 노트 700에서 최하위 노드(711 내지 723)까지의 경로에 포함되는 노드의 수인 3이다. 최하위 노드의 뎁스와 상이한 뎁스를 갖는 노드, 즉 뎁스가 3이 아닌 노드는 700, 710, 720에 해당한다. 이중에서 4개 미만의 자식 노드를 가지는 노드는 700 및 720이다. 이 중에서 가장 깊은 뎁스를 가진 노드는 720이다. 따라서 마지막 노드는 720이 된다.
따라서 새로운 노드는 720에 연결되는 자식 노드 724로 생성된다. 따라서 본 발명의 밸런스드 파스 트리를 생성하기 위한 방법은 파스 트리의 높이를 유지하면서 새로운 노드를 생성할 수 있다.
도 9는 본 발명의 일 실시예에 따른, 탑-트리 노드가 n-ary 노드이고 n개 미만의 자식 노드를 가지는 부모 노드가 있는 경우에 제 2 노드 생성 단계(430)를 설명하기 위한 도면이다.
본 발명의 일 실시예에서, 제 2 노드 생성 단계(430)는 탑-트리 노드가 n-ary 노드인 경우에, 마지막 노드에 연결되는 자식 노드를 생성하는 단계를 포함할 수 있다. 여기서 마지막 노드는 상기한 바와 같이 n개 미만의 자식 노드를 포함하고 최하위 노드의 뎁스와 상이한 뎁스를 갖는 노드들 중, 뎁스가 가장 깊은 노드일 수 있다.
도 9는 파스 트리가 풀이 아니고 탑-트리 노드가 n-ary 노드인 경우에, 마지막 노드에 연결되는 자식 노드를 생성하는 단계를 도시하고 있다.
도 9에 도시된 파스 트리는 4-ary 파스 트리이다. 따라서 파스 트리에 포함되는 노드는 최대 4개의 자식 노드를 포함할 수 있다.
도 9에 도시된 파스 트리는 부모 노드인 710과 720은 4개의 자식 노드를 가지나, 부모 노드 700은 3개의 자식 노드를 가지므로 파스 트리가 풀인 상태가 아니다. 따라서 제 2 노드 생성 단계(430)를 통해 새로운 노드가 생성될 수 있다. 따라서 새로운 노드는 파스 트리의 높이를 유지하면서 생성될 수 있다.
자세히 설명하면, 탑-트리 노드는 3개의 자식 노드 710, 720, 730을 가지는 4-ary 노드에 해당한다. 따라서 도 9의 파스 트리는 탑-트리 노드가 4-ary 노드인 경우이다.
여기서 마지막 노드는 730에 해당한다. 구체적으로 설명하면, 파스 트리의 높이는 탑-트리 노트 700에서 최하위 노드(711 내지 724)까지의 경로에 포함되는 노드의 수인 3이다. 최하위 노드의 뎁스와 상이한 뎁스를 갖는 노드, 즉 뎁스가 3이 아닌 노드는 700, 710, 720 및 730 이다. 이중에서 4개 미만의 자식 노드를 가지는 노드는 700 및730이다. 이 중에서 가장 깊은 뎁스를 가진 노드는 730이다. 따라서 마지막 노드는 730이 된다.
따라서 새로운 노드는 730에 연결되는 자식 노드 731로 생성된다. 따라서 본 발명의 밸런스드 파스 트리를 생성하기 위한 방법은 파스 트리의 높이를 유지하면서 새로운 노드를 생성할 수 있다.
본 발명의 밸런스드 파스 트리를 생성하기 위한 방법은 실험을 통해 기존의 파싱 과정보다 30% 이상의 속도 향상을 있음이 증명되었다. 다음은 본 실험에 사용된 소스 코드이다. 같은 결과에 대해 총 시간이 00:00:07.581848에서 00:00:05.199717로 감소함을 확인할 수 있다.
=================================================================================
set timing on
set serveroutput on
declare
Var varchar2(32767);
begin
for i in 1 .. 100000 loop
var :=
'1' || '2' || '3' || '4' ||
'5' || '6' || '7' || '8' ||
'9' || '0' || '1' || '2' ||
'3' || '4' || '5' || '6' ||
'7' || '8' || '9' || '0' ||
'1' || '2' || '3' || '4' ||
'5' || '6' || '7' || '8' ||
'9' || '0' || '1' || '2' ||
'3' || '4' || '5' || '6' ||
'7' || '8' || '9' || '0' ||
'1' || '2' || '3' || '4' ||
'5' || '6' || '7' || '8' ||
'9' || '0' || '1' || '2' ||
'3' || '4' || '5' || '6' ||
'7' || '8' || '9' || '0' ||
'1' || '2' || '3' || '4' ||
'5' || '6' || '7' || '8' ||
'9' || '0' || '1' || '2' ||
'3' || '4' || '5' || '6' ||
'7' || '8' || '9' || '0' ||
'1' || '2' || '3' || '4' ||
'5' || '6' || '7' || '8' ||
'9' || '0' || '1' || '2' ||
'3' || '4' || '5' || '6' ||
'7' || '8' || '9' || '0' ||
'1' || '2' || '3' || '4' ||
'5' || '6' || '7' || '8' ||
'9' || '0' || '1' || '2' ||
'3' || '4' || '5' || '6' ||
'7' || '8' || '9' || '0' ||
'1' || '2' || '3' || '4' ||
'5' || '6' || '7' || '8' ||
'9' || '0' || '1' || '2' ||
'3' || '4' || '5' || '6' ||
'7' || '8' || '9' || '0' ||
'1' || '2' || '3' || '4' ||
'5' || '6' || '7' || '8' ||
'9' || '0' || '1' || '2' ||
'3' || '4' || '5' || '6' ||
'7' || '8' || '9' || '0' ||
'1' || '2' || '3' || '4' ||
'5' || '6' || '7' || '8' ||
'9' || '0' || '1' || '2' ||
'3' || '4' || '5' || '6' ||
'7' || '8' || '9' || '0' ||
'1' || '2' || '3' || '4' ||
'5' || '6' || '7' || '8' ||
'9' || '0' || '1' || '2' ||
'3' || '4' || '5' || '6' ||
'7' || '8' || '9' || '0' ||
'1' || '2' || '3' || '4' ||
'5' || '6' || '7' || '8' ||
'9' || '0' || '1' || '2' ||
'3' || '4' || '5' || '6' ||
'7' || '8' || '9' || '0' ||
'X';
end loop;
dbms_output.put_line (var);
end;
/
<original version>
12345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890X
PSM completed
Total elapsed time 00:00:07.581848
<optimized version>
12345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890X
PSM completed
Total elapsed time 00:00:05.199717
도 10은 본 개시내용의 일 실시예에 따라 밸런스트 파스 트리를 생성하기 위한 방법을 구현하기 위한 예시적인 컴퓨팅 장치에 대한 블록도를 도시한다.
본 발명이 일반적으로 하나 이상의 서버 내의 컴퓨터 또는 프로세서 상에서 실행될 수 있는 특징들과 관련하여 전술되었지만, 당업자라면 본 발명이 기타 프로그램 모듈들과 결합되어 및/또는 하드웨어와 소프트웨어의 조합으로서 구현될 수 있다는 것을 잘 알 것이다.
일반적으로, 프로그램 모듈은 특정의 태스크를 수행하거나 특정의 추상 데이터 유형을 구현하는 루틴, 프로그램, 컴포넌트, 데이터 구조, 기타 등등을 포함한다. 또한, 당업자라면 본 발명의 방법이 단일-프로세서 또는 멀티프로세서 컴퓨터 시스템, 미니컴퓨터, 메인프레임 컴퓨터는 물론 퍼스널 컴퓨터, 핸드헬드 컴퓨팅 장치, 마이크로프로세서-기반 또는 프로그램가능 가전 제품, 기타 등등(이들 각각은 하나 이상의 연관된 장치와 연결되어 동작할 수 있음)을 비롯한 다른 컴퓨터 시스템 구성으로 실시될 수 있다는 것을 잘 알 것이다.
본 발명의 설명된 실시예들은 또한 어떤 태스크들이 통신 네트워크를 통해 연결되어 있는 원격 처리 장치들에 의해 수행되는 분산 컴퓨팅 환경에서 실시될 수 있다. 분산 컴퓨팅 환경에서, 프로그램 모듈은 로컬 및 원격 메모리 저장 장치 둘 다에 위치할 수 있다.
컴퓨터는 통상적으로 다양한 컴퓨터 판독가능 매체를 포함한다. 컴퓨터에 의해 액세스 가능한 매체는 그 어떤 것이든지 컴퓨터 판독가능 매체가 될 수 있고, 이러한 컴퓨터 판독가능 매체는 휘발성 및 비휘발성 매체, 일시적(transitory) 및 비일시적(non-transitory) 매체, 이동식 및 비-이동식 매체를 포함한다. 제한이 아닌 예로서, 컴퓨터 판독가능 매체는 컴퓨터 판독가능 저장 매체 및 컴퓨터 판독가능 전송 매체를 포함할 수 있다.
컴퓨터 판독가능 저장 매체는 컴퓨터 판독가능 명령어, 데이터 구조, 프로그램 모듈 또는 기타 데이터와 같은 정보를 저장하는 임의의 방법 또는 기술로 구현되는 휘발성 및 비휘발성 매체, 일시적 및 비-일시적 매체, 이동식 및 비이동식 매체를 포함한다. 컴퓨터 판독가능 저장 매체는 RAM, ROM, EEPROM, 플래시 메모리 또는 기타 메모리 기술, CD-ROM, DVD(digital video disk) 또는 기타 광 디스크 저장 장치, 자기 카세트, 자기 테이프, 자기 디스크 저장 장치 또는 기타 자기 저장 장치, 또는 컴퓨터에 의해 액세스될 수 있고 원하는 정보를 저장하는 데 사용될 수 있는 임의의 기타 매체를 포함하지만, 이에 한정되지 않는다.
컴퓨터 판독가능 전송 매체는 통상적으로 반송파(carrier wave) 또는 기타 전송 메커니즘(transport mechanism)과 같은 피변조 데이터 신호(modulated data signal)에 컴퓨터 판독가능 명령어, 데이터 구조, 프로그램 모듈 또는 기타 데이터등을 구현하고 모든 정보 전달 매체를 포함한다. 피변조 데이터 신호라는 용어는 신호 내에 정보를 인코딩하도록 그 신호의 특성들 중 하나 이상을 설정 또는 변경시킨 신호를 의미한다. 제한이 아닌 예로서, 송수신(통신) 매체는 유선 네트워크 또는 직접 배선 접속(direct-wired connection)과 같은 유선 매체, 그리고 음향, RF, 적외선, 기타 무선 매체와 같은 무선 매체를 포함한다. 상술된 매체들 중 임의의 것의 조합도 역시 컴퓨터 판독가능 전송 매체의 범위 안에 포함되는 것으로 한다.
도 10에서는 본 발명의 밸런스드 파스 트리를 생성하기 위한 방법을 구현하기 위한 컴퓨팅 장치(1102)를 포함하는 본 발명의 여러가지 측면들을 구현하는 예시적인 환경이 나타내어져 있으며, 컴퓨팅 장치(1102)는 처리 장치(1104), 시스템 메모리(1106) 및 시스템 버스(1108)를 포함한다. 시스템 버스(1108)는 시스템 메모리(1106)(이에 한정되지 않음)를 비롯한 시스템 컴포넌트들을 처리 장치(1104)에 연결시킨다. 처리 장치(1104)는 다양한 상용 프로세서들 중 임의의 프로세서일 수 있다. 듀얼 프로세서 및 기타 멀티프로세서 아키텍처도 역시 처리 장치(1104)로서 이용될 수 있다.
처리 장치(1104)는 본 발명의 밸런스드 파스 트리를 생성하기 위한 방법을 구현하기 위한 컴파일러 모듈(1000)을 포함할 수 있다. 다만 이에 한정되지 않는다.
시스템 버스(1108)는 메모리 버스, 주변장치 버스, 및 다양한 상용 버스 아키텍처 중 임의의 것을 사용하는 로컬 버스에 추가적으로 상호 연결될 수 있는 몇가지 유형의 버스 구조 중 임의의 것일 수 있다. 시스템 메모리(1106)는 판독 전용 메모리(ROM)(1110) 및 랜덤 액세스 메모리(RAM)(1112)를 포함한다. 기본 입/출력 시스템(BIOS)은 ROM, EPROM, EEPROM 등의 비휘발성 메모리(1110)에 저장되며, 이 BIOS는 시동 중과 같은 때에 컴퓨팅 장치(1102) 내의 구성요소들 간에 정보를 전송하는 일을 돕는 기본적인 루틴을 포함한다. RAM(1112)은 또한 데이터를 캐싱하기 위한 정적 RAM 등의 고속 RAM을 포함할 수 있다.
컴퓨팅 장치(1102)는 또한 내장형 하드 디스크 드라이브(HDD)(1114)(예를 들어, EIDE, SATA)이 내장형 하드 디스크 드라이브(1114)는 또한 적당한 섀시(도시 생략) 내에서 외장형 용도로 구성될 수 있음), 자기 플로피 디스크 드라이브(FDD)(1116)(예를 들어, 이동식 디스켓(1118)으로부터 판독을 하거나 그에 기록을 하기 위한 것임), 및 광 디스크 드라이브(1120)(예를 들어, CD-ROM 디스크(1122)를 판독하거나 DVD 등의 기타 고용량 광 매체로부터 판독을 하거나 그에 기록을 하기 위한 것임)를 포함한다. 하드 디스크 드라이브(1114), 자기 디스크 드라이브(1116) 및 광 디스크 드라이브(1120)는 각각 하드 디스크 드라이브 인터페이스(1124), 자기 디스크 드라이브 인터페이스(1126) 및 광 드라이브 인터페이스(1128)에 의해 시스템 버스(1108)에 연결될 수 있다. 외장형 드라이브 구현을 위한 인터페이스(1124)는 USB(Universal Serial Bus) 및 IEEE 1394 인터페이스 기술 중 적어도 하나 또는 그 둘 다를 포함한다.
이들 드라이브 및 그와 연관된 컴퓨터 판독 가능 저장 매체는 데이터, 데이터 구조, 컴퓨터 실행가능 명령어, 기타 등등의 비휘발성 저장을 제공한다. 컴퓨팅 장치(1102)의 경우, 드라이브 및 매체는 임의의 데이터를 적당한 디지털 형식으로 저장하는 것에 대응한다. 상기에서의 컴퓨터 판독 가능 저장 매체에 대한 설명이 HDD, 이동식 자기 디스크, 및 CD 또는 DVD 등의 이동식 광 매체를 언급하고 있지만, 당업자라면 집 드라이브(zip drive), 자기 카세트, 플래쉬 메모리 카드, 카트리지, 기타 등등의 컴퓨터에 의해 판독 가능한 다른 유형의 매체도 역시 예시적인 운영 환경에서 사용될 수 있으며 또 임의의 이러한 매체가 본 발명의 방법들을 수행하기 위한 컴퓨터 실행가능 명령어를 포함할 수 있다는 것을 잘 알 것이다.
운영 체제(1130), 하나 이상의 애플리케이션 프로그램(1132), 기타 프로그램 모듈(1134) 및 프로그램 데이터(1136)를 비롯한 다수의 프로그램 모듈이 드라이브 및 RAM(1112)에 저장될 수 있다. 운영 체제, 애플리케이션, 모듈 및/또는 데이터의 전부 또는 그 일부분이 또한 RAM(1112)에 캐싱될 수 있다. 본 발명이 여러가지 상업적으로 이용 가능한 운영 체제 또는 운영 체제들의 조합에서 구현될 수 있다는 것을 잘 알 것이다.
사용자는 하나 이상의 유선/무선 입력 장치, 예를 들어, 키보드(1138) 및 마우스(1140) 등의 포인팅 장치를 통해 컴퓨팅 장치(1102)에 명령 및 정보를 입력할 수 있다. 기타 입력 장치(도시 생략)로는 마이크, IR 리모콘, 조이스틱, 게임 패드, 스타일러스 펜, 터치 스크린, 기타 등등이 있을 수 있다. 이들 및 기타 입력 장치가 종종 시스템 버스(1108)에 연결되어 있는 입력 장치 인터페이스(1142)를 통해 처리 장치(1104)에 연결되지만, 병렬 포트, IEEE 1394 직렬 포트, 게임 포트, USB 포트, IR 인터페이스, 기타 등등의 기타 인터페이스에 의해 연결될 수 있다.
모니터(1144) 또는 다른 유형의 디스플레이 장치도 역시 비디오 어댑터(1146) 등의 인터페이스를 통해 시스템 버스(1108)에 연결된다. 모니터(1144)에 부가하여, 컴퓨터는 일반적으로 스피커, 프린터, 기타 등등의 기타 주변 출력 장치(도시 생략)를 포함한다.
컴퓨팅 장치(1102)는 유선 및/또는 무선 통신을 통한 원격 컴퓨터(들)(1148) 등의 하나 이상의 원격 컴퓨터로의 논리적 연결을 사용하여 네트워크화된 환경에서 동작할 수 있다. 원격 컴퓨터(들)(1148)는 워크스테이션, 서버 컴퓨터, 라우터, 퍼스널 컴퓨터, 휴대용 컴퓨터, 마이크로프로세서-기반 오락 기기, 피어 장치 또는 기타 통상의 네트워크 노드일 수 있으며, 일반적으로 컴퓨팅 장치(1102)에 대해 기술된 구성요소들 중 다수 또는 그 전부를 포함하지만, 간략함을 위해, 메모리 저장 장치(1150)만이 도시되어 있다. 도시되어 있는 논리적 연결은 근거리 통신망(LAN)(1152) 및/또는 더 큰 네트워크, 예를 들어, 원거리 통신망(WAN)(1154)에의 유선/무선 연결을 포함한다. 이러한 LAN 및 WAN 네트워킹 환경은 사무실 및 회사에서 일반적인 것이며, 인트라넷 등의 전사적 컴퓨터 네트워크(enterprise-wide computer network)를 용이하게 해주며, 이들 모두는 전세계 컴퓨터 네트워크, 예를 들어, 인터넷에 연결될 수 있다.
LAN 네트워킹 환경에서 사용될 때, 컴퓨팅 장치(1102)는 유선 및/또는 무선 통신 네트워크 인터페이스 또는 어댑터(1156)를 통해 로컬 네트워크(1152)에 연결된다. 어댑터(1156)는 LAN(1152)에의 유선 또는 무선 통신을 용이하게 해줄 수 있으며, 이 LAN(1152)은 또한 무선 어댑터(1156)와 통신하기 위해 그에 설치되어 있는 무선 액세스 포인트를 포함하고 있다. WAN 네트워킹 환경에서 사용될 때, 컴퓨팅 장치(1102)는 모뎀(1158)을 포함할 수 있거나, WAN(1154) 상의 통신 서버에 연결되거나, 또는 인터넷을 통하는 등, WAN(1154)을 통해 통신을 설정하는 기타 수단을 갖는다. 내장형 또는 외장형 및 유선 또는 무선 장치일 수 있는 모뎀(1158)은 직렬 포트 인터페이스(1142)를 통해 시스템 버스(1108)에 연결된다. 네트워크화된 환경에서, 컴퓨팅 장치(1102)에 대해 설명된 프로그램 모듈들 또는 그의 일부분이 원격 메모리/저장 장치(1150)에 저장될 수 있다. 도시된 네트워크 연결이 예시적인 것이며 컴퓨터들 사이에 통신 링크를 설정하는 기타 수단이 사용될 수 있다는 것을 잘 알 것이다.
컴퓨팅 장치(1102)는 무선 통신으로 배치되어 동작하는 임의의 무선 장치 또는 개체, 예를 들어, 프린터, 스캐너, 데스크톱 및/또는 휴대용 컴퓨터, PDA(portable data assistant), 통신 위성, 무선 검출 가능 태그와 연관된 임의의 장비 또는 장소, 및 전화와 통신을 하는 동작을 한다. 이것은 적어도 Wi-Fi 및 블루투스 무선 기술을 포함한다. 따라서, 통신은 종래의 네트워크에서와 같이 미리 정의된 구조이거나 단순하게 적어도 2개의 장치 사이의 애드혹 통신(ad hoc communication)일 수 있다.
Wi-Fi(Wireless Fidelity)는 유선 없이도 인터넷 등으로의 연결을 가능하게 해준다. Wi-Fi는 이러한 장치, 예를 들어, 컴퓨터가 실내에서 및 실외에서, 즉 기지국의 통화권 내의 아무 곳에서나 데이터를 전송 및 수신할 수 있게 해주는 셀 전화와 같은 무선 기술이다. Wi-Fi 네트워크는 안전하고 신뢰성 있으며 고속인 무선 연결을 제공하기 위해 IEEE 802.6(a,b,g, 기타)이라고 하는 무선 기술을 사용한다. 컴퓨터를 서로에, 인터넷에 및 유선 네트워크(IEEE 802.3 또는 이더넷을 사용함)에 연결시키기 위해 Wi-Fi가 사용될 수 있다. Wi-Fi 네트워크는 비인가 2.4 및 5 GHz 무선 대역에서, 예를 들어, 6Mbps(802.6a) 또는 54 Mbps(802.6b) 데이터 레이트로 동작하거나, 양 대역(듀얼 대역)을 포함하는 제품에서 동작할 수 있다.
본 발명의 기술 분야에서 통상의 지식을 가진 자는 여기에 개시된 실시예들과 관련하여 설명된 다양한 예시적인 논리 블록들, 모듈들, 프로세서들, 수단들, 회로들 및 알고리즘 단계들이 전자 하드웨어, (편의를 위해, 여기에서 "소프트웨어"로 지칭되는) 다양한 형태들의 프로그램 또는 설계 코드 또는 이들 모두의 결합에 의해 구현될 수 있다는 것을 이해할 것이다. 하드웨어 및 소프트웨어의 이러한 상호 호환성을 명확하게 설명하기 위해, 다양한 예시적인 컴포넌트들, 블록들, 모듈들, 회로들 및 단계들이 이들의 기능과 관련하여 위에서 일반적으로 설명되었다. 이러한 기능이 하드웨어 또는 소프트웨어로서 구현되는지 여부는 특정한 애플리케이션 및 전체 시스템에 대하여 부과되는 설계 제약들에 따라 좌우된다. 본 발명의 기술 분야에서 통상의 지식을 가진 자는 각각의 특정한 애플리케이션에 대하여 다양한 방식들로 설명된 기능을 구현할 수 있으나, 이러한 구현 결정들은 본 발명의 범위를 벗어나는 것으로 해석되어서는 안 될 것이다.
여기서 제시된 다양한 실시예들은 방법, 장치, 또는 표준 프로그래밍 및/또는 엔지니어링 기술을 사용한 제조 물품(article)으로 구현될 수 있다. 용어 "제조 물품"은 임의의 컴퓨터-판독 가능 장치로부터 액세스 가능한 컴퓨터 프로그램, 캐리어, 또는 매체(media)를 포함한다. 예를 들어, 컴퓨터-판독 가능 매체는 자기 저장 장치(예를 들면, 하드 디스크, 플로피 디스크, 자기 스트립, 등), 광학 디스크(예를 들면, CD, DVD, 등), 스마트 카드, 및 플래쉬 메모리 장치(예를 들면, EEPROM, 카드, 스틱, 키 드라이브, 등)를 포함하지만, 이들로 제한되는 것은 아니다. 용어 "기계-판독 가능 매체"는 명령(들) 및/또는 데이터를 저장, 보유할 수 있는 다양한 다른 매체를 포함하지만, 이들로 제한되는 것은 아니다.
제시된 프로세스들에 있는 단계들의 특정한 순서 또는 계층 구조는 예시적인 접근들의 일례임을 이해하도록 한다. 설계 우선순위들에 기반하여, 본 발명의 범위 내에서 프로세스들에 있는 단계들의 특정한 순서 또는 계층 구조가 재배열될 수 있다는 것을 이해하도록 한다. 첨부된 방법 청구항들은 샘플 순서로 다양한 단계들의 엘리먼트들을 제공하지만 제시된 특정한 순서 또는 계층 구조에 한정되는 것을 의미하지는 않는다.
제시된 실시예들에 대한 설명은 임의의 본 발명의 기술 분야에서 통상의 지식을 가진 자가 본 발명을 이용하거나 또는 실시할 수 있도록 제공된다. 이러한 실시예들에 대한 다양한 변형들은 본 발명의 기술 분야에서 통상의 지식을 가진 자에게 명백할 것이며, 여기에 정의된 일반적인 원리들은 본 발명의 범위를 벗어남이 없이 다른 실시예들에 적용될 수 있다. 그리하여, 본 발명은 여기에 제시된 실시예들로 한정되는 것이 아니라, 여기에 제시된 원리들 및 신규한 특징들과 일관되는 최광의의 범위에서 해석되어야 할 것이다.

Claims (11)

  1. 인코딩된 명령들을 포함하는 컴퓨터 판독 가능 저장 매체에 저장된 컴퓨터 프로그램으로서, 상기 컴퓨터 프로그램은 컴퓨터 시스템의 하나 이상의 프로세서들에 의해 실행되는 경우, 상기 하나 이상의 프로세서들로 하여금 최적화된 높이를 가지는 밸런스드 파스 트리(balanced parse tree)를 생성하기 위한 이하의 단계들을 수행하도록 하며, 상기 단계들은:
    적어도 하나의 토큰(token)을 포함하는 토큰열을 수신하는 단계;
    n-ary 파스 트리(n-ary parse tree)가 풀(full)인지 여부를 결정하는 단계-상기 n-ary 파스 트리는 적어도 하나의 노드(node)를 포함하고, 상기 적어도 하나의 노드는 각각 n개 이하의 자식 노드(child node)를 포함함-;
    상기 n-ary 파스 트리가 풀인 경우에, 상기 토큰열에 기초하여 상기 파스 트리의 높이를 증가시키면서 노드를 생성하는 제 1 노드 생성 단계; 및
    상기 n-ary 파스 트리가 풀이 아닌 경우에, 상기 토큰열에 기초하여 상기 파스 트리의 높이를 유지하면서 노드를 생성하는 제 2 노드 생성 단계;
    를 포함하고,
    상기 제 1 노드 생성 단계는:
    상기 토큰열에 기초하여 상기 n-ary 파스 트리에 포함되는 탑-트리 노드를 생성하는 단계; 및
    상기 탑-트리 노드를 바이너리 노드(binary node)로 결정하는 단계;
    를 포함하는,
    컴퓨터 판독가능 저장 매체에 저장된 컴퓨터 프로그램.
  2. 제 1 항에 있어서,
    상기 n-ary 파스 트리가 풀인지 여부를 결정하는 단계는:
    상기 n-ary 파스 트리에 포함되는 노드의 수가 1 개인지 여부를 결정하는 단계; 및
    상기 n-ary 파스 트리에 포함되는 노드의 수가 1개인 경우에, 상기 n-ary 파스 트리를 풀로 결정하는 단계;
    를 포함하는,
    컴퓨터 판독가능 저장 매체에 저장된 컴퓨터 프로그램.
  3. 제 1 항에 있어서,
    상기 n-ary 파스 트리가 풀인지 여부를 결정하는 단계는:
    상기 n-ary 파스 트리에 포함되는 각각의 부모 노드가 n개의 자식 노드를 가지는지 결정하는 단계;
    상기 각각의 부모 노드가 n개의 자식 노드를 가지는 경우에, 상기 n-ary 파스 트리를 풀로 결정하는 단계;
    를 포함하는,
    컴퓨터 판독가능 저장 매체에 저장된 컴퓨터 프로그램.
  4. 삭제
  5. 제 1 항에 있어서,
    상기 제 1 노드 생성 단계는;
    상기 탑-트리 노드가 생성되는 경우에, 상기 토큰열에 기초하여 상기 탑-트리 노드에 연결되는 자식 노드를 생성하는 단계;
    를 더 포함하는,
    컴퓨터 판독가능 저장 매체에 저장된 컴퓨터 프로그램.
  6. 제 1 항에 있어서,
    상기 제 2 노드 생성 단계는:
    탑-트리 노드가 바이너리 노드이고 부모 노드 각각이 n개의 자식 노드를 가지는 경우에, 상기 탑-트리 노드를 n-ary 노드로 결정하고 상기 토큰열에 기초하여 상기 탑-트리 노드에 연결되는 자식 노드를 생성하는 단계-상기 부모 노드들에는 탑-트리 노드가 제외됨-;
    를 포함하는,
    컴퓨터 판독가능 저장 매체에 저장된 컴퓨터 프로그램.
  7. 제 1 항에 있어서,
    상기 제 2 노드 생성 단계는:
    탑-트리 노드가 바이너리 노드이고 2개의 잎 노드를 가지는 경우에, 상기 탑-트리 노드를 n-ary 노드로 결정하고 상기 토큰열에 기초하여 상기 탑-트리 노드에 연결되는 자식 노드를 생성하는 단계;
    를 포함하는,
    컴퓨터 판독가능 저장 매체에 저장된 컴퓨터 프로그램.
  8. 제 1 항에 있어서,
    상기 제 2 노드 생성 단계는,
    탑-트리 노드가 바이너리 노드이고 n개 미만의 자식 노드를 가지는 부모 노드가 존재하는 경우에, 마지막 노드에 연결되는 자식 노드를 생성하는 단계;
    를 포함하고,
    상기 마지막 노드는:
    n개 미만의 자식 노드를 포함하고 최하위 노드의 뎁스와 상이한 뎁스를 갖는 노드들 중, 뎁스가 가장 깊은 노드인,
    컴퓨터 판독가능 저장 매체에 저장된 컴퓨터 프로그램.
  9. 제 1 항에 있어서,
    상기 제 2 노드 생성 단계는,
    탑-트리 노드가 n-ary 노드인 경우에, 마지막 노드에 연결되는 자식 노드를 생성하는 단계;
    를 포함하고,
    상기 마지막 노드는:
    n개 미만의 자식 노드를 포함하고 최하위 노드의 뎁스와 상이한 뎁스를 갖는 노드들 중, 뎁스가 가장 깊은 노드인,
    컴퓨터 판독가능 저장 매체에 저장된 컴퓨터 프로그램.
  10. 컴퓨팅 장치의 하나 이상의 프로세서에서 수행되는 최적화된 높이를 가지는 밸런스드 파스 트리를 생성하는 방법으로서,
    적어도 하나의 토큰을 포함하는 토큰열을 수신하는 단계;
    n-ary 파스 트리가 풀인지 여부를 결정하는 단계-상기 n-ary 파스 트리는 적어도 하나의 노드를 포함하고, 상기 노드는 n개 이하의 자식 노드를 포함함-;
    상기 n-ary 파스 트리가 풀인 경우에, 상기 토큰열에 기초하여 상기 파스 트리의 높이를 증가시키면서 노드를 생성하는 제 1 노드 생성 단계; 및
    상기 n-ary 파스 트리가 풀이 아닌 경우에, 상기 토큰열에 기초하여 상기 파스 트리의 높이를 유지하면서 노드를 생성하는 제 2 노드 생성 단계;
    를 포함하고,
    상기 제 1 노드 생성 단계는:
    상기 토큰열에 기초하여 상기 n-ary 파스 트리에 포함되는 탑-트리 노드를 생성하는 단계; 및
    상기 탑-트리 노드를 바이너리 노드(binary node)로 결정하는 단계;
    를 포함하는,
    최적화된 높이를 가지는 밸런스드 파스 트리를 생성하는 방법.
  11. 컴퓨팅 장치로서,
    하나 이상의 프로세서; 및
    상기 하나 이상의 프로세서에서 실행가능한 명령들을 저장하는 메모리;
    를 포함하고,
    상기 하나 이상의 프로세서는,
    적어도 하나의 토큰을 포함하는 토큰열을 수신하는 단계;
    n-ary 파스 트리가 풀인지 여부를 판단하는 단계-상기 n-ary 파스 트리는 적어도 하나의 노드를 포함하고, 상기 노드는 n개 이하의 자식 노드를 포함함-;
    상기 n-ary 파스 트리가 풀인 경우에, 상기 토큰열에 기초하여 상기 파스 트리의 높이를 증가시키면서 노드를 생성하는 제 1 노드 생성 단계; 및
    상기 n-ary 파스 트리가 풀이 아닌 경우에, 상기 토큰열에 기초하여 상기 파스 트리의 높이를 유지하면서 노드를 생성하는 제 2 노드 생성 단계;
    를 수행하고,
    상기 제 1 노드 생성 단계는:
    상기 토큰열에 기초하여 상기 n-ary 파스 트리에 포함되는 탑-트리 노드를 생성하는 단계; 및
    상기 탑-트리 노드를 바이너리 노드(binary node)로 결정하는 단계;
    를 포함하는,
    컴퓨팅 장치.

KR1020170073401A 2017-06-12 2017-06-12 최적화된 높이를 가지는 밸런스드 파스 트리를 생성하는 방법 KR101985309B1 (ko)

Priority Applications (2)

Application Number Priority Date Filing Date Title
KR1020170073401A KR101985309B1 (ko) 2017-06-12 2017-06-12 최적화된 높이를 가지는 밸런스드 파스 트리를 생성하는 방법
US15/659,552 US10416971B2 (en) 2017-06-12 2017-07-25 Method of creating the balanced parse tree having optimized height

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
KR1020170073401A KR101985309B1 (ko) 2017-06-12 2017-06-12 최적화된 높이를 가지는 밸런스드 파스 트리를 생성하는 방법

Related Child Applications (1)

Application Number Title Priority Date Filing Date
KR1020190059485A Division KR20190057266A (ko) 2019-05-21 2019-05-21 최적화된 높이를 가지는 밸런스드 파스 트리를 생성하는 방법

Publications (2)

Publication Number Publication Date
KR20180135528A KR20180135528A (ko) 2018-12-21
KR101985309B1 true KR101985309B1 (ko) 2019-06-04

Family

ID=64563432

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020170073401A KR101985309B1 (ko) 2017-06-12 2017-06-12 최적화된 높이를 가지는 밸런스드 파스 트리를 생성하는 방법

Country Status (2)

Country Link
US (1) US10416971B2 (ko)
KR (1) KR101985309B1 (ko)

Families Citing this family (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN115016784B (zh) * 2022-08-08 2022-11-01 宇动源(北京)信息技术有限公司 低代码应用复用方法、应用解析系统、设备及存储介质
CN115866070B (zh) * 2023-01-28 2023-05-02 北京蓝色星际科技股份有限公司 数据处理系统及数据处理方法

Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2011221656A (ja) * 2010-04-06 2011-11-04 Hitachi Ltd 実行コードの生成方法、コンパイラ及びコンパイル装置

Family Cites Families (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5557786A (en) 1994-01-24 1996-09-17 Advanced Computer Applications, Inc. Threaded, height-balanced binary tree data structure
US5966686A (en) * 1996-06-28 1999-10-12 Microsoft Corporation Method and system for computing semantic logical forms from syntax trees
US9176800B2 (en) 2011-08-31 2015-11-03 Micron Technology, Inc. Memory refresh methods and apparatuses
WO2013186588A2 (en) * 2012-06-15 2013-12-19 University Of Calcutta K-ary tree to binary tree conversion through complete height balanced technique
CA2815156C (en) * 2013-05-06 2020-05-05 Ibm Canada Limited - Ibm Canada Limitee Document order management via relaxed node indexing

Patent Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2011221656A (ja) * 2010-04-06 2011-11-04 Hitachi Ltd 実行コードの生成方法、コンパイラ及びコンパイル装置

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
Sung-Hyuk Cha et al, "On Complete and Size Balanced k-ary Tree Integer Sequences", International Journal of Applied Mathematics and Informatics", Vol. 6, No. 2, pp. 67-75(2012.)*

Also Published As

Publication number Publication date
US20180357052A1 (en) 2018-12-13
US10416971B2 (en) 2019-09-17
KR20180135528A (ko) 2018-12-21

Similar Documents

Publication Publication Date Title
EP3631618B1 (en) Automated dependency analyzer for heterogeneously programmed data processing system
US9239710B2 (en) Programming language transformations with abstract syntax tree extensions
US7860863B2 (en) Optimization model for processing hierarchical data in stream systems
US9122540B2 (en) Transformation of computer programs and eliminating errors
US9892144B2 (en) Methods for in-place access of serialized data
US20130055223A1 (en) Compiler with Error Handling
JP2005018767A (ja) クエリオプティマイザのシステムおよび方法
US20090063583A1 (en) Compilation model for processing hierarchical data in stream systems
Reza et al. Prunejuice: pruning trillion-edge graphs to a precise pattern-matching solution
KR101985309B1 (ko) 최적화된 높이를 가지는 밸런스드 파스 트리를 생성하는 방법
CN114327477A (zh) 智能合约执行方法、装置、电子装置和存储介质
US9696976B2 (en) Method for optimizing processing of character string during execution of a program, computer system and computer program for the same
GB2575844A (en) Processing method using binary intermediate representations
CN112988163B (zh) 编程语言智能适配方法、装置、电子设备和介质
WO2023123111A1 (zh) 编译方法以及用于编译的装置
CN111124422A (zh) 一种基于抽象语法树的eos智能合约语言转换方法
KR20190057266A (ko) 최적화된 높이를 가지는 밸런스드 파스 트리를 생성하는 방법
CN115292347A (zh) 一种基于规则的主动式sql算法性能检查装置及方法
CN112860233A (zh) 目标语法树的生成方法以及相关设备
Menon et al. A new evolutionary parsing algorithm for ltag
Takizawa et al. Xevolver for performance tuning of C programs
US20220075778A1 (en) Transforming operations of a computer program for execution at a database
JP5359446B2 (ja) 情報処理システム、アクセスパス決定方法及びアクセスパス決定プログラム
Cicolini et al. One Automaton to Rule Them All: Beyond Multiple Regular Expressions Execution
Maan et al. Parsing C and Fortran code to SymPy Expressions

Legal Events

Date Code Title Description
A201 Request for examination
E902 Notification of reason for refusal
E701 Decision to grant or registration of patent right
A107 Divisional application of patent
GRNT Written decision to grant