KR20160031519A - 파서 생성 - Google Patents

파서 생성 Download PDF

Info

Publication number
KR20160031519A
KR20160031519A KR1020167003516A KR20167003516A KR20160031519A KR 20160031519 A KR20160031519 A KR 20160031519A KR 1020167003516 A KR1020167003516 A KR 1020167003516A KR 20167003516 A KR20167003516 A KR 20167003516A KR 20160031519 A KR20160031519 A KR 20160031519A
Authority
KR
South Korea
Prior art keywords
data
objects
parser
input stream
transitions
Prior art date
Application number
KR1020167003516A
Other languages
English (en)
Other versions
KR102294522B1 (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 아브 이니티오 테크놀로지 엘엘시
Publication of KR20160031519A publication Critical patent/KR20160031519A/ko
Application granted granted Critical
Publication of KR102294522B1 publication Critical patent/KR102294522B1/ko

Links

Images

Classifications

    • G06F17/2705
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/30Creation or generation of source code
    • G06F8/37Compiler construction; Parser generation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F40/00Handling natural language data
    • G06F40/10Text processing
    • G06F40/12Use of codes for handling textual entities
    • G06F40/149Adaptation of the text data for streaming purposes, e.g. Efficient XML Interchange [EXI] format
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F40/00Handling natural language data
    • G06F40/20Natural language analysis
    • G06F40/205Parsing
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F40/00Handling natural language data
    • G06F40/20Natural language analysis
    • G06F40/205Parsing
    • G06F40/221Parsing markup language streams
    • 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/73Program documentation

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Artificial Intelligence (AREA)
  • Health & Medical Sciences (AREA)
  • Audiology, Speech & Language Pathology (AREA)
  • Computational Linguistics (AREA)
  • General Health & Medical Sciences (AREA)
  • Software Systems (AREA)
  • Multimedia (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
  • Devices For Executing Special Programs (AREA)
  • Library & Information Science (AREA)
  • Document Processing Apparatus (AREA)

Abstract

데이터 객체들의 입력 스트림(504)를 파싱하기 위한 데이터 파서(418)을 생성하는 단계는 계층 구조로 조직된 복수의 객체들을 정의하는 계층적 데이터 포맷(105, 205)를 나타내는 정보(502)를 수신하는 단계 -상기 객체들은 데이터 객체들을 나타내는 하나 이상의 스키마 객체들을 포함하고, 하나 이상의 컨테이너 객체들 각각은 하나 이상의 스키마 객체들과 관련됨 -; 그리고 상기 데이터 파서를 형성하기 위해 상기 수신된 정보를 처리하는 단계를 포함한다. 상기 처리하는 단계는 상기 입력 스트림에서 연속적인 데이터 객체들 간 허용되는 전이들을 결정하는 단계; 상기 결정된 허용되는 전이들의 각각과 하나 이상의 데이터 동작들을 관련시키는 단계; 그리고 상기 데이터 파서를 실행하기 위해 프로세서를 구성하기 위한 사양을 저장하는 단계를 포함한다.

Description

파서 생성{PARSER GENERATION}
본 출원은 2013년 11월 22일에 출원된 출원번호 14/087,158의 US 출원에 대해 우선권을 주장하고, 그것은 2013년 7월 12일에 출원된 출원번호 61/845,722의 US 가출원에 대해 우선권을 주장한다.
본 명세서는 파서 생성(parser generation)에 관련된 것이다.
일부 시스템은 입력을 해석하기 위해 입력을 분석하고 그 입력의 상이한 부분들간 관계들을 결정하기 하기 위해 파서를 사용한다. 일부 파서들은 프로그래머에 의해 수작업으로 작성된다. 예를 들어, 일부 파서 생성기들(또한 yacc 또는 Bison같은, 컴파일러-컴파일러들이라고도 함)은 생성 규칙들(또는 간단하게 "생성들")과 함께 문법을 입력으로 받아들이고, 그것은 그 문법에 따라 유효한 것으로 간주되는, 구문 요소들, 및 그들 간 관계들을 설명한다. 파서 생성기는 파서 생성기에 제공되었던 문법을 준수하는 입력을 파싱하기 위해 출력 정보로서 제공한다. 다양한 종류의 파서들은 다양한 상이한 종류의 데이터를 처리하기 위해 사용될 수 있다. 예를 들어, 어플리케이션-프로토콜 파서는 패킷 스트림들을 그 패킷 스트림들의 트래픽의 고급 표현들(high-level representations)로 번역한다.
본 발명의 목적은 데이터 객체들의 입력 스트림을 파싱하기 위해 데이터 파서를 생성하기 위한 방법, 계층적 데이터 포맷에 따라 포맷된 입력 스트림을 파싱하기 위해 데이터 파서를 생성하기 위한 시스템 및 데이터 객체들의 입력 스트림을 파싱하기 위해 데이터 파서를 생성하기 위한 컴퓨터-판독가능 매체 상에 저장된 소프트웨어를 제공하기 위한 것이다.
일 측면에 있어서, 일반적으로, 데이터 객체들의 입력 스트림을 파싱하기 위해 데이터 파서를 생성하기 위한 방법은: 계층 구조로 조직된 복수의 객체들을 정의하는 계층적 데이터 포맷을 나타내는 정보를 수신하는 단계 - 상기 객체들은 데이터 객체들을 나타내는 하나 이상의 스키마 객체들을 포함하고, 하나 이상의 컨테이너 객체들 각각은 하나 이상의 스키마 객체들과 관련됨 -;와 상기 데이터 파서를 형성하기 위해 상기 수신된 정보를 처리하는 단계를 포함한다. 상기 처리하는 단계는: 상기 계층적 데이터 포맷을 나타내는 정보에 적어도 부분적으로 기초하여, 상기 입력 스트림에서 연속적인 데이터 객체들 간 허용되는 전이들을 결정하는 단계; 상기 결정된 허용되는 전이들의 각각과 하나 이상의 데이터 동작들을 관련시키는 단계;와 (1) 상기 입력 스트림에서 제1 데이터 객체와 제2 데이터 객체 간 전이를 인식하기 위해, 그리고 (2) 하나 이상의 이전에 인식된 전이들과 관련된 컨텍스트(context)에 적어도 부분적으로 기초하여 상기 제2 데이터 객체 내 데이터 값에 상기 인식된 전이와 관련된 데이터 동작을 수행하기 위해 상기 데이터 파서를 실행하도록 프로세서를 구성하기 위한 사양(예를 들어, 실행가능한 명령들, 또는 상기 데이터 파서 프로그램의 임의의 다른 사양)을 저장하는 단계를 포함한다.
측면들은 다음 특징들 중 하나 이상을 포함할 수 있다.
상기 계층적 데이터 포맷을 나타내는 정보는 상기 계층적 데이터 포맷에 의해 정의된 상기 복수의 객체들 중 하나를 나타내는 복수의 노드들의 각각에 복수의 에지들에 의해 상호연결된 복수의 노드들을 포함하는 상기 계층적 데이터 포맷의 트리 표현을 포함한다.
상기 하나 이상의 이전에 인식된 전이들과 관련된 컨텍스트는 상기 계층적 데이터 포맷의 트리 표현에서 위치에 대응한다.
상기 스키마 객체들 중 적어도 하나는 상기 스키마 객체에 의해 나타내어지는 대응하는 데이터 객체와 함께 포함되는 태그를 포함한다.
상기 컨테이너 객체들은 상기 입력 스트림 내 포함된 데이터 객체들의 시퀀스, 상기 입력 스트림 내 포함된 데이터 객체들의 세트, 또는 여러 가능한 데이터 객체들 중 상기 입력 스트림 내 하나의 포함된 데이터 객체의 선택 중 적어도 하나를 나타내는 적어도 하나의 컨테이너 객체를 포함한다.
상기 컨테이너 객체들 중 적어도 일부는 상기 입력 스트림 내 데이터 객체들의 일련의 여러 컨테이너들을 나타내는 것으로 명시된다.
상기 복수의 객체들 중 적어도 일부 객체들은 상기 계층적 데이터 포맷에서 옵셔널(optional)로 지정된다.
상기 입력 스트림에서 계층적 데이터 포맷의 객체들 간 허용되는 전이들을 결정하는 단계는: 상기 계층적 데이터 포맷의 컴파일 트리 표현(compilation tree representation)을 생성하는 단계를 포함하되, 상기 컴파일 트리 표현은 상기 계층적 데이터 포맷에 의해 정의된 상기 복수의 객체들 중 하나를 나타내는 복수의 노드들 중 적어도 일부 및 컴파일 특정 객체들(compilation specific objects)을 나타내는 복수의 노드들 중 적어도 일부에 복수의 에지들에 의해 상호연결되는 복수의 노드들을 포함한다.
상기 컴파일 특정 객체들을 나타내는 노드들은 벡터 컨테이너 노드들, 루트 노드들, 빈 태그(empty tag) 노드들, 및 팬-아웃 전용(fan-out only) 노드들 중 하나 이상을 포함한다.
상기 입력 스트림에서 상기 계층적 데이터 포맷의 객체들 간 허용되는 전이들을 결정하는 단계는 상기 컴파일 트리 표현의 노드들 간 모든 허용되는 전이들을 결정하기 위해 상기 컴파일 트리 표현을 처리하는 단계를 포함한다.
상기 컴파일 트리 표현의 노드들 간 모든 허용되는 전이들을 결정하기 위해 상기 컴파일 트리 표현을 처리하는 단계는 상기 컴파일 트리 표현의 각각의 노드에 대해, 상기 노드에 대해 전이들을 가지는 모든 노드들을 결정하는 단계와 상기 노드가 모든 노드들에 대해 적어도 하나의 전이를 가지는 모든 노드들을 결정하는 단계를 포함한다.
상기 컴파일 트리 표현의 노드들 간 모든 허용되는 전이들을 결정하기 위해 상기 컴파일 트리 표현을 처리하는 단계는 상기 노드들 간 중복 전이들(duplicate transitions)을 결합하는 단계와 상기 노드들 간 불완전한 전이들(incomplete transitions)을 제거하는 단계를 포함한다.
상기 방법은 식별된 각각의 허용되는 전이에 대해 정교화된 에지(elaborated edge)를 생성하는 단계를 더 포함하되, 상기 정교화된 에지는 상기 전이와 관련된 소스 노드, 상기 전이와 관련된 목적지 노드, 상기 전이와 관련된 컨테이너 노드, 그리고 상기 전이와 관련된 루핑 행태(looping behavior)를 포함한다.
상기 식별된 전이들의 각각과 하나 이상의 데이터 동작들을 관련시키는 단계는 하나 이상의 데이터 동작들을 결정하기 위해 각각의 정교화된 에지를 분석하는 단계를 포함한다.
상기 하나 이상의 데이터 동작들은 컨테이너 객체의 범위 안으로 푸시(push)하기 위한 동작, 컨테이너 객체의 범위로부터 튀어나오기(pop out) 위한 동작, 그리고 데이터 객체의 값을 판독하기 위한 동작을 포함한다.
상기 입력 스트림에서 상기 계층적 데이터 포맷의 객체들 간 허용되는 전이들을 결정하기 위한 단계는 상기 계층적 데이터 포맷이 임의의 모호한 정의들을 포함하지 않는다는 표시, 상기 계층적 데이터 포맷이 하나 이상의 모호한 정의들을 포함한다는 표시, 또는 상기 계층적 데이터 포맷에 포함되는 임의의 모호한 정의들의 하나 이상의 가능한 해결들 중 적어도 하나를 포함하는 출력을 생성하는 단계를 포함한다.
상기 계층적 데이터 포맷을 나타내는 데이터는 ASN.1 표기, XML 표기, SWIFT 표기, X12 표기, 및 HL 표기 중 적어도 하나를 사용하여 명시된다.
또다른 측면에서, 일반적으로, 계층적 데이터 포맷에 따라 포맷된 입력 스트림을 파싱하기 위해 데이터 파서를 생성하기 위한 시스템은: 계층 구조로 조직된 복수의 객체들을 정의하는 계층적 데이터 포맷을 나타내는 정보를 수신하도록 구성된 입력 디바이스 또는 포트 - 상기 객체들은 데이터 객체들을 나타내는 하나 이상의 스키마 객체들을 포함하고, 하나 이상의 컨테이너 객체들 각각은 하나 이상의 스키마 객체들과 관련됨 -;와 상기 데이터 파서를 형성하기 위해 상기 수신된 정보를 처리하도록 구성된 적어도 하나의 프로세서를 포함한다. 상기 처리는: 상기 계층적 데이터 포맷을 나타내는 정보에 적어도 부분적으로 기초하여, 상기 입력 스트림에서 연속적인 데이터 객체들 간 허용되는 전이들을 결정하는 단계; 상기 결정된 허용되는 전이들의 각각과 하나 이상의 데이터 동작들을 관련시키는 단계;와 (1)상기 입력 스트림에서 제1 데이터 객체와 제2 데이터 객체 간 전이를 인식하기 위해, 그리고 (2) 하나 이상의 이전에 인식된 전이들과 관련된 컨텍스트(context)에 적어도 부분적으로 기초하여 상기 제2 데이터 객체 내 데이터 값에 상기 인식된 전이와 관련된 데이터 동작을 수행하기 위해 상기 데이터 파서를 실행하도록 프로세서를 구성하기 위한 사양을 저장하는 단계를 포함한다.
또다른 측면에서, 일반적으로, 계층적 데이터 포맷에 따라 포맷된 입력 스트림을 파싱하기 위해 데이터 파서를 생성하기 위한 시스템은: 계층 구조로 조직된 복수의 객체들을 정의하는 계층적 데이터 포맷을 나타내는 정보를 수신하기 위한 수단 - 상기 객체들은 데이터 객체들을 나타내는 하나 이상의 스키마 객체들을 포함하고, 하나 이상의 컨테이너 객체들 각각은 하나 이상의 스키마 객체들과 관련됨 -;과 상기 데이터 파서를 형성하기 위해 상기 수신된 정보를 처리하기 위한 수단을 포함한다. 상기 처리는: 상기 계층적 데이터 포맷을 나타내는 정보에 적어도 부분적으로 기초하여, 상기 입력 스트림에서 연속적인 데이터 객체들 간 허용되는 전이들을 결정하는 단계; 상기 결정된 허용되는 전이들의 각각과 하나 이상의 데이터 동작들을 관련시키는 단계;와 (1) 상기 입력 스트림에서 제1 데이터 객체와 제2 데이터 객체 간 전이를 인식하기 위해, 그리고 (2) 하나 이상의 이전에 인식된 전이들과 관련된 컨텍스트(context)에 적어도 부분적으로 기초하여 상기 제2 데이터 객체 내 데이터 값에 상기 인식된 전이와 관련된 데이터 동작을 수행하기 위해 상기 데이터 파서를 실행하도록 프로세서를 구성하기 위한 사양을 저장하는 단계를 포함한다.
또다른 측면에서, 일반적으로, 소프트웨어가 데이터 객체들의 입력 스트림을 파싱하기 위한 데이터 파서를 생성하기 위해 컴퓨터-판독가능 매체 상에 저장된다. 상기 소프트웨어는 컴퓨팅 시스템이: 계층 구조로 조직된 복수의 객체들을 정의하는 계층적 데이터 포맷을 나타내는 정보를 수신하도록 하고 - 상기 객체들은 데이터 객체들을 나타내는 하나 이상의 스키마 객체들을 포함하고, 하나 이상의 컨테이너 객체들 각각은 하나 이상의 스키마 객체들과 관련됨 -; 그리고 상기 데이터 파서를 형성하기 위해 상기 수신된 정보를 처리하도록 하기 위한 명령들을 포함한다. 상기 처리는: 상기 계층적 데이터 포맷을 나타내는 정보에 적어도 부분적으로 기초하여, 상기 입력 스트림에서 연속적인 데이터 객체들 간 허용되는 전이들을 결정하는 단계; 상기 결정된 허용되는 전이들의 각각과 하나 이상의 데이터 동작들을 관련시키는 단계;와 (1) 상기 입력 스트림에서 제1 데이터 객체와 제2 데이터 객체 간 전이를 인식하기 위해, 그리고 (2) 하나 이상의 이전에 인식된 전이들과 관련된 컨텍스트(context)에 적어도 부분적으로 기초하여 상기 제2 데이터 객체 내 데이터 값에 상기 인식된 전이와 관련된 데이터 동작을 수행하기 위해 상기 데이터 파서를 실행하도록 프로세서를 구성하기 위한 사양을 저장하는 단계를 포함한다.
측면들은 다음 장점들 중 하나 이상을 포함할 수 있다.
조직들은 여러 상이한 시스템들로부터 데이터를 관리한다. 일부 시스템들은 상기 시스템에 원시적인 포맷으로 데이터의 데이터세트들을 생산할 수 있다. 다른 시스템들은 쉼표로 구분된 값(csv), 확장성 마크업 언어(XML), 추상 구문 표기법(ASN.1), 국제 은행 간 통신 협회(SWIFT), X12, 또는 또다른 표준 같은 표준을 준수하는 비-원시 포맷을 사용하여 데이터세트들을 생산한다. 일반적으로, 상기 데이터세트가 특정 표준을 사용하는 것으로 알려진 때조차, 상기 데이터세트 내 데이터 객체들은 그 특정 표준을 준수하는 특정 데이터 포맷에 따라 파싱될 필요가 있을 수 있다.
일부 시스템들은 임포트 메커니즘(import mechanism)을 통해 다른 시스템들에 의해 제공되는 데이터세트들을 받아들인다. 상기 임포트 메커니즘(import mechanism)은 처리를 위한 시스템에 대한 원시적인 포맷으로 외부 데이터세트를 변환한다. 하나의 이러한 임포트 메커니즘(import mechanism)은 특정 데이터 포맷(예를 들어, 스키마)에 따라 포맷된 데이터(예를 들어, 이진 데이터로 인코딩되거나 또는 ASCII 텍스트 같은 글자 세트를 사용하는 다른 문서 또는 메시지)의 입력 스트림을 분석하고, 그 구성요소 부분들을 인식하는 데이터 파서이고, 그것은 그런 다음 원시 데이터 레코드의 필드들을 채우기 위해 사용된다. 스키마는 예를 들어, 입력 스트림에서 나타날 수 있는 데이터 객체들의 다른 가능한 유효 시퀀스들을 정의하기 위해 사용될 수 있다. 상기 입력 스트림 내 데이터 객체들은 상기 입력 스트림 내 별개 데이터 객체들로서 명백하게 태그되거나, 암시적으로 인식가능할 수 있다.
다른 장점들 중에서 본원에서 기술된 접근법들을 사용하여 생성되는 데이터 파서들은 임의의 계층적 데이터 포맷과 호환되는 데이터 동작들을 수행하고 개발 시간을 절약하도록 구성될 수 있다. 이것은 일반적으로 데이터 포맷들의 정적 세트를 고려하여 개발되고 부가적인 데이터 포맷들을 수용하기 위해 재개발되거나 개량되어야만 하고, 상기 데이터가 파싱될 때 맞춤형 데이터 동작들을 수행할 수 없을 수 있는, 종래 데이터 파서들에 대한 개선이다.
본원에서 기술된 접근법들은 일반화된 계층적 태그 값 스키마에 따라 포맷된 데이터를 임의의 다른 데이터 포맷으로 변환할 수 있다.
본원에서 기술된 접근법들은 컨텍스트 체크 같은 동작들이 감소될 때 종래 접근법들에 대한 성능 향상을 초래할 수 있다.
본원에서 기술된 접근법들은 선택적인 "로컬 라우팅(local routing)"이 아니라 "글로벌 라우팅(global routing)"을 이용할 수 있다. 매우 일반적으로, "글로벌 라우팅"을 이용하는 데이터 파서는 그것이 수행하는 각각의 파싱 동작들에 대한 주어진 계층적 중첩된 타깃 데이터 포맷(given hierarchical nested target data format)의 모든 수준에서 요소들 간 허용되는 전이들 중 일부 또는 모두를 고려한다. "로컬 라우팅"을 이용하는 데이터 파서는 그것이 수행하는 각각의 파싱 동작에 대한 주어진 계층적 중첩된 타깃 데이터 포맷(given hierarchical nested target data format)의 단일 수준에서 요소들 간 허용되는 전이들만을 고려한다. "글로벌 라우팅"의 사용은 상기 파서에 의해 요구되는 체크(예를 들어, 길이 체크)의 양을 잠재적으로 감소시킨다. 특히, 계층적 중첩된 스키마들의 경우에, 상기 스키마의 각각의 수준은 전역적으로 수행된다면 유일한 하나의 룩업 또는 테스트로 식별될 수 있는 반면, 지역적으로 수행된다면 별개 테스트를 요구할 수 있다. 따라서, 일부 예에서, 매 파싱 동작 전 또는 후의 추가적인 체크는 제거되고 길이 체크는 예를 들어, 데이터의 무결성을 검증하거나 모호한 경로를 처리하기 위해 드물게 실행된다.
본 발명의 다른 특징들과 장점들은 다음 설명으로부터, 그리고 청구범위로부터 명백하다.
도 1은 데이터 처리 시스템의 다이어그램이다.
도 2는 예시 데이터 포맷이다.
도 3은 예시 데이터 포맷의 트리 표현의 다이어그램이다.
도 4는 전이(transition) 다이어그램이다.
도 5a는 파서 생성 모듈의 다이어그램이다.
도 5b는 실행 환경의 다이어그램이다.
도 6은 예시 데이터 포맷의 범위 트리 표현(scope tree representation)이다.
도 7은 예시 데이터 포맷의 상세한 전이(transition) 다이어그램이다.
도 8은 데이터 동작들과 관련된 전이의 목록이다.
도 9는 입력 스트림으로부터 데이터를 파싱하는 파서의 예이다.
도 10은 도 9의 데이터를 파싱할 때 파서가 뒤따르는 전이들을 강조한 전이(transition) 다이어그램이다.
도 11은 데이터 동작들과 관련된 전이들의 목록이다.
1 시스템 개요
도 1은 파서 생성 기술이 사용될 수 있는 예시 데이터 처리 시스템(100)을 도시한다. 상기 시스템(100)은 저장 장치들 또는 온라인 데이터 스트림에 대한 연결들 같은 하나 이상의 데이터 소스들을 포함할 수 있는 데이터 소스(102)를 포함하고, 그것들 각각은 다양한 저장 포맷들 (예를 들어, 데이터베이스 테이블, 스프레드시트 파일, 플랫 텍스트 파일(flat text files), 또는 메인프레임 컴퓨터에 의해 사용되는 원시 포맷) 중 임의의 것으로 데이터를 저장할 수 있다. 실행 환경(104)은 파서 생성 모듈(106)과 실행 모듈(112)을 포함한다. 상기 실행 환경(104)은 UNIX 운영 시스템 같은, 적절한 운영 시스템의 제어 하의 하나 이상의 범용-목적 컴퓨터 상에 호스팅될 수 있다. 예를 들어, 상기 실행 환경(104)은 여러 중앙 처리 유닛들(CPUs), 지역(예를 들어, SMP 컴퓨터들 같은 멀티프로세서 시스템들), 또는 지역적으로 분산(예를 들어, 클러스터들로 결합된 멀티 프로세서들 또는 MPP들), 또는 원격, 또는 원격적으로 분산(예를 들어, 지역 네트워크(LAN) 및/또는 광역 네트워크(WAN)을 통해 결합된 여러 프로세서들) 중 하나, 또는 그것들의 임의의 조합을 사용하는 컴퓨터 시스템의 구성을 포함하는 멀티-노드 병렬 컴퓨팅 환경을 포함할 수 있다. 일부 실시예에서, 상기 실행 모듈(112)은 운영 시스템을 제공하고, 그것은 하나 이상의 프로세서들 상에서 작동하는 병렬 운영 시스템일 수 있고, 상기 파서 생성 모듈(106)은 그 운영 시스템에서 작동하는 프로그램으로서 실행된다. 사용자(115)는 또한 디스플레이된 출력을 보고 사용자 인터페이스에 입력을 하여 상기 실행 환경(104)과 상호작용할 수 있다.
상기 파서 생성 모듈(106)은 타깃 데이터 포맷(target data format)을 나타내는 데이터(105)를 수신하고, 타깃 데이터 포맷(105)은 그 타깃 데이터 포맷(105)에 따라 (정확하게) 포맷된 것으로 간주되는 가능한 데이터 객체들의 허용된 구조, 그리고 입력 스트림에서 나타나는 여러 데이터 객체들 간 허용된 순서를 정의한다. 상기 타깃 데이터 포맷(105)은 어떤 종류의 데이터 객체들이 스키마 객체들과 상기 스키마 객체들 간 관계들의 측면에서 허용되는지를 정의하기 위한 스키마(schema)를 기술하는 표준을 임의로 준수할 수 있다. 상기 타깃 데이터 포맷(105)에 의해 정의된 구조는 데이터 값들을 포함하는 데이터 객체들을 나타내는 스키마 객체들(예를 들어, 데이터 값이 관련된 태그들이 기초하여 인식가능한 태그된(tagged) 데이터 객체), 그리고 스키마(schema) 객체들 또는 잠재적으로 중첩된 구조(nested structure)에 기초한 다른 컨테이너 객체들을 포함할 수 있는 컨테이너 객체들(예를 들어, 태그들의 시퀀스, 태그들의 세트, 등)을 포함할 수 있다. 예를 들어, 상기 타깃 데이터 포맷(105)이 ASN.1 표준의 버전을 준수한다면, 스키마 객체는 데이터 값과 관련된 태그, 이어서 상기 데이터 값의 길이, 뒤이어 상기 데이터 값 자체로 구성되는 데이터 객체를 나타낼 수 있다. 상기 타깃 데이터 포맷(105)이 XML 표준의 버전을 준수한다면, 스키마 객체는 시작 태그, 이어서 데이터 값, 뒤이어 종료 태그로 구성되는 데이터 객체를 나타낼 수 있다. 일부 예에서, 상기 타깃 데이터 포맷(105)은 계층의 노드들을 나타내는 스키마 객체들과 컨테이너 객체들과 함께 계층 구조(예를 들어, 트리 또는 계층적 표현의 다른 형태)로 제시될 수 있다.
상기 타깃 데이터 포맷(105)은 입력 스트림(예를 들어, 상기 타깃 데이터 포맷(105)에 따라 포맷된 데이터 객체들의 연속을 포함하는 데이터 스트림)에서 데이터 객체들의 예상되는 포맷을 기술하고, 그것은 상기 데이터 소스(102)로부터 상기 실행 환경(104)에 도달할 것이다. 상기 타깃 데이터 포맷(105)은 또한 상기 입력 스트림에서 연속된 데이터 객체들 간 어떤 전이들이 상기 계층 구조에 기초하여 허용되는지를 암시적으로 결정하며, 상기 계층 구조 내 스키마 객체들과 컨테이너 객체들 간 순서를 포함한다. 상기 파서 생성 모듈(106)은 상기 데이터 소스(102)로부터 입력 스트림을 파싱할 수 있는 파서를 생성하기 위해 상기 타깃 데이터 포맷을 처리한다. (ASN.1 같은) 일부 표준들을 준수하는 타깃 데이터 포맷들에 대해 상기 입력 스트림은 또한 다양한 유형의 컨테이너 객체들에 대해 (예를 들어, 시퀀스들 또는 세트들에 대해) 포함된 데이터 객체들의 시작(또는 끝)을 표시하는 태그들(또는 다른 마커들(markers) 또는 구분문자들(delimiter))을 포함할 수 있으나, 상기 시스템(100)은 이러한 태그와 함께 또는 이러한 태그 없이 입력 스트림들을 처리할 수 있다. 일반적으로, 상기 실행 환경(104)은 상기 입력 스트림으로부터 데이터를 수신할 때, 상기 실행 환경(104)의 실행 모듈(112)은 상기 데이터 소스(102)로부터 수신된 입력 스트림에서 데이터를 해석하기 위해 그리고 태그된 데이터 객체들 간 전이들을 인식하기 위해 그리고 상기 실행 환경(104)에 원시적인 레코드들을 채우는 것을 포함할 수 있는, 결과들(114)을 저장하기 위해 데이터 동작들을 사용하는 데이터 객체들에서 데이터 값들을 처리하기 위해 생성된 파서를 사용한다. 일부 예에서, 레코드들은 데이터 스토리지 시스템(116)에 저장된다. 상기 데이터 소스(102)와 상기 데이터 스토리지 시스템(116)을 제공하는 저장 장치들은 예를 들어, 상기 실행 환경(104)을 실행하는 컴퓨터에 연결된 저장 매체(예를 들어, 하드 드라이브(108)) 상에 저장되는 상기 실행 환경(104)에 지역적(local)일 수 있거나, 예를 들어, 원격 연결을 통해 상기 실행 환경(104)을 실행하는 컴퓨터와 통신하는 원격 시스템(예를 들어, 메인프레임(100))에 호스팅되는 상기 실행 환경(104)에 원격(remote)일 수 있다.
상기 데이터 스토리지 시스템(116)은 또한 개발자(120)가 파싱된 데이터, 상기 저장된 결과들(114), 및/또는 다른 데이터에 대한 부가적인 처리를 적용하기 위해 상기 실행 모듈(112)에 의해 실행되기 위한 프로그램들을 개발할 수 있는 개발 환경(118)에 액세스 가능할 수 있다. 상기 실행 환경(118)은, 일부 실시예에서, 정점들 간 방향성 링크들(directed links)(작업 요소들의 흐름을 나타냄)에 의해 연결된 정점들(구성요소들 또는 데이터세트들을 나타냄)을 포함하는 데이터플로우 그래프로서 어플리케이션들을 개발하기 위한 시스템이다. 예를 들어, 이러한 환경은 본원에 참조로 원용된 "그래프-기반 어플리케이션에 대한 파라미터 관리"라는 제목의 US 공보 번호 2007/0011668에서 더 상세히 설명된다. 이러한 그래프-기반 계산을 실행하기 위한 시스템은 본원에서 참조로 원용된 US 특허 5,966,072, 그래프로 표현된 계산 실행에서 설명된다. 이 시스템에 따라 만들어진 데이터플로우 그래프는 프로세스들 간 정보를 이동시키기 위해, 그리고 프로세스들에 대해 실행 순서를 정의하기 위해, 그래프 구성요소들에 의해 표현되는 개별 프로세스들로 및 개별 프로세스들로부터 정보를 얻기 위한 방법들을 제공한다. 이 시스템은 프로세스간 통신 방법들을 선택하는 알고리즘들을 포함한다(예를 들어, 그래프의 링크들에 따른 통신 경로들은 TCP/IP 또는 UNIX 도메인 소켓들을 사용할 수 있거나, 프로세스들 간 데이터를 넘기기 위해 공유된 메모리를 사용할 수 있다).
도 2를 참조하면, 타깃 데이터 포맷(205)의 간단한 예가 다수의 컨테이너 객체들(250)을 정의하고, 각각은 하나 이상의 스키마 객체들(252)을 포함한다. 일부 예에서, 상기 타깃 데이터 포맷(205)은 XML 또는 ASN.1 표기법과 같이 표준화된 표기법을 사용하여 명시될 수 있고, 그것은 허용되는 포맷의 규격화(specification)와 정의된 스키마에 따라 입력 스트림에서 데이터 객체들 간 정리를 가능하게 하고, 스키마 객체들과 컨테이너 객체들을 명시하기 위한 표기법을 포함한다. 본원에서 사용되는 "스키마 객체"는 관련된 데이터 객체들의 그룹을 나타내기 위해 사용되는 정의된 스키마의 임의의 요소를 포함한다. 아주 일반적으로, 컨테이너 객체(또는 간단히 "컨테이너")의 예들은 시퀀스 컨테이너(sequence container)(즉, 객체들의 순서화된 세트를 포함함), 세트 컨테이너(set container) (즉, 그것으로부터 하나 이상의 객체들이 선택될 수 있는 객체들의 세트를 포함함), 또는 초이스 컨테이너(choice container)(즉, 그것으로부터 단지 하나의 객체만 선택될 수 있는 객체들의 세트를 포함함)를 포함한다. 컨테이너 객체 내 객체들은 스키마 객체들, 또는 다른 컨테이너 객체들일 수 있고, 계층 구조를 형성하는 중첩된 구조(nested structure)를 가능하게 한다. 스키마 객체(252)는 태그(253)를 포함하고, 그것은 특정 관련된 데이터 값을 식별하기 위해 입력 스트림에서 대응하는 데이터 객체 내에서 나타날 것이며, 상기 시스템(100)의 필드 네임은 생성된 파서에 의해 채워진 레코드들 내 데이터 값을 나타내기 위해 사용될 것이다. 상기 스키마 객체(252)는 그 데이터 값의 유형(예를 들어, 도 2에 도시된 바와 같이 정수에 대해 "int" 또는 "string")을 나타내는 관련된 데이터 유형을 가질 수 있다. 일부 데이터 포맷들에서 상기 필드 네임은 태그의 네임이거나, 또는 하나 이상의 태그들과 관련된다. 다음 예들 중 일부에서, 태그"T"와 필드 네임"n"을 가지는 스키마 객체는 스키마 객체"T(n)"으로 기술될 것이다.
다음은 ASN.1 표기법의 타깃 데이터 포맷(205)의 예이다.
Figure pct00001
태그 사양(tag specification) [UNIVERSAL 81], [UNIVERSAL 82] 등은 데이터가 'P', 'Q' 등의 ASCII 값으로 동일한 태그를 가지도록 한다. ASN.1에 대해, 상기 입력 스트림은 또한 하기 일부 예들에서 보여지는 바와 같이, 시퀀스 컨테이너 또는 세트 컨테이너(그러나 초이스 컨테이너에 대해서는 아님)의 시작을 마킹하는 태그들을 포함할 것이다.
도 2의 타깃 데이터 포맷(205)은 시퀀스 컨테이너, SEQ_A를 포함하고, 그것은 제1 스키마 객체, P(a1), 제2 스키마 객체, Q(a2), 초이스 컨테이너, CHOICE_B, 그리고 제3 스키마 객체, U(a6)를 포함한다. 상기 초이스 컨테이너, CHOICE_B는 스키마 객체, R(b3), 그리고 세트 컨테이너, SET_C를 포함한다. 상기 SET_C 세트 컨테이너는 두 개의 스키마 객체들 S(c4)와 T(c5)를 포함한다. 상기 P(a1) 스키마 객체, 상기 CHOICE_B 초이스 컨테이너, 그리고 상기 SET_C 세트 컨테이너는 모두 '옵셔널(optional)'인 것으로 지정된다. 옵셔널 지정(optional designation)은 상기 지정된 컨테이너 객체 또는 스키마 객체에 의해 나타내어지는 데이터 객체(들)이 상기 데이터 포맷에 의해 요구되지 않고 상기 입력 스트림이 그 스키마 객체에 대응하는 데이터 객체를 포함할 수 있거나 포함할 수 없다는 것을 의미한다. 객체들은 옵셔널(optional)인 것으로, 또는 상기 타깃 데이터 포맷 내에 나타나는 대응하는 라벨들에 의해 일부 다른 성질(property)을 가지는 것으로 지정될 수 있다. 일부 표준들은 타깃 데이터 포맷 내 객체들의 명시적 지정을 대비할 수 있고, 일부 표준들은 타깃 데이터 포맷 내 객체들의 암시적 지정을 대비할 수 있다. 예를 들어, 일부 표준들(예를 들어, EDI/EDIFACT)은 컨테이너의 첫번째 스키마 객체가 옵셔널(optional) 지정을 가진다면 타깃 데이터 포맷이 전체 컨테이너를 옵셔널(optional)로 지정하는 정책을 포함한다. 각각의 컨테이너 객체는 상기 컨테이너의 내부 모든 객체들(즉, 스키마 객체들과 컨테이너 객체들)을 포함하는 "범위(scope)"로서 본원에서 언급되는 것을 정의한다. 따라서, SEQ_A의 범위는 P(a1), Q(a2), CHOICE_B, 그리고 U(a6)를 포함한다. CHOICE_B의 범위는 R(b3), SET_C, S(c4), 그리고 T(c5)를 포함한다. SET_C의 범위는 S(c4) 그리고 T(c5)를 포함한다.
도 3을 참조하면, 도 2의 타깃 데이터 포맷(205)이 트리(305)의 노드들(319)로 도시된 데이터 포맷(205)의 컨테이너 객체들과 스키마 객체들 그리고 노드들(319)을 상호 연결하는 에지들(320)로 도시된 컨테이너 객체들과 스키마 객체들 간 관계들과 함께 트리(305)로 도시된다. 일반적으로, 컨테이너들과 관련된 내부 노드들("컨테이너 노드"라고 함)이 무가치하고 태그들과 관련될 수 있거나 관련될 수 없는 반면, 스키마 객체들 및 그것들의 대응하는 데이터 객체들과 관련되는, 리프 노드들(leaf nodes)("데이터 노드"라고 함)은 관련된 태그와 데이터 값에 대응하는 필드 네임을 가진다.
동작에 있어서, 상기 트리는 위에서 아래로 그리고 그 좌측으로부터 우측으로 판독된다. 특히, 도 4의 간단한 전이 다이어그램(400)을 참조하면, 도 2의 데이터 포맷(205)에 따라 포맷된 입력 스트림을 판독하는 파서는 루트,
Figure pct00002
, 시작 상태에서 시작한다. 상기 파서는 입력 스트림으로부터 수신된 첫번째 태그된 데이터 객체(예를 들어, 태그-값 쌍이라 하는, 태그와 그 대응하는 데이터 값의 쌍)가 P(a1) 스키마 객체에 대한 태그-값 쌍 또는 Q(a2) 스키마 객체에 대한 태그-값 쌍(P(a1) 스키마 객체가 옵셔널(optional)로 지정되기 때문) 중 하나일 것을 예상한다. P(a1)에 대한 태그-값 쌍이 입력 데이터 스트림으로부터 수신되면, 입력 스트림으로부터 수신된 다음 태그-값 쌍은 Q(a2) 스키마 객체에 대한 태그-값 쌍이어야 한다.
CHOICE_B 컨테이너가 옵셔널(optional)이기 때문에, 입력 스트림으로부터 수신된 다음 태그-값 쌍은 the U(a6), R(b3), S(c4), 또는 T(c5) 스키마 객체 중 임의의 것에 대한 태그-값 쌍일 수 있다. (ASN.1 같은) 일부 표준에 대해, S(c4), 또는 T(c5) 스키마 객체에 대한 태그-값 쌍의 경우에, 또한 SET_C의 시작을 마킹하는 태그가 있을 수 있다. R(b3) 스키마 객체에 대한 태그-값 쌍이 수신되면, 입력 스트림으로부터 수신된 다음 태그-값 쌍은 U(a6) 스키마 객체에 대한 태그-값 쌍이어야만 한다. T(c5) 스키마 객체에 대한 태그-값 쌍이 수신되면 입력 스트림으로부터 수신된 다음 태그-값 쌍은 S(c4) 스키마 객체에 대한 태그-값 쌍이어야만 한다. 다음으로, SET_C 컨테이너가 ([] 연산자로 표기된) 세트 컨테이너들의 "벡터(vector)"로 명시되기 때문에, S(c4)와 T(c5) 스키마 객체들에 대한 태그-값 쌍들의 하나 이상의 조합들이 입력 스트림으로부터 수신될 수 있다(즉, 루핑 행태(looping behavior)가 허용된다). S(c4)와 T(c5) 스키마 객체들에 대한 태그-값 쌍들의 하나 이상의 조합들이 수신된 후에, U(a6) 스키마 객체에 대한 태그-값 쌍이 입력 스트림으로부터 수신된다. U(a6) 스키마 객체에 대한 태그-값 쌍이 수신된 후에, 전체 레코드가 수신되고 그 레코드는 종료된다. 수신된 임의의 후속 태그-값 쌍들은 다음 레코드의 일부이다.
2 파서 생성(Parser Generation)
도 5a를 참조하면, 도 1의 파서 생성 모듈(106)의 일 예가 입력으로 타깃 데이터 포맷(105)을 수신하도록 그리고 상기 데이터의 약간의 전처리와 함께 또는 전처리 없이 계층적 태그-값 구조를 가지는 임의의 타깃 데이터 포맷을 검증하고 파싱할 수 있는 컴파일된 파서 프로그램(418)으로 타깃 데이터 포맷(105)을 처리하도록 구성된다. 이를 위해, 상기 파서 생성 모듈(106)은 계층적 타깃 데이터 포맷의 요소들 간 허용되는 전이의 일부 또는 모두를 식별하는 것을 포함하는 계층적 데이터 포맷을 통한 "글로벌 라우팅(global routing)"을 결정한다. 상기 파서 생성 모듈(106)은 데이터 포맷 매핑 모듈(420), 전이 분석 모듈(424), 그리고 프로그램 생성 모듈(430)을 포함한다.
도 5b를 참조하면, 일부 실시예에서, 상기 실행 환경(104)에서 실행되는 데이터 포맷 프로세서(500)는 타깃 데이터 포맷(105)을 나타내는, 처리된 데이터 포맷 정보(502)를 형성하기 위해 타깃 데이터 포맷(105)을 전-처리한다. 그것은 이 처리된 데이터 포맷 정보(502)는 파서 프로그램(418)이 상기 실행 모듈(112)에 의해 실행될 때 특정 출력 레코드 포맷(506)으로 데이터 스트림(504)을 파싱하도록 구성되는 파서 프로그램(418)을 생성하기 위한 상기 파서 생성 모듈(106)을 준비한다. 그래서, 상기 데이터 포맷 정보(502)는 또한 상기 출력 레코드 포맷(506)의 정의를 포함한다. 다양한 기술들 중 임의의 것이 상기 데이터 포맷(105)이 준수하는 표준(예를 들어, ASN.1)의 문법을 수용하는 컴파일러-컴파일러들(예를 들어, yacc 또는 Bison)의 사용을 포함하여, 상기 타깃 데이터 포맷(105)을 전-처리하도록 그리고 상기 데이터 포맷 프로세서가 상기 타깃 데이터 포맷(105)으로부터 상기 처리된 데이터 포맷 정보(502)를 생성하기 위해 사용할 포맷 파서를 출력하도록 상기 데이터 포맷 프로세서(500)를 구성하기 위해 사용될 수 있다.
다음은 ("example.asn1"이란 파일에 저장된) 상기 보여진 ASN.1 표기법의 타깃 데이터 포맷(205)의 예로부터 생성된 데이터 조작 언어(DML)로 명시된 처리된 데이터 포맷 정보(502)의 예이다.
Figure pct00003
Figure pct00004
Figure pct00005
Figure pct00006
Figure pct00007
Figure pct00008
Figure pct00009
일부 실시예에서, 상기 파서 생성 모듈(106)과 상기 실행 모듈(112)은 제공된 데이터 포맷에 따라 데이터를 파싱하기 위한 공통 처리 모듈 또는 시스템의 구성요소일 수 있다. 예를 들어, 단일 데이터플로우 그래프에서, 또는 데이터플로우 그래프의 단일 구성요소는, 데이터플로우 그래프에 대한 입력들로서 입력 스트림(504) 및 처리된 데이터 포맷 정보(502)와 함께, 두 모듈들의 기능들을 수행할 수 있다. 일부 실시예에서, 실행가능한 파서 프로그램(418)을 제공하는 대신에, 상기 파서 생성 모듈(106)은 예를 들어, 이하에서 더 상세히 설명된 바와 같이, 컴파일 트리 표현(compilation tree representation)에 대한 정교화된 에지들(elaborated edges)의 열거된 목록 같은, 파싱을 수행하기 위해 필요로 되는 컨텍스트 정보(context information)와 전이들의 표현을 효과적으로 저장하기 위해 데이터 구조로 파서를 제공할 수 있다.
2.1 데이터 포맷 매핑 (Data Format Mapping)
상기 데이터 포맷(105)은 상기 데이터 포맷(105)을 상기 파서 생성 모듈(106)의 후속 모듈들에 의해 사용 가능한 내부의 "타깃" 데이터 포맷으로 매핑하는 데이터 포맷 매핑 모듈(420)에 먼저 제공된다. 일부 예에서, 상기 데이터 포맷(105)은 표준 포맷 맵 파일(예를 들어, ASN.1, SWIFT, 또는 X12 맵 파일)이고 상기 내부의 타깃 데이터는 상기 데이터 포맷(105)의 범위 트리 표현(scope tree representation)을 포함한다.
2.1.1 데이터 포맷 매핑 예(Data Format Mapping Example)
도 6을 참조하면, 도 2의 예시 데이터 포맷(205)의 범위 트리 표현(scope tree representation)(600)은 상기 데이터 포맷에서 제시되는 상이한 범위들을 명백하게 표기한다. 상기 범위 트리 표현(scope tree representation)(600)은 컨테이너 객체 유형 또는 태그 정보를 포함하지 않는다. 상기 컨테이너 유형과 태그 정보는 대신에 컴파일 트리(compilation tree)(또는 더 일반적으로, 방향성 비순환 그래프(DAG))에 포함되고, 여기서 상기 태그와 컨테이너 유형 정보는 컴파일 노드들의 속성으로 저장된다. 컴파일 트리 (compilation tree)가 순회될(traversed) 때, 속성들이 에지들을 생성하기 위해 사용된다. 컴파일 트리는 아래에서 더 상세히 설명된다.
일부 예에서, 범위 트리 표현(600)의 범위들(scopes)(660)에 의해 포함되는 각각의 스키마 객체는 빈 프로그램 테이블(도시되지 않음)과 관련된다. 파서 컴파일 프로세스의 이후 단계들은 테이블들을 범위들(scopes)과 스키마 객체들과 관련된 "프로그램들"로 채우고 하나 이상의 파싱 명령어들을 포함할 수 있으며, 그것은 아래에 더 상세히 기술된다.
2.2 전이 분석(Transition Analysis)
상기 데이터 포맷의 범위 트리 표현이 입력 스트림의 데이터 객체들 내 구조 정보(예를 들어, 태그들)에 기초하여 입력 스트림 내 데이터 객체들 간 허용되는 전이들을 열거하기 위해 데이터 포맷의 범위 트리 표현을 정적으로 분석하는 전이 분석 모듈(424)로 데이터 포맷 매핑 모듈(420)로부터 전달된다. 이러한 열거에 기초하여, 전술된 프로그램 테이블들이 프로그램들로 채워진다. 허용되는 전이들을 열거하기 위해, 전이 분석 모듈(424)은 X12, SWIFT, HL7, 그리고 다른 것들 같은 많은 데이터 표준들이 태그-값 쌍들의 형태로 데이터 객체들을 나타내는 리프들(leaves)로서 스키마 객체들을 가지는 트리들로 표현될 수 있다는 사실(도 3에서 도시됨)에 영향을 주고(leverage), 여기서 입력 스트림의 하나의 태그의 존재는 입력 스트림에서 또다른 태그 또는 태그들의 세트의 존재(그리고 이러한 태그들에 의해 식별된 관련된 데이터 값들)를 요구할 수 있거나 요구할 수 없다.
2.1.1 전이 분석 예(Transition Analysis Example)
도 7을 참조하면, 전이 분석 모듈(424)은 먼저 범위 트리 표현의 컴파일 트리 표현(700)을 형성한다. 상기 언급된 바와 같이, 데이터 포맷의 컨테이너 객체들과 스키마 객체들은 트리에서 노드들("컨테이너 노드들"과 "데이터 노드들")로 표현되고, 그리고 컨테이너 객체들과 데이터 객체들 간 관계들은 트리의 노드들을 연결하는 에지들로 표현된다. 일부 예에서, 데이터 포맷이 벡터를 포함한다면, 컴파일 트리 표현(700)은 전이 분석 모듈(424)에 의해 내부적으로 사용되고 전이 분석 프로세스에서 돕는 부가적인 "벡터컨테이너(VectorContainer)" 노드들(762)을 포함한다.
전이 분석 모듈(424)은 컴파일 트리(700)를 통과하고(walk through) 컨테이너 객체를 표현하는 각각의 노드에 대해, 상기 노드의 "팬-인(fan-in)"과 "팬-아웃(fan-out)"을 계산한다. 주어진 컨테이너 노드의 팬-인(fan-in)은 상기 컨테이너 노드의 외부 또다른 노드로부터 직접 액세스될 수 있는 상기 컨테이너 노드의 범위 내 노드들(컨테이너와 데이터 노드들 모두 포함함) 모두로 정의된다. 유사하게, 주어진 컨테이너 노드의 팬-아웃(fan-out)은 상기 주어진 컨테이너 노드의 외부 노드에 직접 액세스할 수 있는 컨테이너 노드에 의해 포함되는 노드들 모두로 정의된다.
일반적으로, 세트 유형 컨테이너들에 대해 팬-인(fan-in)과 팬-아웃(fan-out)을 계산할 때, 상기 세트의 자식들은 서로를 타깃으로 해야 한다. 이것은 상기 세트의 모든 멤버들의 카티전 곱(Cartesian product)을 수행하고, 루프로서 세트 그 자체를 취급하고, 그리고 모든 팬-아웃(fan-out)노드들이 팬-인(fan-in) 노드들 모두를 타깃으로 하게 하여 달성될 수 있다. 상기 세트가 벡터라면 상기 세트의 주어진 멤버는 단지 그 자체를 타깃으로 하는 것을 확인하도록 주의를 기울여야 한다. 초이스 유형 컨테이너들에 대해, 상기 컨테이너의 어떤 멤버도 서로를 타깃으로 하지 않는다. 시퀀스 유형 컨테이너들에 대해, 마지막 것을 제외한, 각 자식의 팬-아웃(fan-out)은 다음 자식, 그리고 다음 자식이 옵셔널(기타 등등)인 경우이면 그 이후의 것의 팬-인(fan-in)을 타깃으로 한다. 노드 그 자체가 벡터라면, 상기 벡터 노드의 팬-인(fan-in)을 방문하고, 그리고 각각의 팬-인(fan-in) 노드에 대해, 상기 벡터 노드의 팬-아웃(fan-out)을 방문하여 루프 에지들이 생성되고 그것에 의해 팬-아웃(fan-out)으로부터 팬-인(fan-in)으로 에지를 생성한다.
도 2에 도시된 예시 데이터 포맷에 대해, P(a1)과 P(a1)과 U(a6)가 (각각) 컨테이너 객체의 첫번째와 마지막 스키마 객체들이고 요구되는 스키마 객체들이기 때문에 SEQ_A는 단일 팬-인(fan-in) 노드, P(a1)과 단일 팬-아웃(fan-out)노드, U(a6)를 가진다. R(b3)가 옵셔널(optional) 스키마 객체이기 때문에 CHOICE_B는 R(b3)와 SET_C로 구성되는 팬-인(fan-in) 노드들의 목록을 가지며, Q(a2)는 R(b3) 또는 SET_C 중 하나를 타깃으로 할 수 있는 것을 의미한다. CHOICE_B의 팬-아웃(fan-out) 노드들의 목록은 R(b3)와 SET_C로 구성된다. SET_C는 S(c4)와 T(c5)로 구성되는 팬-인(fan-in) 노드들의 목록과 S(c4)와 T(c5)로 구성되는 팬-아웃(fan-out) 노드들의 목록을 가진다. 벡터컨테이너(VectorContainer) 노드(762)는 상기 컨테이너의 팬-아웃(fan-out)이 상기 시퀀스의 다음 노드의 팬-인(fan-in)뿐만 아니라 상기 컨테이너의 팬-인(fan-in)을 타깃으로 할 수 있는 것을 명시하는 상기 컨테이너 객체의 특별한, 컴파일 특정 유형을 나타낸다.
계산된 컨테이너 노드들 모두에 대해 팬-인(fan-in) 그리고 팬-아웃(fan-out)과 함께, 에지 생성 프로세스가 시작된다. 상기 에지 생성 프로세스는 그 자체와 그 자식들(즉, 상기 컨테이너의 범위 내 모든 컨테이너들과 스키마 객체들) 간 에지들을 형성하는 톱 레벨(top level) 컨테이너로 시작한다. 일부 예에서, 에지들이 톱 레벨(top level) 컨테이너의 노드로부터 상기 컨테이너와 관련된 팬-인(fan-in) 노드들 각각에 대해 생성된다. 그런 다음, 상기 컨테이너의 자식들은 적절하게 연결된다. 에지 생성의 완료시, 상기 에지들은 중복과 불완전한 에지들(duplicate and incomplete edges)(예를 들어, 컨테이너 내에서 생성되나 외부의 컨테이너에 의해 제거되는 에지들)을 비활성화하는 것을 포함하여 "결합된다(combined)".
전이 분석 모듈(424)은 그런 다음 트리의 노드들 간 정교화된 에지들(elaborated edges)을 생성하기 위해 트리의 노드들(소스 노드들과 타깃 노드들로 언급됨) 간 컴파일 트리 표현(700)을 워크한다(walk). 정교화된 에지는 상기 에지와 관련된 가장 높은 노드와 루핑 행태(looping behavior) 같은 라우팅 정보를 포함하는 소스 노드에서 목적지(destination) 노드 에지로 정의된다. 일부 예에서, 정교화된 에지는 상기 에지에 대한 소스 노드, 상기 에지에 대한 타깃 노드, 에지 루핑 행태(looping behavior), 그리고 상기 에지에 대한 가장 높은 노드를 표현하는 데이터를 포함한다. 상기 루핑 행태(looping behavior)에 대한 가능한 값들은 No_Loop(즉, 에지에 대한 루핑형태가 없다), End_Instance(즉, 에지에 대한 루핑 행태(looping behavior)가 있고, 여기서 벡터의 현재 인스턴스가 종료될 것이고 새로운 인스턴트가 시작될 것이다), 그리고 End_Record(즉, 에지에 대한 루핑 행태(looping behavior)가 있고, 여기서 현재 레코드가 종료될 것이고 새로운 레코드가 시작될 것이다)를 포함한다. 에지에 대한 가장 높은 노드는 상기 에지가 생성된 컨테이너로 정의된다. 루핑 행태(looping behavior)가 End_Instance일 때 에지가 VectorContainer 내에서 생성된다면, 상기 에지에 대한 가장 높은 노드는 VectorContainer 노드이다. 그렇지 않으면, 루핑 행태(looping behavior)가 End_Record일 때 에지가 VectorContainer에서 생성된다면, 상기 에지에 대한 가장 높은 노드는 "톱 노드(top node)"로 지정된 노드의 특별한 유형이다. 일반적으로, 루핑 행태(looping behavior)가 존재할 때(즉, 루핑 행태(looping behavior)가 No_Loop가 아니다) 상기 에지에 대한 트리에서 가장 높은 노드는 VectorContainer 노드이다. 예를 들어, End_Instance의 루핑 행태(looping behavior)와 함께 VectorContainer로부터 S(c4)로부터 T(c5)로의 에지가 생성된 때, S(c4)는 시작 노드, c5는 타깃 노드, 그리고 VectorCntr1은 상기 에지에 대한 가장 높은 노드이다.
도 8을 참조하면, 도 7의 컴파일 트리 표현(700)에 대한 정교화된 에지들의 열거된 목록이 도시된다.
2.3 모호성 해결(Ambiguity Resolution)
옵셔널 스키마 객체들, 결정되지 않은 길이의 벡터들, 반복되는 태그들, 그리고 상기 데이터 포맷(105)의 여러 범위들의 가능한 포함(inclusion)에 기인하여, 입력 스트림에서 한 데이터 객체로부터 또다른 것으로의 전이들을 인식하는 것에서 모호성(ambiguity)에 대한 가능성이 있다. 이러한 모호성들(ambiguities)은 동일한 소스와 목적지를 가지는 열거된 목록(도 8)의 에지들로 발생할 수 있다. 일부 예에서, 전이 분석 모듈(424)은 상기 타깃 데이터 포맷(105)에서 모호성들(ambiguities)을 발견하고 해결한다(자동적으로 또는 사용자 입력에 기반하여 중 하나로).
2.3.1 모호성 해결 예(Ambiguity resolution Example)
예를 들어, 도 2의 예시 데이터 포맷에 대해, SET와 벡터 컨테이너들의 조합에 기인하여, 모호성들(ambiguities)이 에지 T(c4)->S(c4)의 여러 버전들 사이에, 그리고 에지 S(c4) -> T(c4)의 여러 버전들 사이에 존재한다. 특히, "T"태그로부터 "S"태그로, 또는 "S"태그로부터 "T"태그로의 전이가 있을 때, 상기 전이가 동일한 세트 내 데이터 객체들 사이(즉, 비-루핑(non-looping) "내부 에지(inner edge)"), 또는 한 세트의 마지막 데이터 객체와 후속 세트의 첫번째 데이터 객체 사이(즉, 루핑 "외부 에지(outer edge)")에서 있는지 여부가 명확하지 않다. 모호성(ambiguity)이 루핑 구조에 기인하기 때문에, 그것은 동일한 소스와 목적지를 가지는 에지들의 두 버전들을 여러 가능한 타깃 동작들(target actions)을 가지는 하나의 에지로 결합하여 자동적으로 해결될 수 있다. 이 예에서 그렇게 하기 위해, 루핑 행태(looping behavior)를 포함하지 않는 내부 에지는 루핑 행태(looping behavior)를 포함하는 외부 에지와 결합된다. 일반적으로, 여러 에지들에 대한 타깃 동작들은 목록을 순서(예를 들어, 가장 가까운 쪽(내부)으로부터 가장 먼쪽(외부)으로, 에지들의 범위들의 순서에 기반한 순서)대로 순회하는(traverse) 것에 기반하여 선택된 특정 동작과 함께, 가능한 타깃 동작들의 순서화된 목록에 저장된다. 아래 더 상세히 기술된 바와 같이 선택은 사용자 입력에 기반하거나, 처리되었던 마지막 값의 특성, 또는 감소된 카운트(예를 들어, 두 항목들의 쌍에서 남은 한 항목) 또는 추적된 길이(예를 들어, 세트의 8 바이트로부터 판독이 남은 4바이트)같은 컨텍스트(context)를 체크하는 것에 기반할 수 있다.
일부 예에서, 명확화(disambiguation)의 다양한 종류 중 임의의 것이 사용된다. 예를 들어, 입력 데이터가 ASN.1 기본 인코딩 규칙(BER) 데이터로 포맷된다면, 태그-길이-값 세 쌍(tag-length-value triplets)을 포함하고 진정한 모호성이 존재할 수 없다. 이러한 경우에, 임의의 감지된 모호성은 태그-길이-값 세 쌍에서 길이 정보로 자동적으로 해결될 수 있다. 더 일반적으로, 모호성 감지와 해결(ambiguity detection and resolution)은 빠르게 그리고 효과적으로 모호성 문제들을 해결하기 위해 사용될 수 있으며, 모호성을 무시하는 것, 자동 명확화를 수행하는 것, 또는 사용자-지원 명확화(user-assisted disambiguation)를 수행하는 것 같은 옵션들을 제공하는 것을 포함한다.
다음은 파싱되기 위한 입력 스트림 내에서 나타날 수 있는 일련의 데이터 객체들의 예이다. 이 예는 정수들이 판독의 용이성을 위해, 그것들이 ASN.1 데이터로 실제로 인코딩될 것이기 때문에 정확하게 인코딩되지 않는 것을 제외하고, ASN.1 데이터에 기초한다. 상기 데이터 객체들은 임의의 값이 또다른 중첩된 TLV 세 쌍에 있을 수 있는 T|L|V 형태(태그|길이|값)를 가진다.
이 예에서, 세트들과 시퀀스들은 항상 그것들과 관련된 태그들을 가진다. ASN.1의 SET 컨테이너는 기본으로 [UNIVERSAL 17]의 태그를 가지고, SEQUENCE 컨테이너는 기본으로 [UNIVERSAL 16]의 태그를 가진다. SET OF 컨테이너는 SET과 동일한 태그를 가진다. 상기 요소 유형(이 경우의 SET)에 대한 태그는 상기 벡터의 각각의 요소에 대한 SET OF 태그 뒤에 나타난다. "리프 값들"인 값들(즉, TLV 세 쌍 그 자체가 아님)에 대응하는 다음 예의 숫자들은 상기 값의 끝에'*'로 마크된다. 이 예의 태그들만 16, 17, 81, 82, 83, 84, 85이다; 그리고 값들 또는 태그들이 아닌 나머지 숫자들 모두는 길이들이다.
Figure pct00010
길이는 모호성(ambiguity)이 있을 때 또는 데이터의 구조적 무결성을 검증할 필요가 있을 때 체크되는 어큐뮬레이터(accumulator)를 유지하기 위해 사용된다(예를 들어, 그와 관련된 예상되는 길이를 가지는 컨테이너 노드를 벗어날 때, 데이터의 정확한 길이 또는 양이 수집되었는지를 확인하기 위해 체크가 수행된다.). 모호성(ambiguity)의 경우에, 어큐뮬레이터(accumulator)는 여러 타깃 동작들 중 어느 것이 이전 태그로부터 현재 태그로의 모호한 에지에 대해 수행되어야만 하는지를 결정하도록 체크될 수 있다.
일부 예에서, 파서는 유입되는 데이터의 구조적 검증을 수행하도록 구성된다. 예를 들어, 입력 스트림으로부터 수신된 데이터가 예상치 못한 순서로 도달한다면, 파서는 에러를 낼 것이다. 또다른 예에서, 입력 스트림으로부터 수신된 데이터가 성공적으로 파싱될 수 없다면, 파서는 에러를 낼 것이다.
2.4 파서 생성(Parser Generation)
타깃 데이터 포맷(105)에 대한 정교화된 에지들의 목록이 결정되면, 상기 목록은 파서 프로그램(418)을 생성하는, 프로그램 생성 모듈(430)에 제공된다. 상기 정교화된 에지들의 목록은 도 6의 범위 트리 표현(600)에 대해 생성되는 테이블들을 채우도록 프로그램을 빌드(build)하기 위해 충분한 정보를 포함한다. 특히, 컴파일 트리 표현(700)이 단일 루트를 가지는 트리이고, 파서 동작들의 시퀀스(예를 들어, push( ), pop( ), 그리고 process( ) 명령어들)가 어떻게 VectorContainer가 처리되는지를 명시하는 루핑 행태(looping behavior)를 가지는 에지와 관련된 소스, 목적지, 그리고 가장 높은 노드들로부터 도출될 수 있다.
프로그램을 빌드(build)하기 위해, 도 7의 컴파일 트리 표현이 다시 순회된다(traversed). 상기 컴파일 트리 표현(700)의 각각의 노드에 대해, 상기 노드와 관련된 에지들 각각은 상기 에지에 대한 프로그램을 생성하기 위해 처리된다. 일반적으로, 에지에 대한 프로그램을 생성하기 위해, 상기 프로그램 생성 모듈(430)은 먼저 상기 에지에 대한 제어 플로우 그래프(control flow graph)를 생성하고, 상기 제어 플로우 그래프(control flow graph)는 생성된 코드를 포함한다(예를 들어, push( ), pop( ), 그리고 process( ) 명령어들). 상기 프로그램 생성 모듈(430)은 그런 다음 상기 프로그램을 생성하기 위해 상기 제어 플로우 그래프(control flow graph)를 순회한다(traverse). 에지에 대한 프로그램이 생성되면, 상기 프로그램은 범위 트리 표현(600)의 적절한 테이블에 추가된다. 일부 예에서, 상기 프로그램이 상기 프로그램과 관련된 에지의 소스 노드와 관련된 태그를 사용하여 테이블에 입력된다.
일부 예에서, 컴파일 트리 표현(700)을 순회하는(traverse) 동안, 컨테이너가 나가게될될 때 누적된 길이에 대한 비교가 이루어질 수 있도록 컨테이너가 들어오게 될 때 컨테이너 객체의 예상된 길이가 코딩된다. 노드들이 들어오게 될 때 누적(accumulation)이 태그 오버헤드(tag overhead)(예를 들어, 바이트로 표시된 태그의 길이)에 주의하여 코딩되고 컨테이너가 나가게 될 때 컨테이너의 예상되는 길이에 대한 체크가 수행된다. 일부 예에서, 어큐뮬레이터(accumulator)는 노드가 들어오게 될 때마다 제로화되고 파서가 부정 길이(indefinite length)를 처리할 수 있도록 길이 변수의 인덱스가 글로벌 변수 어레이(global variable array)의 공지의 인덱스 안으로 저장된다.
컨테이너가 나가게 될 때, 상기 누적 값이 그 부모 컨테이너의 누적 값에 더해진다. 일부 예에서, 인식되지 않은 태그들의 기본 동작들이 확장가능한 컨테이너 내에서 코딩된다. 세트 컨테이너들에 대해, 상기 세트에 의해 요구되는 모든 필드들이 할당되는 것을 확인하도록 상기 컨테이너를 나갈 때 체크가 수행된다. 입력 스트림으로부터 값을 적절한 형태로 파싱할 때 정수 값들, 객체 식별자들, 등등이 적절하게 디코딩될 수 있도록 데이터 변환이 코딩된다.
2.4.1 프로그램 생성 예
다음은 컴파일 그래프 표현(700)의 단일 에지에 대한 프로그램 생성의 상세한 설명이다(즉, S(c4) -> T(c5), End_Instance 에지, 에지 조합후 No_Loop 전이를 또한 포함함).
이 에지에 대한 프로그램을 생성하기 위해, 먼저 제어 플로우 그래프를 생성하는 것을 포함하여 코드 생성이 수행된다. 제어 플로우 그래프는 문장들(statements)과 단일 조건을 포함하는 노드들을 포함하는 이진 트리인 표준 컴파일러 데이터 구조이다:
Figure pct00011
여기서 cond 는 두 개의 제어 플로우 그래프 에지들을 가진다: 참 에지와 거짓 에지. cond 와 관련된 에지들은 상기 제어 플로우 그래프의 다른 노드들로 간다. 소스 노드, 목적지 노드, 그리고 에지에 대한 가장 높은 노드가 주어지면, S(c4)와 T(c5) 사이 경로에 대한 제어 플로우 그래프가 먼저 두 방향 경로들, 다음과 같은 UP 경로와 DOWN 경로를 가지는 경로를 나타냄으로써 결정될 수 있다:
Figure pct00012
UP과 DOWN 경로들이 순회될(traversed) 때, 에지에 대한 제어 플로우 그래프의 문장들(statements)과 조건들(conditions)이 생성되고 제어 플로우 그래프의 에지들이 그것들의 각각의 노드들과 연결된다. 특히, 에지의 UP 경로를 순회할 때, code_node_exit()라는 가상 함수가 나가게 되는 각각의 노드에 대해 호출된다. 이 경우에, code_node_exit() 함수가 S(c4) 노드에 대해 한번 그리고 SET_C 노드에 대해 한번, 두번 호출된다. 이것은 보통 두 POP() 문장들(즉, 명령어들)을 제어 플로우 그래프에 추가할 것이다. 그러나 이 경우에 모호성(ambiguity)이 존재한다. 특히, 에지, S(c4)->T(c5), No_Loop, 가 루핑 에지(즉, S(c4)->T(c5), End_instance)의 내부에 저장된다. 프로그램 생성 모듈(430)이 노드를 나가려고 할 때, 그것은 루핑 에지 내 결합된 에지들의 목록에 대해 체크한다. 결합된 에지들의 목록의 현재 요소의 톱 노드(top node)가 나가게 될 노드와 동일하다면 해결되어야만 하는 모호성(ambiguity)이 존재한다. 모호성(ambiguity)을 해결하는 하나의 가능한 방법은 해결을 실행하거나, 또는 모호성(ambiguity)이 해결될 수 없다면 심지어 에러를 내기 위해 전문화(specialization)를 허용하도록 또다른 가상 함수, resolve_ambiguity( )를 호출하는 것이다. 이 예에서, resolve_ambiguity( ) 함수는 SET_C에 요구되는 노드들 모두보다 더 적은 것이 할당된다면 No_Loop 경로를 선택한다.
일부 예에서, SET 컨테이너는 자동적으로 그에 부착된 변수를 가지며, 상기 변수는 요구되는 필드들의 수를 명시하는 것이 주목된다. 프로그램 생성 모듈(430)이 SET 컨테이너로 들어갈 때, 상기 컨테이너에 부착된 변수는 상기 요구되는 필드들의 수로 설정된다. 상기 프로그램 생성 모듈이 각각의 요구되는 필드를 방문할 때, SET 컨테이너에 부착된 변수가 감소된다. 상기 프로그램 생성 모듈(430)이 SET를 떠날 때, 상기 SET 컨테이너에 부착된 변수가 0이 아닌 경우, 에러가 발생한다. S(c4)->T(c5) 에지에 대해, 어떤 에러도 발생되지 않고 SET 컨테이너는 모호성(ambiguity)에 기인하여 나가게 되지 않는다.
따라서, UP 경로(즉, c4->SET_C->VectorContainer_1)에 대해, 다음 제어 플로우 그래프 문장들이 생성된다:
Figure pct00013
루프의 톱(top)에서 (즉, VectorContainer_1노드에서) 루핑 행태(looping behavior)가 No_Loop가 아니기 때문에 code_loop_top()이라는 가상 함수가 호출된다. 모호성 해결(ambiguity resolution)이 루핑 에지를 계속하기 위해 상기 프로그램 생성 모듈(430)을 허용했기 때문에, 상기 프로그램 생성 모듈(430)이 제어 플로우 그래프의 cf_node_2 노드에 문장들을 추가한다. 이 경우에, 인스턴스가 종료되고 SET_C_nr 변수가 제어 플로우 그래프의 cf_node_2 노드에 다음 문장들을 추가하여 재설정된다:
Figure pct00014
DOWN 경로에 대해, code_node_enter()라는 가상 함수가 들어오게 된 각각의 노드에 대해 호출된다. 이 경우에, code_node_enter()는 SET_C에 대해 한번, 루핑 에지에 대한 T(c5)에 대해 한번, 그리고 비-루핑 에지의 T(c5)에 대해 한번, 세번 호출된다. 비-루핑 에지에 대해, 상기 경로가 제어 플로우 그래프의 cf_node_3 노드를 사용하여 아래로 순회되며(traversed), S(c4)->T(c5)의 단순 전이를 포함한다. T(c5)가 SET 컨테이너 내에 있기 때문에, 프로그램 생성 모듈(430)은 그것이 이미 할당되었는지를 체크해야만 한다. 상기 루핑 에지에 대한 할당은 End_Instance가 어떤 것도 아직 새로운 인스턴스에 할당되지 않았다는 것을 보증하기 때문에 체크될 필요가 없다. 따라서, 제어 플로우 그래프의 cf_node_3은 다음 문장들을 포함한다:
Figure pct00015
T(c5)가 요구되는 필드이기 때문에, SET_C_nr 변수는 다음처럼 제어 플로우 그래프의 cf_node_4 노드에서 감소된다:
Figure pct00016
제어 플로우 그래프의 cf_node_2 노드는 제어 플로우 그래프의 cf_node_4 노드와 동일한 문장들을 포함한다. 따라서 최종 제어 그래프는 다음과 같다:
Figure pct00017
에지들 각각에 대한 제어 플로우 그래프가 상기 에지에 대한 바이트코드들을 조립하기 위해 순회된다(traversed). 제어 플로우 그래프의 순회(traversal)의 결과가 상기 에지에 대한 프로그램이다. 상기 프로그램은 도 6의 범위 데이터 표현(600)의 적절한 테이블에 저장된다. 각각의 에지에 대한 프로그램들이 (상기 절차에 따라) 생성되면, 파서 프로그램(418)이 프로그램 생성 모듈(430)로부터 출력된다.
3 데이터 동작 예(Data Operation Example)
다음 설명은 상기 기술들에 따라 컴파일되고 도 2의 데이터 포맷(205)에 따라 포맷된 데이터를 처리하도록 구성되는 파서를 사용하여 입력 데이터의 예시 스트림을 파싱하는 예를 기술한다. 한 데이터 객체(객체 "a")로부터 또다른 데이터 객체(객체 "b")로의 전이가 입력 스트림에서 인식된 후에, 파서는 예를 들어, "process(b)" 명령어를 사용하여 객체 b에 하나 이상의 데이터 동작들을 적용할 것이다.
도 9-11을 참조하면, 상기와 같이 파서 생성 모듈(106)에 의해 생성된 파서(928)의 예시 동작이 도시된다. 상기 예에서, 파서(928)는 다음 입력 스트림을 수신한다:
Figure pct00018
도 9를 참조하면, 입력 스트림(954)이 파서에 입력되고 레코드(756)로 파싱되는 것이 도시된다. 또한 도 10을 참조하면, 파서가 뒤따르는 전이 다이어그램(1058)이 입력 스트림(954)을 처리하기 위해 파서에 의해 사용되는 전이들을 표시하는 굵고 (1)-(5) 번호가 매겨진 화살표들을 포함한다. 특히, 입력 스트림으로부터 임의의 데이터를 수신하기 전에는, 파서가
Figure pct00019
상태에 있다. 그런 다음 상기 파서는 입력 스트림으로부터 태그 Q, 뒤이어 값 888을 수신한다. 상기 입력은 파서가
Figure pct00020
상태로부터 Q(a2) 상태로 전이하는, 첫번째 파서 전이, (1)을 야기한다. 도 11에 도시된 바와 같이,
Figure pct00021
로부터 Q(a2)로의 전이가 값 888을 첫번째 레코드의 a2 필드로 판독하는 process(a2) 데이터 동작을 포함하는 파서 프로그램과 관련된다.
그런 다음 파서는 입력 스트림으로부터 태그 S, 뒤이어 값 1010을 수신한다. 상기 입력이 파서가 Q(a2) 상태로부터 S(c4) 상태로 전이하는, 두번째 파서 전이, (2)를 야기한다. 도 11에 도시된 바와 같이, Q(a2)로부터 S(c4)로의 전이가 push(SCOPE_B) 명령어, push(SCOPE_C) 명령어, 그리고 process(c4) 명령어를 포함하는 파서 프로그램과 관련된다. 상기 push(SCOPE_B) 명령어는 파서가 CHOICE_B 컨테이너의 범위 안으로 푸시(push)하도록 하고, 상기 push(SCOPE_C) 명령어는 파서가 SET_C 컨테이너의 범위 안으로 푸시(push)하도록 하며, 상기 process(c4) 명령어는 파서가 첫번째 레코드의 c4 필드로 값 1010을 판독하도록 한다.
그럼 다음 파서는 입력 스트림으로부터 태그 T, 뒤이어 값 555를 수신한다. 상기 입력이 파서가 S(c4) 상태로부터 T(c5) 상태로 전이하는, 세번째 파서 전이, (3)을 야기한다. 도 11에 도시된 바와 같이, S(c4)로부터 T(c5)로의 전이는 파서가 첫번째 레코드의 c5 필드로 값 2020을 판독하도록 하는 process(c5) 명령어를 포함하는 파서 프로그램과 관련된다. 파서가 이미 SCOPE_C에 있기 때문에 이 상황에서 어떠한 push( ) 또는 pop( ) 명령어들도 필요하지 않음을 유의한다.
그런 다음 파서는 입력 스트림으로부터 또다른 태그 T, 뒤이어 값 555를 수신한다. T(c5)가 SET 컨테이너(즉, SET_C)의 부분인 스키마 객체이기 때문에 상기 태그 T의 여러 값들이 이 경우에 허용된다. SET 컨테이너들은 하나 이상의 객체들이 선택되는 항목들의 정렬되지 않은 세트를 포함하며, 동일한 객체의 다수를 포함한다. 상기 입력은 상기 파서가 루핑 방식으로 T(c5) 상태로부터 다시 T(c5) 상태로 전이하는, 네번째 파서 전이, (4)를 야기한다. 도 11에 도시된 바와 같이, T(c5)로부터 T(c5)로의 루핑 전이는 End_Instance( ) 명령어(즉, SET_C 컨테이너의 두번째 인스턴스가 수신될 것을 표시하기 위해)와 파서가 첫번째 레코드의 c5 필드의 두번째 인스턴스로 값 555를 판독하도록 하는 process(c5) 명령어를 포함하는 프로그램과 관련된다.
그런 다음 파서는 입력 스트림으로부터 또다른 태그 S, 뒤이어 값 444를 수신한다. 다시, S(c4) 스키마 객체가 SET 컨테이너(즉, SET_C)의 부분이기 때문에 태그 S의 여러 값들이 이 경우에 허용된다. 입력은 파서가 T(c5) 상태로부터 S(c4) 상태로 전이하는, 다섯번째 파서 전이, (5)를 야기한다. 도 11에 도시된 바와 같이, T(c5)로부터 S(c4)로 전이는 파서가 첫번째 레코드의 c4 필드의 두번째 인스턴스로 값 444를 판독하도록 하는 process(c4) 명령어를 포함하는 파서 프로그램과 관련된다.
마지막으로, 파서는 입력 스트림으로부터 태그 U, 뒤이어 값 999를 수신한다. 입력은 파서가 S(c4) 상태로부터 U(a6) 상태로 전이하는 여섯번째 파서 전이, (6)을 야기한다. 도 11에 도시된 바와 같이 S(c4)로부터 T(c5)로 전이는 pop(SCOPE_C) 명령어, pop(SCOPE_B) 명령어, 그리고 process(a6) 명령어를 포함하는 파서 프로그램과 관련된다. 상기 pop(SCOPE_C) 명령은 파서가 SET_C 컨테이너의 범위로부터 튀어 나오도록(pop out) 하고, 상기 pop(SCOPE_B) 명령어는 파서가 CHOICE_B 컨테이너의 범위로부터 튀어 나오도록록(pop out) 하며, 그리고 상기 process(a6) 명령어는 파서가 첫번째 레코드의 a6 필드로 값 999를 판독하도록 한다. 이 포인트에서 첫번째 레코드는 완성되고 파서는 입력 스트림으로부터 수신된 후속 데이터에 의해 채워질 새로운 레코드를 생성할 수 있다.
4 대안들(Alternatives)
일부 예에서, 모든 허용되는 전이들을 포함하여 컴파일된 파서를 생성하는 것보다는, 파서에 의해 요구되는 전이들이 요구시(on-demand) 컴파일될 수 있다(즉, 필요할 때까지 전이들은 파서로 컴파일되지 않는다). 그렇게 하는 것은 메시지 표준들이 크지만 실제 메시지는 보통 표준의 작은 부분을 실현할 뿐인 입력 스트림으로부터의 메시지들이 일반적으로 드물다는 사실을 이용한다.
전술된 기술들은 적절한 소프트웨어를 실행하는 컴퓨팅 시스템을 사용하여 실시될 수 있다. 예를 들어, 상기 소프트웨어는 하나 이상의 프로그램된 또는 프로그램가능한 컴퓨팅 시스템(분산, 클라이언트/서버, 또는 그리드 같은 다양한 아키텍처들일 수 있음) - 각각은 적어도 하나의 프로세서, 적어도 하나의 데이터 스토리지 시스템(휘발성 및/또는 비-휘발성 메모리 및/또는 저장 요소들을 포함함), (적어도 하나의 입력 디바이스 또는 포트를 사용하여 입력을 수신하기 위한, 그리고 적어도 하나 이상의 출력 디바이스 또는 포트를 사용하여 출력을 제공하기 위한) 적어도 하나의 사용자 인터페이스를 포함함 - 상에서 실행하는 하나 이상의 컴퓨터 프로그램의 절차들을 포함할 수 있다. 상기 소프트웨어는 예를 들어, 데이터플로우 그래프들의 디자인, 구성, 그리고 실행과 관련된 서비스들을 제공하는 더 큰 프로그램의 하나 이상의 모듈들을 포함할 수 있다. 상기 프로그램의 모듈들(예를 들어, 데이터플로우 그래프의 요소들)은 데이터 저장소에 저장된 데이터 모델을 준수하는 데이터 구조들 또는 다른 조직화된 데이터로서 실현될 수 있다.
상기 제시된 접근법들이 데이터플로우 그래프를 사용하여 실현되는 것으로 설명되는 반면, 상기 접근법들이 임의의 적절한 프로그래밍 언어를 사용하여 실현될 수 있음을 유의한다. 즉, 접근법들은 데이터플로우 그래프 환경에서의 사용으로 제한되지 않는다.
일부 예에서, 전술된 컴파일 트리는 특별한 상황들과 표준에서의 예외들을 다루기 위해 노드들의 부가적인 유형들을 포함한다. 일부 예에서, 컴파일 트리는 특별 노드들의 네 개의 상이한 유형들을 포함한다: 루트 노드, 벡터 컨테이너 노드들, 빈 태그(empty tag) 노드들, 그리고 팬-아웃-전용(fan-out-only) 노드들. 상기 루트 노드(상기 언급됨)는 컴파일 트리의 시작 상태를 나타낸다. 상기 벡터 컨테이너 노드(또한 상기 언급됨)는 컴파일 트리의 루프들의 처리를 위해 사용된다. 빈 태그(empty tag) 노드는 인식되지 않는 태그들을 나타내기 위해 사용된다. 빈 태그(empty tag) 노드는 예를 들어, 인식되지 않는 태그들이 무시되는 곳에서, 확장 마커(extension marker)의 개념이 있는 ASN.1 표준과 관련하여 사용될 수 있다. 상기 팬-아웃-전용(fan-out-only) 노드는 태그와 관련되나 그 자식들(즉, 멤버들) 모두가 옵셔널인 컨테이너를 나타내기 위해 사용된다. 즉, 컨테이너가 들어오게 되고 그런 다음 어떤 데이터 동작들을 수행함 없이 나가게 될 수 있다. 팬-아웃-전용(fan-out-only) 노드는 예를 들어, 요구되나 전체적으로 옵셔널인 컨텐츠들을 가지는 컨테이너들을 포함하는 ASN.1 표준과 관련되어 사용될 수 있다. 상기 팬-아웃-전용(fan-out-only) 노드는 컨테이너의 팬-아웃(fan-out)이 직접적으로 타깃으로 될 수 있기 위해 컨테이너 내 노드로서 삽입된다.
일부 예에서, ASN.1 표준의 확장 마커들은 특별한 처리를 요구한다. 다음 두 시퀀스들을 고려해 보자:
Figure pct00022
BottomSeq의 str1에서 str2로의 전이는 태그[1]이 TopSeq에서 무시된 태그일 수 있기 때문에 TopSeq의 확장 마커(즉, '…')에 기인하여 모호하다. 이러한 상황을 처리하기 위해, 모호성 해결(ambiguity resolution) 동안 상기 str1에서 str2로의 전이는 그것이 또한 TopSeq에서 확장 마커(즉, '…')를 타깃으로 하기 위해 강제적으로 모호하게 된다.
상기 소프트웨어는 (예를 들어 범용 또는 특별 목적 컴퓨팅 시스템 또는 장치에 의해 판독 가능한) CD-ROM 또는 다른 컴퓨터 판독 가능 매체 같은 유형의, 비 일시적인 매체상에 제공될 수 있거나 또는 그것이 실행되는 컴퓨팅 시스템의 유형의, 비 일시적 매체에 네트워크 통신 매체를 통해 (예를 들어, 전파 신호에 부호화되어) 전달될 수 있다. 상기 처리의 일부 또는 전부는 특별 목적 컴퓨터 상에서 또는 코프로세서(coprocessors) 또는 필드 프로그래머블 게이트 어레이(field-programmable gate array, FPGA), 또는 전용, 주문형 반도체(application-specific integrated circuit, ASIC) 같은 특별 목적 하드웨어를 사용하여 수행될 수 있다. 상기 처리는 소프트웨어에 의해 명시된 계산의 다른 부분들이 다른 컴퓨팅 요소들에 의해 수행되는 분산 방식으로 실행될 수 있다. 각각의 이러한 컴퓨터 프로그램은 저장 장치 매체가 본원에서 기술된 처리를 수행하도록 컴퓨터에 의해 판독될 때 컴퓨터를 구성하고 작동하기 위해, 바람직하게는 범용 또는 특별 목적 프로그래머블 컴퓨터에 의해 액세스 가능한 저장 장치의 컴퓨터 판독 가능 저장 매체(예를 들어, 솔리드 스테이트 메모리(solid state memory) 또는 매체, 또는 자기 또는 광 매체) 상에 저장되거나 다운로드 된다. 본 발명 시스템은 또한 컴퓨터 프로그램으로 구성되는, 유형의, 비 일시적 매체로서 실현될 수 있고, 그렇게 구성된 매체는 컴퓨터가 본원에서 기술된 처리 스텝들 중 하나 이상을 수행하도록 구체적이고 미리 정의된 방식으로 동작하게 한다.
본 발명의 다수의 실시 예가 기술되었다. 그럼에도 불구하고, 전술한 설명은 예시를 위한 것이며 다음의 청구범위에 의해 정의되는 본 발명의 범위를 한정하는 것이 아닌 것으로 이해되어야 한다. 따라서, 다른 실시예들 또한 다음 청구범위 내에 있다. 예를 들어, 다양한 변형이 본 발명의 범위를 벗어남 없이 만들어 질 수 있다. 부가적으로, 전술된 스텝들의 일부는 순서 독립적이므로 기술된 것과 다른 순서로 수행될 수 있다.

Claims (21)

  1. 데이터 객체들의 입력 스트림을 파싱하기 위해 데이터 파서를 생성하기 위한 방법에 있어서, 상기 방법은
    계층 구조로 조직된 복수의 객체들을 정의하는 계층적 데이터 포맷을 나타내는 정보를 수신하는 단계 - 상기 객체들은 데이터 객체들을 나타내는 적어도 하나의 스키마 객체들을 포함하고, 적어도 하나의 컨테이너 객체들 각각은 적어도 하나의 스키마 객체들과 관련됨 -; 및
    상기 데이터 파서를 형성하기 위해 상기 수신된 정보를 처리하는 단계를 포함하되, 상기 처리하는 단계는
    상기 계층적 데이터 포맷을 나타내는 정보에 적어도 부분적으로 기초하여, 상기 입력 스트림에서 연속적인 데이터 객체들 간 허용되는 전이들을 결정하는 단계;
    상기 결정된 허용되는 전이들의 각각과 적어도 하나의 데이터 동작들을 관련시키는 단계; 및
    상기 입력 스트림에서 제1 데이터 객체와 제2 데이터 객체 간 전이를 인식하기 위해, 그리고 (2) 적어도 하나의 이전에 인식된 전이들과 관련된 컨텍스트(context)에 적어도 부분적으로 기초하여 상기 제2 데이터 객체 내 데이터 값에 상기 인식된 전이와 관련된 데이터 동작을 수행하기 위해 상기 데이터 파서를 실행하도록 프로세서를 구성하기 위한 사양을 저장하는 단계를 포함하는 데이터 객체들의 입력 스트림을 파싱하기 위해 데이터 파서를 생성하기 위한 방법.
  2. 제1항에 있어서,
    상기 계층적 데이터 포맷을 나타내는 정보는 상기 계층적 데이터 포맷에 의해 정의된 상기 복수의 객체들 중 하나를 나타내는 복수의 노드들의 각각에 복수의 에지들에 의해 상호연결된 복수의 노드들을 포함하는 상기 계층적 데이터 포맷의 트리 표현을 포함하는 것을 특징으로 하는 데이터 객체들의 입력 스트림을 파싱하기 위해 데이터 파서를 생성하기 위한 방법.
  3. 제2항에 있어서,
    상기 적어도 하나의 이전에 인식된 전이들과 관련된 컨텍스트(context)는 상기 계층적 데이터 포맷의 트리 표현에서 위치에 대응하는 것을 특징으로 하는 데이터 객체들의 입력 스트림을 파싱하기 위해 데이터 파서를 생성하기 위한 방법.
  4. 선행하는 항 중 어느 한 항에 있어서,
    상기 스키마 객체들 중 적어도 하나는 상기 스키마 객체에 의해 나타내어지는 대응하는 데이터 객체와 함께 포함되는 태그를 포함하는 것을 특징으로 하는 데이터 객체들의 입력 스트림을 파싱하기 위해 데이터 파서를 생성하기 위한 방법.
  5. 선행하는 항 중 어느 한 항에 있어서,
    상기 컨테이너 객체들은
    상기 입력 스트림 내 포함된 데이터 객체들의 시퀀스, 상기 입력 스트림 내 포함된 데이터 객체들의 세트, 또는 여러 가능한 데이터 객체들 중 상기 입력 스트림 내 하나의 포함된 데이터 객체의 선택 중 적어도 하나를 나타내는 적어도 하나의 컨테이너 객체를 포함하는 것을 특징으로 하는 데이터 객체들의 입력 스트림을 파싱하기 위해 데이터 파서를 생성하기 위한 방법.
  6. 선행하는 항 중 어느 한 항에 있어서,
    상기 컨테이너 객체들 중 적어도 일부는 상기 입력 스트림 내 데이터 객체들의 일련의 여러 컨테이너들을 나타내는 것으로 명시되는 것을 특징으로 하는 데이터 객체들의 입력 스트림을 파싱하기 위해 데이터 파서를 생성하기 위한 방법.
  7. 선행하는 항 중 어느 한 항에 있어서,
    상기 복수의 객체들 중 적어도 일부 객체들은 상기 계층적 데이터 포맷에서 옵셔널(optional)로 지정되는 것을 특징으로 하는 데이터 객체들의 입력 스트림을 파싱하기 위해 데이터 파서를 생성하기 위한 방법.
  8. 선행하는 항 중 어느 한 항에 있어서,
    상기 입력 스트림에서 상기 계층적 데이터 포맷의 객체들 간 허용되는 전이들을 결정하는 단계는
    상기 계층적 데이터 포맷의 컴파일 트리 표현(compilation tree representation)을 생성하는 단계를 포함하되, 상기 컴파일 트리 표현은 상기 계층적 데이터 포맷에 의해 정의된 상기 복수의 객체들 중 하나를 나타내는 복수의 노드들 중 적어도 일부 및 컴파일 특정 객체들(compilation specific objects)을 나타내는 복수의 노드들 중 적어도 일부에 복수의 에지들에 의해 상호연결되는 복수의 노드들을 포함하는 데이터 객체들의 입력 스트림을 파싱하기 위해 데이터 파서를 생성하기 위한 방법.
  9. 제8항에 있어서,
    상기 컴파일 특정 객체들을 나타내는 노드들은 벡터 컨테이너 노드들, 루트 노드들, 빈 태그(empty tag) 노드들, 및 팬-아웃 전용(fan-out only) 노드들 중 적어도 하나를 포함하는 것을 특징으로 하는 데이터 객체들의 입력 스트림을 파싱하기 위해 데이터 파서를 생성하기 위한 방법.
  10. 제8항 또는 제9항에 있어서,
    상기 입력 스트림에서 상기 계층적 데이터 포맷의 객체들 간 허용되는 전이들을 결정하는 단계는 상기 컴파일 트리 표현의 노드들 간 모든 허용되는 전이들을 결정하기 위해 상기 컴파일 트리 표현을 처리하는 단계를 포함하는 것을 특징으로 하는 데이터 객체들의 입력 스트림을 파싱하기 위해 데이터 파서를 생성하기 위한 방법.
  11. 제10항에 있어서,
    상기 컴파일 트리 표현의 노드들 간 모든 허용되는 전이들을 결정하기 위해 상기 컴파일 트리 표현을 처리하는 단계는 상기 컴파일 트리 표현의 각각의 노드에 대해, 상기 노드에 대해 전이들을 가지는 모든 노드들을 결정하는 단계와 상기 노드가 모든 노드들에 대해 적어도 하나의 전이를 가지는 모든 노드들을 결정하는 단계를 포함하는 것을 특징으로 하는 데이터 객체들의 입력 스트림을 파싱하기 위해 데이터 파서를 생성하기 위한 방법.
  12. 제10항 또는 제11항에 있어서,
    상기 컴파일 트리 표현의 노드들 간 모든 허용되는 전이들을 결정하기 위해 상기 컴파일 트리 표현을 처리하는 단계는 상기 노드들 간 중복 전이들(duplicate transitions)을 결합하는 단계와 상기 노드들 간 불완전한 전이들(incomplete transitions)을 제거하는 단계를 포함하는 것을 특징으로 하는 데이터 객체들의 입력 스트림을 파싱하기 위해 데이터 파서를 생성하기 위한 방법.
  13. 제10항 또는 제11항 또는 제12항에 있어서,
    식별된 각각의 허용되는 전이에 대해 정교화된 에지(elaborated edge)를 생성하는 단계를 더 포함하되, 상기 정교화된 에지는 상기 전이와 관련된 소스 노드, 상기 전이와 관련된 목적지 노드, 상기 전이와 관련된 컨테이너 노드, 및 상기 전이와 관련된 루핑 행태(looping behavior)를 포함하는 데이터 객체들의 입력 스트림을 파싱하기 위해 데이터 파서를 생성하기 위한 방법.
  14. 제13항에 있어서,
    상기 식별된 전이들의 각각과 적어도 하나의 데이터 동작들을 관련시키는 단계는 적어도 하나의 데이터 동작들을 결정하기 위해 각각의 정교화된 에지를 분석하는 단계를 포함하는 것을 특징으로 하는 데이터 객체들의 입력 스트림을 파싱하기 위해 데이터 파서를 생성하기 위한 방법.
  15. 선행하는 항 중 어느 한 항에 있어서,
    상기 적어도 하나의 데이터 동작들은 컨테이너 객체의 범위 안으로 푸시(push)하기 위한 동작, 컨테이너 객체의 범위로부터 튀어나오기(popping) 위한 동작, 및 데이터 객체의 값을 판독하기 위한 동작을 포함하는 것을 특징으로 하는 데이터 객체들의 입력 스트림을 파싱하기 위해 데이터 파서를 생성하기 위한 방법.
  16. 선행하는 항 중 어느 한 항에 있어서,
    상기 입력 스트림에서 상기 계층적 데이터 포맷의 객체들 간 허용되는 전이들을 결정하기 위한 단계는
    상기 계층적 데이터 포맷이 임의의 모호한 정의들을 포함하지 않는다는 표시, 상기 계층적 데이터 포맷이 적어도 하나의 모호한 정의들을 포함한다는 표시, 또는 상기 계층적 데이터 포맷에 포함되는 임의의 모호한 정의들의 적어도 하나의 가능한 해결들 중 적어도 하나를 포함하는 출력을 생성하는 단계를 포함하는 것을 특징으로 하는 데이터 객체들의 입력 스트림을 파싱하기 위해 데이터 파서를 생성하기 위한 방법.
  17. 선행하는 항 중 어느 한 항에 있어서,
    상기 계층적 데이터 포맷을 나타내는 데이터는
    ASN.1 표기, XML 표기, SWIFT 표기, X12 표기, 및 HL 표기 중 적어도 하나를 사용하여 명시되는 것을 특징으로 하는 데이터 객체들의 입력 스트림을 파싱하기 위해 데이터 파서를 생성하기 위한 방법.
  18. 선행하는 항 중 어느 한 항의 방법에 따라 생성되는 데이터 파서.
  19. 계층적 데이터 포맷에 따라 포맷된 입력 스트림을 파싱하기 위해 데이터 파서를 생성하기 위한 시스템에 있어서, 상기 시스템은
    계층 구조로 조직된 복수의 객체들을 정의하는 계층적 데이터 포맷을 나타내는 정보를 수신하도록 구성된 입력 디바이스 또는 포트 - 상기 객체들은 데이터 객체들을 나타내는 적어도 하나의 스키마 객체들을 포함하고, 적어도 하나의 컨테이너 객체들 각각은 적어도 하나의 스키마 객체들과 관련됨 -; 및
    상기 데이터 파서를 형성하기 위해 상기 수신된 정보를 처리하도록 구성된 적어도 하나의 프로세서를 포함하되, 상기 처리는
    상기 계층적 데이터 포맷을 나타내는 정보에 적어도 부분적으로 기초하여, 상기 입력 스트림에서 연속적인 데이터 객체들 간 허용되는 전이들을 결정하는 단계;
    상기 결정된 허용되는 전이들의 각각과 적어도 하나의 데이터 동작들을 관련시키는 단계; 및
    상기 입력 스트림에서 제1 데이터 객체와 제2 데이터 객체 간 전이를 인식하기 위해, 그리고 (2) 적어도 하나의 이전에 인식된 전이들과 관련된 컨텍스트(context)에 적어도 부분적으로 기초하여 상기 제2 데이터 객체 내 데이터 값에 상기 인식된 전이와 관련된 데이터 동작을 수행하기 위해 상기 데이터 파서를 실행하도록 프로세서를 구성하기 위한 사양을 저장하는 단계를 포함하는 계층적 데이터 포맷에 따라 포맷된 입력 스트림을 파싱하기 위해 데이터 파서를 생성하기 위한 시스템.
  20. 계층적 데이터 포맷에 따라 포맷된 입력 스트림을 파싱하기 위해 데이터 파서를 생성하기 위한 시스템에 있어서, 상기 시스템은
    계층 구조로 조직된 복수의 객체들을 정의하는 계층적 데이터 포맷을 나타내는 정보를 수신하기 위한 수단 - 상기 객체들은 데이터 객체들을 나타내는 적어도 하나의 스키마 객체들을 포함하고, 적어도 하나의 컨테이너 객체들 각각은 적어도 하나의 스키마 객체들과 관련됨 -; 및
    상기 데이터 파서를 형성하기 위해 상기 수신된 정보를 처리하기 위한 수단을 포함하되, 상기 처리는
    상기 계층적 데이터 포맷을 나타내는 정보에 적어도 부분적으로 기초하여, 상기 입력 스트림에서 연속적인 데이터 객체들 간 허용되는 전이들을 결정하는 단계;
    상기 결정된 허용되는 전이들의 각각과 적어도 하나의 데이터 동작들을 관련시키는 단계; 및
    상기 입력 스트림에서 제1 데이터 객체와 제2 데이터 객체 간 전이를 인식하기 위해, 그리고 (2) 적어도 하나의 이전에 인식된 전이들과 관련된 컨텍스트(context)에 적어도 부분적으로 기초하여 상기 제2 데이터 객체 내 데이터 값에 상기 인식된 전이와 관련된 데이터 동작을 수행하기 위해 상기 데이터 파서를 실행하도록 프로세서를 구성하기 위한 사양을 저장하는 단계를 포함하는 계층적 데이터 포맷에 따라 포맷된 입력 스트림을 파싱하기 위해 데이터 파서를 생성하기 위한 시스템.
  21. 데이터 객체들의 입력 스트림을 파싱하기 위해 데이터 파서를 생성하기 위한 컴퓨터-판독가능 매체 상에 저장된 소프트웨어에 있어서, 상기 소프트웨어는 컴퓨팅 시스템이
    계층 구조로 조직된 복수의 객체들을 정의하는 계층적 데이터 포맷을 나타내는 정보를 수신하도록 하고 - 상기 객체들은 데이터 객체들을 나타내는 적어도 하나의 스키마 객체들을 포함하고, 적어도 하나의 컨테이너 객체들 각각은 적어도 하나의 스키마 객체들과 관련됨 -; 및
    상기 데이터 파서를 형성하기 위해 상기 수신된 정보를 처리하도록 하기 위한 명령들을 포함하되, 상기 처리는
    상기 계층적 데이터 포맷을 나타내는 정보에 적어도 부분적으로 기초하여, 상기 입력 스트림에서 연속적인 데이터 객체들 간 허용되는 전이들을 결정하는 단계;
    상기 결정된 허용되는 전이들의 각각과 적어도 하나의 데이터 동작들을 관련시키는 단계; 및
    상기 입력 스트림에서 제1 데이터 객체와 제2 데이터 객체 간 전이를 인식하기 위해, 그리고 (2) 적어도 하나의 이전에 인식된 전이들과 관련된 컨텍스트(context)에 적어도 부분적으로 기초하여 상기 제2 데이터 객체 내 데이터 값에 상기 인식된 전이와 관련된 데이터 동작을 수행하기 위해 상기 데이터 파서를 실행하도록 프로세서를 구성하기 위한 사양을 저장하는 단계를 포함하는 데이터 객체들의 입력 스트림을 파싱하기 위해 데이터 파서를 생성하기 위한 컴퓨터-판독가능 매체 상에 저장된 소프트웨어.
KR1020167003516A 2013-07-12 2014-06-30 파서 생성 KR102294522B1 (ko)

Applications Claiming Priority (5)

Application Number Priority Date Filing Date Title
US201361845722P 2013-07-12 2013-07-12
US61/845,722 2013-07-12
US14/087,158 2013-11-22
US14/087,158 US9588956B2 (en) 2013-07-12 2013-11-22 Parser generation
PCT/US2014/044790 WO2015006075A1 (en) 2013-07-12 2014-06-30 Parser generation

Publications (2)

Publication Number Publication Date
KR20160031519A true KR20160031519A (ko) 2016-03-22
KR102294522B1 KR102294522B1 (ko) 2021-08-26

Family

ID=52278007

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020167003516A KR102294522B1 (ko) 2013-07-12 2014-06-30 파서 생성

Country Status (9)

Country Link
US (1) US9588956B2 (ko)
EP (1) EP3019954B1 (ko)
JP (1) JP6377739B2 (ko)
KR (1) KR102294522B1 (ko)
CN (1) CN105531672B (ko)
AU (1) AU2014287654B2 (ko)
CA (1) CA2917824C (ko)
HK (1) HK1224051A1 (ko)
WO (1) WO2015006075A1 (ko)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2020036810A1 (en) * 2018-08-14 2020-02-20 Development Guild DDI, Inc. System and method for facilitating an objective-oriented data structure and an objective via the data structure

Families Citing this family (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2015106264A1 (en) * 2014-01-13 2015-07-16 Transcirrus Automatic connection of nodes to a cloud cluster
US10073682B1 (en) * 2016-03-22 2018-09-11 EMC IP Holding Company LLC Method and mechanism for optimal scope evaluation in scope based hierarchical configuration using evaluated scope propagation technique
US10725750B2 (en) * 2016-12-01 2020-07-28 Red Hat, Inc. Compiler integrated intelligent deserialization framework
US11137988B2 (en) 2017-06-02 2021-10-05 Mitsubishi Electric Corporation Program code generation device and computer readable medium
CN107947897A (zh) * 2017-10-27 2018-04-20 深圳市创梦天地科技股份有限公司 用于网络传输的信息编码方法和装置
CN108132999B (zh) * 2017-12-21 2019-06-04 恒宝股份有限公司 一种元素名的处理方法及系统
US10665008B2 (en) * 2018-05-31 2020-05-26 Microsoft Technology Licensing, Llc Hybrid traversal of object sets
WO2021091550A1 (en) * 2019-11-06 2021-05-14 Google Llc Method and apparatus for smart and extensible schema matching framework
CN111984305B (zh) * 2020-08-21 2023-08-08 腾讯科技(上海)有限公司 一种应用配置方法及装置、计算机设备
US20220138206A1 (en) * 2020-10-30 2022-05-05 Snowflake Inc. System for implementing an object tagging framework
US20240070163A1 (en) * 2022-08-23 2024-02-29 Ab Initio Technology Llc Operationalizing metadata

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20070113221A1 (en) * 2005-08-30 2007-05-17 Erxiang Liu XML compiler that generates an application specific XML parser at runtime and consumes multiple schemas
US20080046874A1 (en) * 2006-08-21 2008-02-21 International Business Machines Corporation Data reporting application programming interfaces in an xml parser generator for xml validation and deserialization
US7509654B2 (en) * 2005-09-29 2009-03-24 Avaya Inc. Data-driven and plug-in defined event engine
US7685083B2 (en) * 2002-02-01 2010-03-23 John Fairweather System and method for managing knowledge

Family Cites Families (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6990632B2 (en) 2003-02-28 2006-01-24 Microsoft Corporation Method and system for inferring a schema from a hierarchical data structure for use in a spreadsheet
WO2006081428A2 (en) * 2005-01-27 2006-08-03 Symyx Technologies, Inc. Parser for generating structure data
US20060212859A1 (en) * 2005-03-18 2006-09-21 Microsoft Corporation System and method for generating XML-based language parser and writer
DE602006014673D1 (de) * 2005-04-20 2010-07-15 Ibm Vorrichtung und verfahren zur mustererfassung
KR101269055B1 (ko) * 2006-08-19 2013-05-29 삼성전자주식회사 레이아웃의 수율을 높이기 위한 방법 및 상기 방법이저장된 기록 매체
JP2009054125A (ja) * 2007-08-27 2009-03-12 Daisuke Kamiyama 文書情報表示システム
JP5453273B2 (ja) 2007-09-20 2014-03-26 アビニシオ テクノロジー エルエルシー グラフベース計算におけるデータフロー管理
US8504984B1 (en) * 2009-05-29 2013-08-06 Google Inc. Modifying grammars to correct programming language statements
US10445309B2 (en) 2009-11-13 2019-10-15 Ab Initio Technology Llc Managing record format information
US8429605B2 (en) * 2009-12-30 2013-04-23 The United States Of America As Represented By The Secretary Of The Navy Finite state machine architecture for software development
CN102880492B (zh) * 2012-09-24 2015-09-02 广东华大集成技术有限责任公司 一种基于as的xml脚本解析器及其方法

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7685083B2 (en) * 2002-02-01 2010-03-23 John Fairweather System and method for managing knowledge
US20070113221A1 (en) * 2005-08-30 2007-05-17 Erxiang Liu XML compiler that generates an application specific XML parser at runtime and consumes multiple schemas
US7509654B2 (en) * 2005-09-29 2009-03-24 Avaya Inc. Data-driven and plug-in defined event engine
US20080046874A1 (en) * 2006-08-21 2008-02-21 International Business Machines Corporation Data reporting application programming interfaces in an xml parser generator for xml validation and deserialization

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2020036810A1 (en) * 2018-08-14 2020-02-20 Development Guild DDI, Inc. System and method for facilitating an objective-oriented data structure and an objective via the data structure
US10901969B2 (en) 2018-08-14 2021-01-26 Development Guild DDI, Inc. System and method for facilitating an objective-oriented data structure and an objective via the data structure

Also Published As

Publication number Publication date
CN105531672A (zh) 2016-04-27
KR102294522B1 (ko) 2021-08-26
US9588956B2 (en) 2017-03-07
HK1224051A1 (zh) 2017-08-11
WO2015006075A1 (en) 2015-01-15
AU2014287654A1 (en) 2016-02-18
AU2014287654B2 (en) 2019-06-13
JP6377739B2 (ja) 2018-08-22
EP3019954A1 (en) 2016-05-18
JP2016526744A (ja) 2016-09-05
US20150019576A1 (en) 2015-01-15
CA2917824C (en) 2021-10-19
EP3019954B1 (en) 2020-10-07
CA2917824A1 (en) 2015-01-15
CN105531672B (zh) 2019-02-22

Similar Documents

Publication Publication Date Title
KR102294522B1 (ko) 파서 생성
KR101572599B1 (ko) 그래프에 기초한 연산에서 데이터 흐름을 관리하는 방법 및 시스템
US7340728B2 (en) Methods and systems for direct execution of XML documents
US6859810B2 (en) Declarative specification and engine for non-isomorphic data mapping
US8904347B2 (en) Apparatus, method and system for building software by composition
KR101099212B1 (ko) 예외 처리 구조물들을 포함하는 소프트웨어의 소스 언어 독립형 중간 표현을 처리하는 방법, 다수의 소스 코드 언어들에 대한 소스 언어 독립형 예외 처리 중간 표현들을 구현하기 위한 시스템 및 컴퓨터 판독가능 저장 매체
US7665073B2 (en) Compile time meta-object protocol systems and methods
US7698694B2 (en) Methods and systems for transforming an AND/OR command tree into a command data model
US20070169008A1 (en) External programmatic interface for IOS CLI compliant routers
CN110069259B (zh) 基于idl文件的解析方法、装置、电子设备和存储介质
US20210365253A1 (en) Heterogeneity-agnostic and topology-agnostic data plane programming
Fu et al. Model checking XML manipulating software
JP2005018767A (ja) クエリオプティマイザのシステムおよび方法
CN103164249A (zh) 用于脚本语言编译器的扩展机制
US20070006179A1 (en) Methods and systems for transforming a parse graph into an and/or command tree
Gu et al. From UML to LQN by XML algebra-based model transformations
CN109460220A (zh) 报文预定义代码生成方法、装置、电子设备和存储介质
CN114168149A (zh) 一种数据转换方法及装置
US7305412B2 (en) System and method for conversion from graphical business process representations to structural text-based business process representations
CN115840775A (zh) 数据的提取方法、装置、服务器及存储介质
Vizovitin et al. Verifying UCM specifications of distributed systems using colored Petri nets
Ameedeen A model driven approach to analysis and synthesis of sequence diagrams
Gargantini et al. Metamodelling a formal method: applying mde to abstract state machines
Malohlava et al. Interoperable domain‐specific languages families for code generation
CN116501744A (zh) 仿真数据的自动化建表与入库方法、装置和计算机设备

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
GRNT Written decision to grant