KR20230040516A - 자바스크립트의 중간 언어 기반 의미론 추출 자동화 시스템 및 방법 - Google Patents

자바스크립트의 중간 언어 기반 의미론 추출 자동화 시스템 및 방법 Download PDF

Info

Publication number
KR20230040516A
KR20230040516A KR1020210123741A KR20210123741A KR20230040516A KR 20230040516 A KR20230040516 A KR 20230040516A KR 1020210123741 A KR1020210123741 A KR 1020210123741A KR 20210123741 A KR20210123741 A KR 20210123741A KR 20230040516 A KR20230040516 A KR 20230040516A
Authority
KR
South Korea
Prior art keywords
parser
extraction
semantics
token
bnf
Prior art date
Application number
KR1020210123741A
Other languages
English (en)
Other versions
KR102614967B1 (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 KR1020210123741A priority Critical patent/KR102614967B1/ko
Publication of KR20230040516A publication Critical patent/KR20230040516A/ko
Application granted granted Critical
Publication of KR102614967B1 publication Critical patent/KR102614967B1/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/425Lexical analysis
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/10Requirements analysis; Specification techniques
    • 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
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/70Software maintenance or management
    • G06F8/75Structural analysis for program understanding

Landscapes

  • Engineering & Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Devices For Executing Special Programs (AREA)

Abstract

자바스크립트의 중간 언어 기반 의미론 추출 자동화 시스템 및 방법이 개시된다. 일 실시예에 따른 자바스크립트의 중간 언어 기반 의미론 추출 자동화 시스템은, 프로그래밍 언어의 언어 명세서에서 사양 정보를 추출하는 사양 추출부; 및 상기 추출된 사양 정보에 기초하여 구문론을 위한 파서(Parser)와 의미론을 위한 번역기(Translator)를 자동으로 구축하는 의미론 추출 툴체인부를 포함할 수 있다.

Description

자바스크립트의 중간 언어 기반 의미론 추출 자동화 시스템 및 방법{AUTOMATION SYSTEM AND METHOD FOR EXTRACTING INTERMEDIATE REPRESENTATION BASED SEMANTICS OF JAVASCRIPT}
아래의 설명은 프로그래밍 언어의 의미론 추출 기술에 관한 것이다.
자바스크립트는 웹 애플리케이션, 서버-사이드 프로그래밍, IoT 소프트웨어 등에서 널리 사용되고 있는 현대 프로그래밍 언어로, 현재 공개 소프트웨어에서 가장 높은 비중을 차지하고 있다.
유수의 기업(Google, Microsoft, Mozilla, Apple, Oracle 등)들에서는 자바스크립트 프로그램의 실행 환경을 제공하기 위해 자신들만의 자바스크립트 엔진을 구현 및 제공하고 있다. 이러한 자바스크립트 엔진들은 개발자들이 영어로 작성된 공식 언어 명세서인 ECMAScript를 읽고 이해한 후, 수작업으로 구현이 되어왔다.
하지만, 사용자들의 요구에 맞춰 ECMAScript는 2015년 기점으로 해마다 갱신이 되고, 그 크기가 너무 방대해져 엔진 개발자들의 어려움이 나날이 증가하고 있다. 더불어, 이러한 수동 개발 방식은 엔진의 결함률을 높이고, 명세와의 일치성을 보장하기 힘들어진다.
자바스크립트의 중간 언어 기반 의미론 추출 자동화 방법 및 시스템을 제공할 수 있다.
자바스크립트의 중간 언어 기반 의미론 추출 자동화 시스템은, 프로그래밍 언어의 언어 명세서에서 사양 정보를 추출하는 사양 추출부; 및 상기 추출된 사양 정보에 기초하여 구문론을 위한 파서(Parser)와 의미론을 위한 번역기(Translator)를 자동으로 구축하는 의미론 추출 툴체인부를 포함할 수 있다.
상기 의미론 추출 자동화 시스템은, 상기 자동으로 구축된 구문론을 위한 파서와 의미론을 위한 번역기를 통해 프로그래밍 언어의 중간 언어 기반 의미론을 자동으로 추출하는 의미론 추출부를 포함할 수 있다.
상기 의미론 추출 툴체인부는, 사양 추출부에서 읽은 BNFES로 작성된 문법을 JSON 파일로 변환하고, 상기 변환된 JSON 파일 기반의 BNFES로 작성된 문법에서 자바스크립트 파서를 생성하기 위하여 파서 생성기를 구축할 수 있다.
상기 의미론 추출 툴체인부는, 상기 BNFES로 작성된 문법에 대한 미리보기 구문 분석(Lookahead Parsing)이 포함된 PEG(Parsing Expression Grammar) 기반 파서 생성기를 생성하는 것을 포함하고, 상기 PEG 기반 파서 생성기는, 상기 BNFES로 작성된 문법에서 AST를 스칼라 클래스로 자동 합성하고, BNFES에서 각 프로덕션에 대한 파서를 자동으로 합성할 수 있다.
상기 의미론 추출 툴체인부는, 상기 사양 추출부에서 읽은 HTML 태그가 있는 추상 알고리즘을 JSON 파일로 변환하고, 상기 변환된 JSON 파일 기반의 추상 알고리즘을ECMAScript의 중간 표현인 IRES로 정의하고, 파서 결합기를 사용하여 알고리즘 컴파일러를 통해 추상 알고리즘을 IRES 함수로 변환할 수 있다.
상기 의미론 추출 툴체인부는, 상기 변환된 IRES 함수와 수동으로 지정된 전역 설정으로 AST-IRES 번역기를 구축할 수 있다.
상기 의미론 추출 툴체인부는, 상기 알고리즘 컴파일러를 통해 상기 추상 알고리즘을 HTML 태그가 지정된 태그 목록으로 토큰화함에 따라 토큰 목록 파서 및 토큰 AST 변환기를 사용하여 토큰 목록을 IRES 함수로 컴파일할 수 있다.
상기 의미론 추출 툴체인부는, 구분 분석 규칙과 변환 규칙으로 구성된 컴파일 규칙에 기초하여 상기 알고리즘 컴파일러를 통해 상기 토큰 목록을 토큰 AST로 구문 분석하고, 상기 구문 분석된 토큰 AST를 IRES 구성 요소로 변환할 수 있다.
사양 추출부 및 의미론 추출 툴체인부를 포함하는 의미론 추출 자동화 시스템에 의해 수행되는 자바스크립트의 중간 언어 기반 의미론 추출 자동화 방법은, 사양 추출부에서, 프로그래밍 언어의 언어 명세서에서 사양 정보를 추출하는 단계; 및 의미론 추출 툴체인부에서, 상기 추출된 사양 정보에 기초하여 구문론을 위한 파서(Parser)와 의미론을 위한 번역기(Translator)를 자동으로 구축하는 단계를 포함할 수 있다.
상기 구축하는 단계는, 상기 자동으로 구축된 구문론을 위한 파서와 의미론을 위한 번역기를 통해 프로그래밍 언어의 중간 언어 기반 의미론을 자동으로 추출하는 단계를 포함할 수 있다.
상기 구축하는 단계는, 상기 사양 추출부에서 읽은 BNFES로 작성된 문법을 JSON 파일로 변환하고, 상기 변환된 JSON 파일 기반의 BNFES로 작성된 문법에서 자바스크립트 파서를 생성하기 위하여 파서 생성기를 구축하는 단계를 포함할 수 있다.
상기 구축하는 단계는, 상기 BNFES로 작성된 문법에 대한 미리보기 구문 분석(Lookahead Parsing)이 포함된 PEG(Parsing Expression Grammar) 기반 파서 생성기를 생성하는 것을 포함하고, 상기 PEG 기반 파서 생성기는, 상기 BNFES로 작성된 문법에서 AST를 스칼라 클래스로 자동 합성하고, BNFES에서 각 프로덕션에 대한 파서를 자동으로 합성할 수 있다.
상기 구축하는 단계는, 상기 사양 추출부에서 HTML 태그를 사용하여 읽은 추상 알고리즘을 JSON 파일로 변환하고, 상기 변환된 JSON 파일 기반의 추상 알고리즘을ECMAScript의 중간 표현인 IRES로 정의하고, 파서 결합기를 사용하여 알고리즘 컴파일러를 통해 추상 알고리즘을 IRES 함수로 변환하는 단계를 포함할 수 있다.
상기 구축하는 단계는, 상기 변환된 IRES 함수와 수동으로 지정된 전역 설정으로 AST-IRES 번역기를 구축하는 단계를 포함할 수 있다.
상기 구축하는 단계는, 상기 알고리즘 컴파일러를 통해 상기 추상 알고리즘을 HTML 태그가 지정된 태그 목록으로 토큰화함에 따라 토큰 목록 파서 및 토큰 AST 변환기를 사용하여 토큰 목록을 IRES 함수로 컴파일하되, 구분 분석 규칙과 변환 규칙으로 구성된 컴파일 규칙에 기초하여 상기 알고리즘 컴파일러를 통해 상기 토큰 목록을 토큰 AST로 구문 분석하고, 상기 구문 분석된 토큰 AST를 IRES 구성 요소로 변환하는 단계를 포함할 수 있다.
수동으로 이루어졌던 대부분의 자바스크립트 엔진 개발 방식을 자동화하여 엔진 개발 속도를 높이고, 엔진의 안정성을 확보할 수 있다.
중간 언어 기반의 의미론 추출 기법의 자동화 시스템을 통해, 자바스크립트 엔진 개발 자동화하여 낭비되는 인력을 줄이고, 더욱 안정적이고 명세와 일치하는 엔진을 구현할 수 있다.
도 1은 자바스크립트의 중간 언어 기반 의미론 추출 동작을 설명하기 위한 도면이다.
도 2는 일 실시예에 있어서, 자바스크립트의 중간 언어 기반 의미론 추출 자동화 동작을 설명하기 위한 도면이다.
도 3은 일 실시예에 따른 의미론 추출 자동화 시스템에서 자바스크립트의 중간 언어 기반 의미론 추출 자동화 방법을 설명하기 위한 흐름도이다.
도 4는 일 실시예에 있어서, ES10 및 파서의 ArrayLiteral 프로덕션을 설명하기 위한 도면이다.
도 5는 일 실시예에 있어서, ES10에서 ArrayLiteral의 세 번째 대안에 대한 평가 추상 알고리즘 및 생성된 IRES 함수를 설명하기 위한 도면이다.
도 6은 일 실시예에 있어서, 토큰을 추적하는 동작을 설명하기 위한 예이다.
도 7은 일 실시예에 있어서, BNFES 기호의 과대 추정된 첫 번째 토큰을 설명하기 위한 도면이다.
도 8은 일 실시예에 있어서, 미리보기 파서의 형식적 의미론 설명하기 위한 도면이다.
도 9는 일 실시예에 있어서, 알고리즘 컴파일러의 구조를 설명하기 위한 도면이다.
도 10은 일 실시예에 있어서, 구문 분석 규칙을 설명하기 위한 예이다.
이하, 실시예를 첨부한 도면을 참조하여 상세히 설명한다.
실시예에서는 프로그래밍 언어의 중간 언어 기반 의미론 추출 동작에 대하여 설명하기로 한다. 아래에서는 프로그래밍 언어로 자바스크립트를 예를 들어 설명하기로 한다.
도 1은 자바스크립트의 중간 언어 기반 의미론 추출 동작을 설명하기 위한 도면이다.
자바스크립트 엔진을 개발하는 과정은 중간 언어(Intermediate Representation; IR)를 기반으로 하는 의미론(semantics) 추출 방식이 사용되었다. 이러한 방식은 작은 중간 언어를 정의하고, 언어의 구문론(syntax)을 나타내는 자바스크립트 파서(parser)(103)와 의미론(semantics)을 나타내는 AST-IR 번역기(translator)(104)를 의 ECMAScript(101)를 기반으로 수동 구현을 하는 것으로 이루어진다.
ECMAScript(101)는 확장 BNF(EBNF) 표기법의 변형을 사용하여 자바스크립트 구문을 설명하는 공식 규격이며, 명확하고 구조화된 방식으로 영어로 작성된 추상 알고리즘을 사용하여 의미론을 설명한다. 중간 언어 기반 의미론 추출은 주어진 프로그램(자바스크립트 프로그램(102))의 의미론을 간접적으로 나타내기 위해 프로그램을 취하고 중간 언어를 생성하는 컴파일러 프런트엔드를 구축함으로써 언어의 형식적 의미론을 정의하는 방법이다.
도 1을 참고하면, 컴파일러 프런트엔드는 주어진 자바스크립트 프로그램(102)의 AST(Abstract Syntax Tree)를 구성하는 자바스크립트 파서(103)와 AST를 자체 중간 언어(IR)(105)로 변환하는 AST-IR 번역기(104)로 구성될 수 있다.
도 2는 일 실시예에 있어서, 자바스크립트의 중간 언어 기반 의미론 추출 자동화 동작을 설명하기 위한 도면이다.
파서와 번역기를 ECMAScript로부터 자동으로 추출함으로써 자바스크립트 엔진 개발의 핵심 과정인 중간 언어 기반 의미론 추출 방식을 자동화한다. 이러한 중간 언어 기반 의미론 추출을 자동함으로써 실존하는 방대한 양의 현대 프로그래밍 언어의 구문론과 의미론을 자동으로 추출할 수 있다.
도 3을 참고하면, 단계(310)에서 의미론 추출 자동화 시스템(200)은 프로그래밍 언어의 언어 명세서에서 사양 정보를 추출할 수 있다. 단계(320)에서 의미론 추출 자동화 시스템(200)은 추출된 사양 정보에 기초하여 구문론을 위한 파서(Parser)와 의미론을 위한 번역기(Translator)를 자동으로 구축할 수 있다. 이에, 자동으로 구축된 구문론을 위한 파서와 의미론을 위한 번역기를 통해 프로그래밍 언어의 중간 언어 기반 의미론을 자동으로 추출할 수 있다.
상세하게는, 의미론 추출 자동화 시스템(200)은 자바스크립트의 ECMAScript(101)에서 직접 자바스크립트 파서(103)와 AST-IR 번역기(104)를 자동으로 합성할 수 있다. 의미론 추출 자동화 시스템(200)은 구문을 위해 ECMAScript(101)에서 사용되는 확장 BNF 변형인 BNFES에 대한 미리보기 구문 분석(Lookahead Parsing)이 포함된 파서 생성 기법을 제공할 수 있다. 의미론 추출 자동화 시스템(200)은 의미론을 위해 순방향 호환 규칙 기반 컴파일을 사용하여 AST-IR 번역기(104)를 통합할 수 있다. 컴파일 규칙은 구조화된 자연 언어로 작성된 추상 알고리즘의 각 단계를 ECMAScript(101)용으로 설계된 중간 표현인 IRES로 변환하는 방법을 설명한다.
의미론 추출 자동화 시스템(200)은 공통 패턴을 활용하여 사양 추출부(201)의 ECMAScript(101)에서 추출한 JSON 형식의 구문과 의미론을 사용하여 자바스크립트 파서(103)와 AST-IRES 번역기(204)를 합성할 수 있다.
210에서, ECMAScript(101)는 ECMAScript(101)용 EBNF의 변형인 BNFES 을 사용하여 어휘 및 구문 문법을 제공한다. 사양 추출부(201)는 BNFES로 작성된 문법을 읽고 JSON 파일로 변환할 수 있다. 도 4(a)는 ES10의 ArrayLiteral 프로덕션(Production)을 나타낸 것이다. 두 개의 부울 파라미터 Yield 및 Await를 사용하며, 세 가지 대안이 있다. 첫 번째 대안은 세 개의 기호, 즉 두 개의 터미널 기호 [ 와 ] 그리고 하나의 비터미널 기호 Elisionopt로 구성된다. opt 첨자는 선택 사항임을 나타낸다. 두 번째 및 세 번째 대안에서는
Figure pat00001
는 두 개의 인수로 ArrayLiteral의 Yield 및 Await 파라미터를 사용하는 파라메트릭 비터미널 기호 ElementList를 나타낸다. 기호의 접두사
Figure pat00002
는 기호가 인수로 전달됨을 나타낸다.
주어진 BNFES 문법에서 자바스크립트 파서(103)를 생성하기 위해 스칼라(Scala)에 파서 생성기가 구축될 수 있다. 주어진 BNFES문법에 따라 자바스크립트 파서를 합성함에 따라 생성된 파서는 스칼라 파서 결합기로 정의될 수 있다. 또한, BNFES 문법을 효율적으로 구문 분석하기 위하여 미리보기가 가능한 다음 토큰 집합을 추적하는 미리보기 파서를 제안한다. 미리보기 구분 분석 특징을 통해 생성된 파서는 BNFES문법 생성에 대한 일대일 매핑을 갖게 된다. 도 4(b)는 도 4(a)에서 ArrayLiteral 프로덕션을 위해 생성된 파서를 나타낸 것이다. BNFES의 각 프로덕션에는 부울 값이 있는 파라미터가 있으므로 각 파서에는 List [Boolean] = > LAParser[T] 유형이 있다. 메모(memo)는 성능 최적화를 위한 부울 파라미터 쌍과 결과 구문 분석기에 대한 메모화 함수이다. ArrayLiteral 값은 ArrayLiteral 프로덕션에 해당한다. 파서에서 "[" 또는 "]"와 같은 각 string literal은 터미널 기호에 대한 파서를 나타낸다. opt 헬퍼 함수는 선택적 파서를 만든다. Yield 및 Await 인수가 있는 파라메트릭 비터미널 ElementList는 ElementList(Yield, Await)라는 함수로 표시된다.
Figure pat00003
연산자는 두 개의 파서를 결합하고
Figure pat00004
연산자는 AST를 구성하는 방법을 설명한다.
Figure pat00005
의 왼쪽이 일치하면 오른쪽에 해당하는 AST 생성기(constructor)가 표시될 수 있으며, 여기서 각 생성기의 이름에는 대안의 순서를 나타내는 숫자가 있다. 예를 들면, ArrayLiteral0 생성기는 ArrayLiteral 생산의 첫 번째 대체 생성기에 해당한다.
220에서, CMAScript는 언어 의미론을 영어로 추상 알고리즘으로 설명한다. 자연어로 작성되는 동안, 글쓰기 스타일은 순서가 정해진 단계와 태그가 지정된 토큰으로 구성되어 있다. 사양 추출부(201)는 HTML 태그를 사용하여 추상 알고리즘을 읽고 이를 JSON 파일로 변환한다. 예를 들어, 도 5(a)는 ES10에서 ArrayLiteral 프로덕션의 세 번째 대안에 대한 평가 추상 알고리즘을 제시하며, 7단계로 구성될 수 있다. 추상 알고리즘을 설명하는 HTML 파일에는 비터미널 기호(예를 들면, ElementList), 로컬 변수(예를 들면, array), 코드(예를 들면, length), 값(예를 들면, false)으로 각각 <nt>, <var>, <code>, <emu-val> 태그를 가진다.
추상 알고리즘을 조작에 적합한 표현으로 변환하기 위해 ECMAScript(101)의 전문 중간 표현인 IRES가 정의될 수 있다. 그런 다음 스칼라 파서 결합기를 사용하여 스칼라에서 알고리즘 컴파일러(221)를 개발하여 주어진 추상 알고리즘을 IRES 함수로 변환할 수 있다. 또한 구분 분석 규칙과 변환 규칙의 두 부분으로 구성된 다은 입력으로 컴파일 규칙(Compile Rules)을 사용한다.
각 추상 알고리즘은 알고리즘 컴파일러(221)를 통해 IRES로 작성된 함수로 변환될 수 있다. 예를 들면, 도 5(b)는 도 5(a)에 표시된 평가 추상 알고리즘에 대해 생성된 IRES 함수를 나타낸다. ArrayLiteral[2].Evaluation 함수에는 비터미널 기호에 대해 ElementList 및 Elision이라는 두 가지 파라미터가 사용된다. 파라미터 Elision는 비 터미널 기호 Elisionopt가 없을 경우 때 특수 값이 없다. 따라서 4단계의 조건인 "Elision이 존재하지 않는 경우(if Elision is not present)"의 조건을 if(= Elision absent)와 등식 검사로 변환한다. 코드는 문자열 값으로 표시되고 값은 해당 IRES 값으로 표시된다. 예를 들어 코드 "length"와 값 false는 각각 문자열 값 "length"와 부울 값 false로 변환된다.
의미론 추출 자동화 시스템(200)은 주어진 IRES 함수와 수동으로 지정된 전역 설정으로 AST-IRES 번역기(204)를 구성할 수 있다. 표준 내장 객체, ECMAScript 데이터 타입 등 ECMAScript(101)에 기술된 자바스크립트 프로그램(102)을 평가하는 데 필요한 정보를 가지고 있다. 이를 종합하면, 의미론 추출 자동화 시스템(200)에 의해 생성된 자바스크립트 파서(103)와 AST-IRES 번역기(204)를 통해 주어진 자바스크립트 프로그램(102)을 IRES로 번역할 수 있다. 파서 및 번역기 구축에 드는 노력을 크게 줄일 수 있다.
상세하게는, 파서 생성기에 대하여 설명하기로 한다. ECMAScript(101)를 이용하여 자바스크립트 파서가 자동으로 생성될 수 있다.
ECMAScript는 확장된 BNF의 변형을 사용하여 자바스크립트 구문을 설명한다. 공식적으로 표기법을 정의하고 BNFES라고 부른다. 다음과 같은 형식의 여러 프로덕션으로 구성될 수 있다.
Figure pat00006
Figure pat00007
의 좌변은 다중 부울 파라미터 p1,
Figure pat00008
, pk를 가지는 파라메트릭 비터미널 A를 나타낸다. 비터미널이 파라미터를 사용하지 않는 경우 간결성을 위해 괄호가 생략될 수 있다. 하나의 프로덕션에는 옵션 조건을 가진 |로 구분된 여러 대안이 있다. 조건 c는 부울 파라미터 p 또는 해당 없음 !p이다. 대안
Figure pat00009
는 일련의 기호이며, 여기서 기호 s는 다음 중 하나이다.
Figure pat00010
: 빈 순서, 아무 조건 없이 통과
Figure pat00011
: 토큰인 터미널
Figure pat00012
: 비터미널, 각 인수
Figure pat00013
가 부울 값 #t 또는 #f인 경우, 또는 파라미터
Figure pat00014
인 경우 여러 인수를 사용
Figure pat00015
: 옵션,
Figure pat00016
와 동일한 옵션
Figure pat00017
: 양수(음수) 미리보기, s가 성공(실패)하는지 여부를 확인하고 입력을 전혀 소비하지 않음
Figure pat00018
: 제외, 먼저 s의 성공 여부를 확인한 다음 구문 분석 결과가 s와 일치하지 않는지 여부를 확인
Figure pat00019
: 비 line-terminator, 두 개의 다른 기호 사이의 공백을 제한하는 특수 기호
예를 들면, 다음이 고려될 수 있다.
Figure pat00020
Figure pat00021
Figure pat00022
를 의미하고,
Figure pat00023
Figure pat00024
를 의미한다.
BNFES를 올바르게 지원하기 위해 미리보기 구분 분석(Lookahead Parsing)을 통해 PEG 기반 파서 생성으로 확장될 수 있다. 대부분의 파서 생성기는 컨텍스트 프리 문법(Context-Free Grammar; CFG)에 대한 특정 구문 분석 알고리즘을 사용하여 컨텍스트 프리 언어를 대상으로 한다. 그러나, ECMAScript 어휘 및 구문 문법에는 컨텍스트에 민감한 렉서(lexer)와 파서가 필요하기 때문에 ECMAScript 구문에 직접 적용할 수 없다.
JavaScript 정규식과 템플릿 문자열 때문에 ECMAScript 토큰은 상황에 따라 다르다. 예를 들어 /x/g는 하나의 정규식 토큰일 수도 있고, 둘러쌓인 컨텍스트에 따라 x 및 g 변수로 분할을 나타내는 4개의 토큰일 수도 있다. 따라서 렉서는 구문 분석 전에 평가하지 말고 구문 분석 중에 평가해야 한다.
BNFES는 양수(음수) 미리보기 +s(-s), 제외
Figure pat00025
, line-terminator
Figure pat00026
가 없는 컨텍스트에 맞는(맥락적) 기호를 지원한다. 표현력이 뛰어나고 다음과 같은 프로덕션으로 컨텍스트와 무관한(비문맥락적) 고전적인 언어
Figure pat00027
을 표현할 수도 있다.
Figure pat00028
CFG 기반 파서 생성기에서 이러한 BNFES 기호를 지원하는 것은 중요한 일이다. CFG 기반 파서 생성기와 달리, PEG(Parsing Expression Grammar) 기반의 파서 생성기는 이러한 문제를 쉽게 해결할 수 있다. PEG는 역추적 기능이 있는 하향(LL-style) 재귀 하강 파서로 정의된다. 각 프로덕션의 대안을 순서대로 방문하고 구문 분석 실패 시 이전 프로덕션로 역추적한다. PEG 기반 파서 생성기는 렉서를 파서로 처리하므로 구문 분석 컨텍스트에 따라 적절한 렉서를 사용할 수 있다. 또한 PEG는 BNFES에서 각각 양수 및 음수 미리보기 기호의 동일한 의미를 나타내는 예측(&) 연산자와 비예측(!) 연산자를 지원한다. 따라서 PEG 기반 파서 생성기에서 컨텍스트에 맞는 토큰과 BNFES 기호를 쉽게 지원할 수 있다.
PEG 기반 파서 생성기는 컨텍스트별 민감도를 지원하는 반면, PEG는 BNFES와 한 가지 근본적인 차이점, 즉 우선순위 선택이 있다. PEG는 BNFES에서 순서가 지정되지 않은 파이프 연산자
Figure pat00029
대신 우선순위가 지정된 선택 연산자
Figure pat00030
를 사용한다. 여러 대안이 적용되는 경우에도 PEG는 항상 첫 번째 성공적인 대안을 선택한다. 예를 들어, 다음과 같은 BNFES를 고려해보기로 한다.
수학식 1:
Figure pat00031
예상대로, 이 문법은 x+x.p 문자열을 허용한다. 그러나 다음 PEG는 동일한 문자열 x+x.p를 허용하지 않는다.
수학식 2:
Figure pat00032
입력 문자열이 x로 시작할 때마다 E의 첫 번째 대안 x가 선택되므로 E의 두 번째 대체 x.p에 항상 연결할 수 없다. 문자열을 받아들이는 간단한 솔루션은
Figure pat00033
와 같은 E의 대안 순서를 변경하는 것이다.
모든 경우에 단순 순서 변경이 일반적인 솔루션은 아니다. 다음 BNFES를 고려해보기로 한다.
수학식 3:
Figure pat00034
그것은 문자열
Figure pat00035
Figure pat00036
를 모두 허용한다. 그러나, 아래의 PEG는
Figure pat00037
만 허용하고,
수학식 4:
Figure pat00038
재정렬된(순서가 변경된) 프로덕션의 다른 PEG는 다음과 같이
Figure pat00039
만 허용한다.
수학식 5:
Figure pat00040
미리보기 PEG에 대한 확장 구문 분석 알고리즘인 미리보기 구문 분석(Lookahead Parsing)이 제공될 수 있다. 미리보기 구문 분석(Lookahead Parsing)의 핵심은 도 6의 알고리즘을 사용하여 각 기호에 대한 첫번째 토큰 집합을 정적으로 계산하여 가능한 다음 토큰을 추적하는 것이다. 예를 들어, 다음 단계에서는 수학식 1에서 PEG를 사용하여 x+x.p 문자열을 구문 분석하는 동안 미리보기 토큰을 활용하는 방법을 설명하기로 한다.
도 7을 참고하면, 각 노드 s[L]은 미리보기 토큰L 집합이 있는 기호 s를 나타낸다. 각 노드의 문자열에 밑줄이 그어진 문자는 사전 순서 순회(pre-order traversal)를 따르는 구문 분석 프로세스의 현재 위치를 나타낸다. 파서는 비터미널 S부터 시작하여 입력의 끝을 나타내는 특별한 미리보기
Figure pat00041
를 사용한다. 그런 다음, 동일한 미리보기
Figure pat00042
로 첫 번째 대안 E+E를 방문한다. 각 기호는 오른쪽 다음 기호의 첫 번째 토큰인 해당 미리보기와 함께 방문될 수 있다. 예를 들어 E + E에서 두 번째 기호 +의 경우 다음 기호는 E이고 첫 번째 토큰은 다음과 같다.
Figure pat00043
따라서 파서는 +를 미리보기 x와 함께 방문한다. 여기서 가장 중요한 점은 E + E에서 터미널이 아닌 E의 두 방문 간의 차이이다. E의 첫 번째 방문은 미리보기 +이고, x를 매칭한 후의 실제 다음 문자도 +이다. 따라서 첫 번째 방문에는 E의 첫 번째 대안 x가 선택된다. 그러나 E의 두 번째 방문에서 미리보기는 입력의 끝 이지만 x를 일치시킨 다음 문자는 입력의 끝 대신 점 문자(.)이다. 따라서 두 번째 방문에서 두 번째 대안 x.p가 선택되고 이제 파서가 입력 x+x.p를 성공적으로 구문 분석한다. 도 8에서 미리보기 파서의 의미론을 공식적으로 정의하기로 한다. 헬퍼 함수 gets(L)는 우선 순위 선택을 사용하여 미리보기 L의 모든 토큰을 결합하여 파서를 생성할 수 있다. 이 경우 gets(L)는 주어진 토큰의 존재 여부만 확인하므로 순서는 미리보기 파서의 의미를 변경하지 않는다.
PEG 기반 파서 생성을 위한 스칼라 라이브러리인 스칼라 파서 결합기 라이브러리를 확장하여 미리보기 구문 분석 기법이 구현될 수 있다. BNFES에 대한 전망 분석과 함께 PEG 기반 파서를 합성하기 위해 파서 생성기가 제공될 수 있다.
파서 생성기는 먼저 주어진 BNFES 문법에서 AST를 스칼라 클래스로 자동 합성한다. 어휘 프로덕션의 구조는 ECMAScript 의미론에는 영향을 미치지 않기 때문에, 어휘적 비터미널을 문자열 값으로 표현한다. 각 구문 프로덕션
Figure pat00044
Figure pat00045
생성기는 특성 A와 그 다중 서브클래스
Figure pat00046
를 합성하여 그 대안을 나타내는
Figure pat00047
에 대하여 생성한다. 각 클래스
Figure pat00048
에는 해당 필드에 비터미널이 있다. 예를 들어, 도 4의 ArrayLiteral 연산은 다음과 같은 스칼라 클래스로 자동 변환될 수 있다.
다음 단계는 BNFES에서 각 프로덕션에 대한 파서를 자동으로 합성하는 것이다. 스칼라 파서 결합기를 확장하여 미리보기 구문 분석(Lookahead Parsing) 및 BNFES 표기법을 지원한다. 예를 들어, 도 4(a)의 프로덕션 ArrayLiteral에서 합성된 파서가 도 4(b)의 파서이다. 역추적으로 인해 미리보기 구문 분석(Lookahead Parsing)의 구현은 기하급수적인 시간이 소요될 수 있다. 예를 들면, 선형 시간으로 줄이기 위해 비특허문헌 1(Bryan Ford. 2002. Packrat Parsing:: Simple, Powerful, Lazy, Linear Time, Functional Pearl. In In Proceedings of the Seventh ACM SIGPLAN International Conference on Functional Programming (ICFP '02). ACM, New York, NY, USA, 36-47. https://doi.org/10.1145/581478.581483)의 Packrat 구문 분석에 도입된 메모화 기법이 적용될 수 있고, 비특허문헌 2(Alessandro Warth, James R. Douglass, and Todd Millstein. 2008. Packrat Parsers Can Support Left Recursion. In In Proceedings of the 2008 ACM SIGPLAN Symposium on Partial Evaluation and Semantics-based Program Manipulation (PEPM '08). ACM, New York, NY, USA, 103-110. https://doi.org/10.1145/1328408.1328424) 가 제시하는 성장 seed 기술을 구현하여 직접 및 간접 재귀 프로덕션이 지원될 수 있다. BNFES에서 각 프로덕션의 구조를 바꾸지 않고도 파서 합성이 가능하다. 합성된 파서는 ECMAScript의 가장 독특한 구문 분석 기능 중 하나인 자동 세미콜론 삽입 알고리즘도 지원한다. 주어진 입력에서 구문 분석되지 않는 가장 오른쪽 위치를 추적하기 위해 구문 분석 알고리즘이 확장될 수 있다. ECMAScript에서 해당 위치의 토큰은 문제가 되는 토큰으로 정의되며 자동 세미콜론 삽입 알고리즘은 이러한 토큰으로 정의된다. 토큰의 위치를 알고 있다면 알고리즘은 간단하다.
도 9를 참고하면, IRES 함수에 추상 알고리즘을 컴파일하는 알고리즘 컴파일러에 대하여 설명하기로 한다.
토큰화(Tokenizer)(910)
토큰화는 추상 알고리즘을 컴파일하기 전에 먼저 각 추상 알고리즘을 태그가 지정된 토큰 목록(920)으로 토큰화한다. 알고리즘은 순서가 지정된 단계로 구성되며 단계에 하위 단계도 포함될 수 있다. 예를 들어, 도 5(a)의 평가 추상 알고리즘은 7단계로 구성된다. 또한 각 단계의 토큰은 자체 HTML 태그를 가지고 있으며 각 태그에는 의미가 있다. 보다 정밀한 컴파일 규칙을 생성하기 위해 각 토큰에 대해 이러한 HTML 태그 정보를 유지한다. HTML 요소가 명시적 태그가 없는 텍스트일 경우 여러 토큰으로 분할되고 각 토큰은 영숫자 문자 또는 영숫자가 아닌 문자 한 개의 시퀀스가 된다. 예를 들어 평가 알고리즘에서 "length"는 HTML 태그가 <code>인 단일 코드이고 Perform Set
Figure pat00049
은 Perform, Set,
Figure pat00050
으로 구분되는 세 개의 텍스트 토큰이다.
또한 토큰화는 구조화된 단계를 단일 토큰 목록으로 평활화하여 여러 단계의 서술을 처리한다. 추상 알고리즘의 일부 문장은 여러 단계로 구성된다. 예를 들어 if-then-else 문은 종종 두 단계로 구성된다. 하나는 then 분기에 대한 단계이고 다른 하나는 else 분기에 대한 단계이다. 선형 구조로 취급하기 위해 구조화된 알고리즘을 분해하는 세 가지 특수 토큰이 도입될 수 있다.
Figure pat00051
는 한 단계의 끝을 나타낸다.
Figure pat00052
Figure pat00053
는 중첩된 단계의 시작과 끝을 나타낸다. 예를 들어, 다음과 같은 왼쪽 추상 알고리즘은 오른쪽의 토큰 목록(920)으로 토큰화된다.
Figure pat00054
추상 알고리즘을 토큰화한 후 알고리즘 컴파일러는 토큰 목록 파서(930) 및 토큰 AST 변환기(950)를 사용하여 토큰 목록(920)을 IRES 함수로 컴파일한다. 이러한 규칙은 구문 분석 규칙과 변환 규칙으로 구성된 컴파일 규칙에 따라 달라진다.
Figure pat00055
각 컴파일 규칙에 대해 구문 분석 규칙은 지정된 토큰 목록을 구조화된 토큰 AST로 구문 분석하는 방법을 설명하고 변환 규칙은 지정된 토큰 AST 구조를 IRES 구성 요소로 변환하는 방법을 설명한다. 이제 각각의 구문 분석 규칙과 변환 규칙이 포함된 토큰 목록 파서(930)와 토큰 AST 변환기(950)에 대해 설명하기로 한다.
토큰 목록 파서(930)
토큰 목록 파서(930)는 구문 분석 규칙으로 정의될 수 있다. 구문 분석 규칙은 기본 구문 분석 규칙 또는 여러 구문 분석 규칙의 구성이다. 두 구문 분석 규칙 A와 B의 구성
Figure pat00056
는 두 개의 규칙을 사용하여 입력을 구문 분석하고 가장 긴 일치 결과를 수집한다. 두 규칙이 모두 실패하거나 입력의 동일한 길이와 일치하면 합성은 실패한다. 이에, 태그 기반 규칙과 내용 기반 규칙의 두 가지 기본 구문 분석 규칙을 제공한다. 태그 기반 규칙은 다음 토큰에 지정된 태그가 있는지 여부만 확인한다. 예를 들어 태그 기반 구문 분석기 varT와 codeT는 다음 토큰에 각각 <var> 및 <code> 태그가 있는지 확인한다. 내용 기반 구문 분석기는 다음 토큰이 텍스트 토큰인지 확인하고 해당 내용이 지정된 조건을 만족하는지 확인한다. 예를 들어 string literal "Perform"은 다음 토큰이 Perform이라는 내용의 텍스트 토큰인지 확인하는 내용 기반 구문 분석기를 나타낸다. 또한 다음 토큰의 내용이 각각 알파벳으로만 구성되어 있는지 숫자로만 구성되어 있는지 확인하는 내용 기반 파서 워드 2개와 숫자 2개를 정의한다. 또한 선택적 규칙
Figure pat00057
와 양(부정) 술어 +A(-A)와 같은 여러 헬퍼 함수를 제공한다. 예를 들어, 헬퍼 함수 repsep(A, B)는 다른 구문 분석 규칙 B를 구분 기호로 사용하여 구문 분석 규칙 A의 반복이 0회 이상임을 나타내는 새로운 구문 분석 규칙을 생성한다. 도 10을 참고하여 도 5(a)의 평가 알고리즘 5단계에 대한 다음 구문 분석 규칙을 고려해 보기로 한다.
Figure pat00058
간결성을 위해 각 컴파일 규칙에 대한 변환 규칙을 생략할 수 있다. Stmt 컴파일 규칙은 단일 구문 분석 규칙으로 명령문을 컴파일하는 방법을 설명하고 Expr 컴파일 규칙은 5개의 구문 분석 규칙으로 표현식을 컴파일하는 방법을 설명한다. 위의 규칙을 가진 토큰 파서는 평가의 5단계를 다음 토큰 AST로 구문 분석한다.
토큰 AST 변환기(950)
변환 규칙은 지정된 토큰 AST(940)에 대한 IRES 함수를 생성하는 방법을 설명한다. 각 변환 규칙은 해당하는 구문 분석 규칙으로 정의된다. 기본 구문 분석 규칙의 경우 변환 규칙은 항상 구문 분석 토큰으로 내용의 문자열 값을 반환한다. 예를 들어, 다음 변환 규칙은 평가의 5단계에서 누락된 부분이다.
Figure pat00059
Stmt 컴파일 규칙의 변환 규칙은 두 번째 하위 트리만 사용하며 IExpr IRES 명령을 구성한다. 두 번째 하위 트리의 경우 다섯 번째 Expr 컴파일 규칙의 변환 규칙이 적용된다. 첫 번째 하위 트리의 문자열 값과 세 번째 하위 트리의 식 시퀀스로 ECall IRES 식을 구성한다. 이러한 방식으로 평가의 5단계는 도 5(b)의 7번째 줄에 해당하는 다음과 같은 IRES 명령으로 변환된다.
Figure pat00060
다음과 같은 설계 선택(동적 타이핑, 명령형 스타일, 제한된 범위의 고차 함수, 초기값, 추상 데이터 유형 등)을 통해 추상 알고리즘을 함수로 표현하기 위해 IRES가 정의될 수 있다.
추상 알고리즘의 각 변수는 정적 유형이 아니기 때문에 IRES의 각 값에는 동적 유형이 있는 반면 변수에는 자체 정적 유형이 없다. IRES는 각 명령이 환경과 힙[heap]으로 구성된 현재 상태를 변화시킨다는 의미에서 알고리즘 단계를 명령형 지침을 나타낸다. IRES의 각 함수에서는 전역 변수, 파라미터 및 해당 로컬 변수만 사용할 수 있으므로 함수 폐쇄가 현재 환경을 캡처하지 않는다. 추상 알고리즘을 나타내기에 충분하기 때문에 이러한 제한된 범위를 사용한다. IRES는 기호를 싱글톤 객체로 나타낼 수 있기 때문에 "기호"를 제외한 ECMScript 초기값을 지원한다. 또한 IRES는 고유한 부재 값을 제공하여 파라미터의 부재 상태를 나타낸다. 예를 들어, 도 5(a)에서 평가의 선택적 두 번째 파라미터 Elision이 없는 경우 파라미터는 '없음' 값을 가진다. IRES는 세 가지 추상 데이터 유형만 지원한다. 값에서 값으로 매핑하는 경우 기록, 순차 데이터 목록 및 단일 데이터 기호이다. 예를 들어 ECMScript 환경 레코드는 문자열 값에서 문자열 값의 바인딩을 나타내는 주소로 Record로 표시된다.
각각 표기 i와 e로 15가지 명령어와 26가지 표현식이 있는 IRES의 구문이 정의될 수 있다. 또한, 명령어에 대한 운영 의미론
Figure pat00061
과 표현식에 대한
Figure pat00062
를 공식적으로 정의한다. 여기서
Figure pat00063
는 상태를 나타내고 v는 값을 나타낸다.
스칼라 파서 결합기를 통해 알고리즘 컴파일러(221)이 구현될 수 있다. 가장 긴 일치 결과를 모두 수집하기 위해 합성 연산자(
Figure pat00064
)의 의미가 수정될 수 있다. 구문 분석기가 구문 분석할 수 없거나 여러 가지 방법으로 구문 분석할 수 없는 단계를 탐지하는 경우 구문 분석 결과가 포함된 단계를 보고한다.
알고리즘 컴파일러를 사용하려면 지정된 추상 알고리즘을 IRES 함수에 컴파일하기 위한 컴파일 규칙이 필요하다. 앞서 설명한 바와 같이, 추상 알고리즘의 작성 스타일에서 공통적인 패턴이 발견될 수 있다. 표 1에 요약된 바와 같이 6가지 다른 종류의 쓰기 스타일을 표현하기 위해 일반 컴파일 규칙이 정의될 수 있다.
표 1: ECMAScript에 대한 컴파일 규칙
Figure pat00065
문장 컴파일 규칙인 Stmt는 IRES 지침을 생성한다. Expr, Cond, Value 컴파일 규칙은 IRES 표현식을 생성하지만 ECMScript에서 서로 다른 컨텍스트를 나타낸다. Expr은 표현식에서 나타날 수 있는 컨텍스트를 나타내고 Cond는 부울 값 표현식이 나타날 수 있는 컨텍스트를 나타내며 Value는 완전히 평가된 값이 나타날 수 있는 컨텍스트를 나타낸다. Ty 컴파일 규칙은 유형 이름을 나타내며 객체 구성에 사용되는 문자열 원형을 생성한다. Ref 컴파일 규칙은 객체의 식별자 조회 및 멤버 액세스와 같은 참조를 나타내며 IRES 참조를 생성한다.
AST-IRES 번역기(204)는 ECMAScript의 데이터 유형과 내장 객체로 구성된 전역 설정을 사용한다. 컴파일 규칙과 달리 전역 설정은 ECMAScript 버전에 따라 달라진다. 실시예에서는 최신 ECMAScript인 ES10에 대해서만 전역 설정을 구성한다.
ECMAScript는 일부 필드 및 방법이 포함된 데이터 유형을 설명한다. 방법은 추상 알고리즘과 같지만, 그 의미론은 추상 알고리즘과 약간 다르다. 호출 사이트에서 수신기 객체를 인수로 암시적으로 가져온다. 이러한 암묵적 동작을 흉내내기 위해 특수 변수를 각 방법의 첫 번째 파라미터로 추가하고 알고리즘 컴파일러를 수정하여 호출 사이트에서 수신기 객체를 전달한다. 예를 들어 환경 레코드 유형에는 DeleteBinding(N) 방법이 있다. 따라서 IRES 함수는 특수 파라미터와 일반 파라미터 N의 두 가지 파라미터를 가지며, 추상 알고리즘의 방법 호출은 IRES 명령어(DclRec.DeleteBinding DclRec N)로 컴파일 된다.
ECMAScript에서 내장 객체는 몇 가지 내장 함수를 가진 미리 정의된 함수이다. 예를 들어 Array는 배열 객체의 생성기이며, 해당 프로토타입인 Array.prototype에는 배열 객체에 대한 함수가 내장되어 있다. 일례로,
Figure pat00066
은 배열 [1,2,3]을 가지는 Array.protype.flat 내장 함수를 호출한다. 내장 함수 역시 추상 알고리즘이기 때문에 각각 IRES 함수로 자동 변환된다. 그러나 내장 객체의 구조는 수동으로 구현해야 한다. 따라서 스칼라에 내장 객체를 구현하고 추출된 IRES 함수와 속성을 연결했다. 추상 알고리즘에서 명시적으로 참조되는 일부 내장 객체는 고유한 객체이다.
이상에서 설명된 장치는 하드웨어 구성요소, 소프트웨어 구성요소, 및/또는 하드웨어 구성요소 및 소프트웨어 구성요소의 조합으로 구현될 수 있다. 예를 들어, 실시예들에서 설명된 장치 및 구성요소는, 예를 들어, 프로세서, 콘트롤러, ALU(arithmetic logic unit), 디지털 신호 프로세서(digital signal processor), 마이크로컴퓨터, FPGA(field programmable gate array), PLU(programmable logic unit), 마이크로프로세서, 또는 명령(instruction)을 실행하고 응답할 수 있는 다른 어떠한 장치와 같이, 하나 이상의 범용 컴퓨터 또는 특수 목적 컴퓨터를 이용하여 구현될 수 있다. 처리 장치는 운영 체제(OS) 및 상기 운영 체제 상에서 수행되는 하나 이상의 소프트웨어 애플리케이션을 수행할 수 있다. 또한, 처리 장치는 소프트웨어의 실행에 응답하여, 데이터를 접근, 저장, 조작, 처리 및 생성할 수도 있다. 이해의 편의를 위하여, 처리 장치는 하나가 사용되는 것으로 설명된 경우도 있지만, 해당 기술분야에서 통상의 지식을 가진 자는, 처리 장치가 복수 개의 처리 요소(processing element) 및/또는 복수 유형의 처리 요소를 포함할 수 있음을 알 수 있다. 예를 들어, 처리 장치는 복수 개의 프로세서 또는 하나의 프로세서 및 하나의 콘트롤러를 포함할 수 있다. 또한, 병렬 프로세서(parallel processor)와 같은, 다른 처리 구성(processing configuration)도 가능하다.
소프트웨어는 컴퓨터 프로그램(computer program), 코드(code), 명령(instruction), 또는 이들 중 하나 이상의 조합을 포함할 수 있으며, 원하는 대로 동작하도록 처리 장치를 구성하거나 독립적으로 또는 결합적으로(collectively) 처리 장치를 명령할 수 있다. 소프트웨어 및/또는 데이터는, 처리 장치에 의하여 해석되거나 처리 장치에 명령 또는 데이터를 제공하기 위하여, 어떤 유형의 기계, 구성요소(component), 물리적 장치, 가상 장치(virtual equipment), 컴퓨터 저장 매체 또는 장치에 구체화(embody)될 수 있다. 소프트웨어는 네트워크로 연결된 컴퓨터 시스템 상에 분산되어서, 분산된 방법으로 저장되거나 실행될 수도 있다. 소프트웨어 및 데이터는 하나 이상의 컴퓨터 판독 가능 기록 매체에 저장될 수 있다.
실시예에 따른 방법은 다양한 컴퓨터 수단을 통하여 수행될 수 있는 프로그램 명령 형태로 구현되어 컴퓨터 판독 가능 매체에 기록될 수 있다. 상기 컴퓨터 판독 가능 매체는 프로그램 명령, 데이터 파일, 데이터 구조 등을 단독으로 또는 조합하여 포함할 수 있다. 상기 매체에 기록되는 프로그램 명령은 실시예를 위하여 특별히 설계되고 구성된 것들이거나 컴퓨터 소프트웨어 당업자에게 공지되어 사용 가능한 것일 수도 있다. 컴퓨터 판독 가능 기록 매체의 예에는 하드 디스크, 플로피 디스크 및 자기 테이프와 같은 자기 매체(magnetic media), CD-ROM, DVD와 같은 광기록 매체(optical media), 플롭티컬 디스크(floptical disk)와 같은 자기-광 매체(magneto-optical media), 및 롬(ROM), 램(RAM), 플래시 메모리 등과 같은 프로그램 명령을 저장하고 수행하도록 특별히 구성된 하드웨어 장치가 포함된다. 프로그램 명령의 예에는 컴파일러에 의해 만들어지는 것과 같은 기계어 코드뿐만 아니라 인터프리터 등을 사용해서 컴퓨터에 의해서 실행될 수 있는 고급 언어 코드를 포함한다.
이상과 같이 실시예들이 비록 한정된 실시예와 도면에 의해 설명되었으나, 해당 기술분야에서 통상의 지식을 가진 자라면 상기의 기재로부터 다양한 수정 및 변형이 가능하다. 예를 들어, 설명된 기술들이 설명된 방법과 다른 순서로 수행되거나, 및/또는 설명된 시스템, 구조, 장치, 회로 등의 구성요소들이 설명된 방법과 다른 형태로 결합 또는 조합되거나, 다른 구성요소 또는 균등물에 의하여 대치되거나 치환되더라도 적절한 결과가 달성될 수 있다.
그러므로, 다른 구현들, 다른 실시예들 및 특허청구범위와 균등한 것들도 후술하는 특허청구범위의 범위에 속한다.

Claims (15)

  1. 자바스크립트의 중간 언어 기반 의미론 추출 자동화 시스템에 있어서,
    프로그래밍 언어의 언어 명세서에서 사양 정보를 추출하는 사양 추출부; 및
    상기 추출된 사양 정보에 기초하여 구문론을 위한 파서(Parser)와 의미론을 위한 번역기(Translator)를 자동으로 구축하는 의미론 추출 툴체인부
    를 포함하는 의미론 추출 자동화 시스템.
  2. 제1항에 있어서,
    상기 의미론 추출 자동화 시스템은,
    상기 자동으로 구축된 구문론을 위한 파서와 의미론을 위한 번역기를 통해 프로그래밍 언어의 중간 언어 기반 의미론을 자동으로 추출하는 의미론 추출부
    를 더 포함하는 것을 특징으로 하는 의미론 추출 자동화 시스템.
  3. 제1항에 있어서,
    상기 의미론 추출 툴체인부는,
    사양 추출부에서 읽은 BNFES로 작성된 문법을 JSON 파일로 변환하고, 상기 변환된 JSON 파일 기반의 BNFES로 작성된 문법에서 자바스크립트 파서를 생성하기 위하여 파서 생성기를 구축하는
    것을 특징으로 하는 의미론 추출 자동화 시스템.
  4. 제3항에 있어서,
    상기 의미론 추출 툴체인부는,
    상기 BNFES로 작성된 문법에 대한 미리보기 구문 분석(Lookahead Parsing)이 포함된 PEG(Parsing Expression Grammar) 기반 파서 생성기를 생성하는 것을 포함하고,
    상기 PEG 기반 파서 생성기는, 상기 BNFES로 작성된 문법에서 AST를 스칼라 클래스로 자동 합성하고, BNFES에서 각 프로덕션에 대한 파서를 자동으로 합성하는
    것을 특징으로 하는 의미론 추출 자동화 시스템.
  5. 제1항에 있어서,
    상기 의미론 추출 툴체인부는,
    상기 사양 추출부에서 읽은 HTML 태그가 있는 추상 알고리즘을 JSON 파일로 변환하고, 상기 변환된 JSON 파일 기반의 추상 알고리즘을ECMAScript의 중간 표현인 IRES로 정의하고, 파서 결합기를 사용하여 알고리즘 컴파일러를 통해 추상 알고리즘을 IRES 함수로 변환하는
    것을 특징으로 하는 의미론 추출 자동화 시스템.
  6. 제5항에 있어서,
    상기 의미론 추출 툴체인부는,
    상기 변환된 IRES 함수와 수동으로 지정된 전역 설정으로 AST-IRES 번역기를 구축하는
    것을 특징으로 하는 의미론 추출 자동화 시스템.
  7. 제5항에 있어서,
    상기 의미론 추출 툴체인부는,
    상기 알고리즘 컴파일러를 통해 상기 추상 알고리즘을 HTML 태그가 지정된 태그 목록으로 토큰화함에 따라 토큰 목록 파서 및 토큰 AST 변환기를 사용하여 토큰 목록을 IRES 함수로 컴파일하는
    것을 특징으로 하는 의미론 추출 자동화 시스템.
  8. 제7항에 있어서,
    상기 의미론 추출 툴체인부는,
    구분 분석 규칙과 변환 규칙으로 구성된 컴파일 규칙에 기초하여 상기 알고리즘 컴파일러를 통해 상기 토큰 목록을 토큰 AST로 구문 분석하고, 상기 구문 분석된 토큰 AST를 IRES 구성 요소로 변환하는
    것을 특징으로 하는 의미론 추출 자동화 시스템.
  9. 사양 추출부 및 의미론 추출 툴체인부를 포함하는 의미론 추출 자동화 시스템에 의해 수행되는 자바스크립트의 중간 언어 기반 의미론 추출 자동화 방법에 있어서,
    사양 추출부에서, 프로그래밍 언어의 언어 명세서에서 사양 정보를 추출하는 단계; 및
    의미론 추출 툴체인부에서, 상기 추출된 사양 정보에 기초하여 구문론을 위한 파서(Parser)와 의미론을 위한 번역기(Translator)를 자동으로 구축하는 단계
    를 포함하는 의미론 추출 자동화 방법.
  10. 제9항에 있어서,
    상기 구축하는 단계는,
    상기 자동으로 구축된 구문론을 위한 파서와 의미론을 위한 번역기를 통해 프로그래밍 언어의 중간 언어 기반 의미론을 자동으로 추출하는 단계
    를 더 포함하는 의미론 추출 자동화 방법.
  11. 제9항에 있어서,
    상기 구축하는 단계는,
    상기 사양 추출부에서 읽은 BNFES로 작성된 문법을 JSON 파일로 변환하고, 상기 변환된 JSON 파일 기반의 BNFES로 작성된 문법에서 자바스크립트 파서를 생성하기 위하여 파서 생성기를 구축하는 단계
    를 포함하는 의미론 추출 자동화 방법.
  12. 제11항에 있어서,
    상기 구축하는 단계는,
    상기 BNFES로 작성된 문법에 대한 미리보기 구문 분석(Lookahead Parsing)이 포함된 PEG(Parsing Expression Grammar) 기반 파서 생성기를 생성하는 것을 포함하고,
    상기 PEG 기반 파서 생성기는, 상기 BNFES로 작성된 문법에서 AST를 스칼라 클래스로 자동 합성하고, BNFES에서 각 프로덕션에 대한 파서를 자동으로 합성하는
    것을 특징으로 하는 의미론 추출 자동화 방법.
  13. 제9항에 있어서,
    상기 구축하는 단계는,
    상기 사양 추출부에서 HTML 태그를 사용하여 읽은 추상 알고리즘을 JSON 파일로 변환하고, 상기 변환된 JSON 파일 기반의 추상 알고리즘을ECMAScript의 중간 표현인 IRES로 정의하고, 파서 결합기를 사용하여 알고리즘 컴파일러를 통해 추상 알고리즘을 IRES 함수로 변환하는 단계
    를 포함하는 의미론 추출 자동화 방법.
  14. 제13항에 있어서,
    상기 구축하는 단계는,
    상기 변환된 IRES 함수와 수동으로 지정된 전역 설정으로 AST-IRES 번역기를 구축하는 단계
    를 포함하는 의미론 추출 자동화 방법.
  15. 제13항에 있어서,
    상기 구축하는 단계는,
    상기 알고리즘 컴파일러를 통해 상기 추상 알고리즘을 HTML 태그가 지정된 태그 목록으로 토큰화함에 따라 토큰 목록 파서 및 토큰 AST 변환기를 사용하여 토큰 목록을 IRES 함수로 컴파일하되, 구분 분석 규칙과 변환 규칙으로 구성된 컴파일 규칙에 기초하여 상기 알고리즘 컴파일러를 통해 상기 토큰 목록을 토큰 AST로 구문 분석하고, 상기 구문 분석된 토큰 AST를 IRES 구성 요소로 변환하는 단계
    를 포함하는 의미론 추출 자동화 방법.
KR1020210123741A 2021-09-16 2021-09-16 자바스크립트의 중간 언어 기반 의미론 추출 자동화 시스템 및 방법 KR102614967B1 (ko)

Priority Applications (1)

Application Number Priority Date Filing Date Title
KR1020210123741A KR102614967B1 (ko) 2021-09-16 2021-09-16 자바스크립트의 중간 언어 기반 의미론 추출 자동화 시스템 및 방법

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
KR1020210123741A KR102614967B1 (ko) 2021-09-16 2021-09-16 자바스크립트의 중간 언어 기반 의미론 추출 자동화 시스템 및 방법

Publications (2)

Publication Number Publication Date
KR20230040516A true KR20230040516A (ko) 2023-03-23
KR102614967B1 KR102614967B1 (ko) 2023-12-19

Family

ID=85799406

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020210123741A KR102614967B1 (ko) 2021-09-16 2021-09-16 자바스크립트의 중간 언어 기반 의미론 추출 자동화 시스템 및 방법

Country Status (1)

Country Link
KR (1) KR102614967B1 (ko)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN117313751A (zh) * 2023-09-28 2023-12-29 上海嗨普智能信息科技股份有限公司 一体化Web多语言翻译框架的建立方法以及使用方法

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20120107032A (ko) * 2011-03-18 2012-09-28 (주)지앤씨인터렉티브 플렛폼 독립적 소스 코드 번역기
KR101192438B1 (ko) * 2012-05-08 2012-10-17 인하대학교 산학협력단 자바 프로그램 중간 표현 언어 생성 시스템 및 방법

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20120107032A (ko) * 2011-03-18 2012-09-28 (주)지앤씨인터렉티브 플렛폼 독립적 소스 코드 번역기
KR101192438B1 (ko) * 2012-05-08 2012-10-17 인하대학교 산학협력단 자바 프로그램 중간 표현 언어 생성 시스템 및 방법

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN117313751A (zh) * 2023-09-28 2023-12-29 上海嗨普智能信息科技股份有限公司 一体化Web多语言翻译框架的建立方法以及使用方法

Also Published As

Publication number Publication date
KR102614967B1 (ko) 2023-12-19

Similar Documents

Publication Publication Date Title
Grune et al. Modern compiler design
US7827155B2 (en) System for processing formatted data
US20020143823A1 (en) Conversion system for translating structured documents into multiple target formats
US8171462B2 (en) User declarative language for formatted data processing
Cánovas Izquierdo et al. A domain specific language for extracting models in software modernization
Park et al. JISET: javascript ir-based semantics extraction toolchain
US20120072886A1 (en) Domain specific language creation
WO2007124176A2 (en) Machine declarative language for formatted data processing
Fritzson et al. Towards Modelica 4 meta-programming and language modeling with MetaModelica 2.0
Kuramitsu Nez: practical open grammar language
US20080141230A1 (en) Scope-Constrained Specification Of Features In A Programming Language
Nacke et al. Learn LLVM 17: A beginner's guide to learning LLVM compiler tools and core libraries with C++
KR102614967B1 (ko) 자바스크립트의 중간 언어 기반 의미론 추출 자동화 시스템 및 방법
Fritzson et al. Meta-programming and language modeling with MetaModelica 1.0
KR20090011974A (ko) 컴파일 대상 파일 추출 방법
Koskimies et al. The design of a language processor generator
Bülow Proof visualization for the lean 4 theorem prover
Mailund Domain-Specific Languages in R: Advanced Statistical Programming
Maliavko et al. The functionally-imperative programming language El and its translator
Vasenin et al. Intermediate representation of programs with type specification based on pattern matching
Grigorev et al. String-embedded language support in integrated development environment
Watson et al. Compilers and Interpreters
Renggli Dynamic Language Embedding
Okuda A Doctor Thesis
Brady The Idris Programming Language: Implementing Embedded Domain Specific Languages with Dependent Types

Legal Events

Date Code Title Description
E902 Notification of reason for refusal
E701 Decision to grant or registration of patent right
GRNT Written decision to grant