KR20040045143A - 소스코드 생성 방법 - Google Patents

소스코드 생성 방법 Download PDF

Info

Publication number
KR20040045143A
KR20040045143A KR1020020073170A KR20020073170A KR20040045143A KR 20040045143 A KR20040045143 A KR 20040045143A KR 1020020073170 A KR1020020073170 A KR 1020020073170A KR 20020073170 A KR20020073170 A KR 20020073170A KR 20040045143 A KR20040045143 A KR 20040045143A
Authority
KR
South Korea
Prior art keywords
source code
node
code generation
generation step
generating
Prior art date
Application number
KR1020020073170A
Other languages
English (en)
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 KR1020020073170A priority Critical patent/KR20040045143A/ko
Publication of KR20040045143A publication Critical patent/KR20040045143A/ko

Links

Classifications

    • 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

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Health & Medical Sciences (AREA)
  • Artificial Intelligence (AREA)
  • Audiology, Speech & Language Pathology (AREA)
  • Computational Linguistics (AREA)
  • General Health & Medical Sciences (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Devices For Executing Special Programs (AREA)

Abstract

본 발명은 소스코드 생성 방법에 관한 것으로, 특히 ABNF로 기술된 텍스트 데이터에 대한 디코딩 기능을 수행하는 소스코드를 운용자가 직접 작성하지 않고 소스코드 생성 프로그램을 통해서 자동으로 소스코드를 생성시킬 수 있도록 하는 소스코드 생성 방법에 관한 것이다.
본 발명은 ABNF 형식으로 정의된 문장들을 처리하는 전처리 과정과; 상기 처리된 문장들에 대해 입력값을 이용하여 링크드 리스트 및 goto 문의 레이블을 생성하는 구문분석 과정과; 상기 생성된 링크드 리스트 및 goto 문의 레이블을 이용해 디코딩될 데이터를 검증하고 해당 검증된 데이터의 길이를 구하는 소스코드 생성 과정을 포함하여 이루어져, ABNF로 기술된 텍스트 데이터에 대한 디코딩 기능을 수행하는 소스코드를 소스코드 생성 프로그램을 통해서 자동으로 소스코드를 생성시킴으로써, 디코딩 루틴 코딩 시간을 절감하여 개발 기간을 단축 할 수 있고, 디코딩 루틴 성능을 향상시킬 수 있고, 소스코드 오류를 최소화할 수 있으며, 새로운 패턴 추가시 유지보수를 용이하게 할 수 있다.

Description

소스코드 생성 방법{Method For Generating Source Code}
본 발명은 소스코드(Source Code) 생성 방법에 관한 것으로, 특히 ABNF(Augmented Backus-Naur Form)로 기술된 텍스트 데이터에 대한 디코딩(Decoding) 기능을 수행하는 소스코드를 운용자가 직접 작성하지 않고 소스코드 생성 프로그램을 통해서 자동으로 소스코드를 생성시킬 수 있도록 하는 소스코드 생성 방법에 관한 것이다.
종래, RFC822의 ABNF로 기술된 텍스트 데이터 형식을 사용하는 프로토콜(예: SIP(Session Initiation Protocol), Megacop)에서 텍스트 형태로 수신된 데이터를 해당 프로토콜 및 상위 계층에서 처리할 수 있도록 디코딩을 할때, 운용자가 직접 디코딩을 위한 소스코드를 작성하였다.
이하, 도 1과 도 2를 참조하여 종래의 ABNF형식 데이터를 디코딩하는 소스코드 생성 방법을 설명한다.
도 1은 일반적인 네트워크로 연결된 시스템의 구성을 나타낸 도면이고, 도 2는 종래의 운용자에 의해 생성된 소스코드 예시도이다.
도 1에 도시된 바와 같이, 네트워크로 연결된 두 시스템간에 통신을 할 경우 프로토콜을 사용하는데, 특히 텍스트 기반의 프로토콜의 경우 시스템A가 네트워크를 통해 시스템B로 데이터를 전송할 때, 해당 데이터를 텍스트형태로인코딩(Encoding)하여 전송하고, 상기 시스템B는 해당 텍스트 데이터를 수신하여 디코딩 과정을 거친다.
이때, 상기 텍스트 형태의 데이터를 디코딩하기 위해 운용자가 수작업으로 해당 디코딩하는 소스코드를 작성하는 경우에. 디코딩할 데이터, 현재 문맥상 디코딩 가능한 데이터를 고려하여 소스코드를 작성하게 된다.
도 2는 운용자가 직접 소스코드를 작성할 경우, C언어로 작성된 소스코드 프로그램의 예로서, decode_text 함수의 인자 'data'는 도착한 메시지를 가리키는 포인터이고, 'len'은 디코딩한 길이를 되돌려주기 위한 변수이며, 실제 소스코드에는 대소문자 구분 등의 과정이 필요하지만 여기서는 단순화하기 위하여 생략하였다.
도 2의 함수는 텍스트 데이터를 입력으로 받아서 그것이 "Term"이라는 문자열인지 "Context"라는 문자열인지를 구분해서 해당 결과와 디코딩 한 길이를 리턴하는데, 실제 소스코드를 작성할 경우에는 대소문자 구분하는 경우, 구분하지 않는 경우, 위 예에서와 같은 "Term"이라는 토큰을 체크하는 경우와 값을 체크하는 경우 등 보다 복잡한 코딩이 이루어진다.
따라서, 종래와 같이 운용자가 수작업으로 텍스트 데이터를 디코딩하는 소스코드를 작성하게 되면 개발 기간이 오래 걸리고, 새로운 기능 추가시 프로그램을 유지보수 하기가 어려우며, 소스코드에 오류가 발생할 가능성이 높은 문제점이 있었다.
상술한 바와 같은 문제점을 해결하기 위한 것으로, 본 발명의 목적은 ABNF로 기술된 텍스트 데이터에 대한 디코딩 기능을 수행하는 소스코드를 운용자가 직접 작성하지 않고 소스코드 생성 프로그램을 통해서 자동으로 소스코드를 생성시킬 수 있도록 하는데 있다.
도 1은 일반적인 네트워크로 연결된 시스템의 구성을 나타낸 도면.
도 2는 종래의 운용자에 의해 생성된 소스코드 예시도.
도 3은 본 발명에 적용되는 링크드 리스트를 나타낸 도면.
도 4는 본 발명의 실시예에 따른 소스코드 생성 방법을 나타낸 순서도.
도 5는 본 발명에 적용되는 링크드 리스트의 사용 예시도.
도 6은 goto 문 레이블 번호 생성 절차를 나타내 순서도.
도 7은 goto 번호와 goto 노드를 나타낸 도면.
도 8은 도 4에 있어 소스코드 생성 과정에서 보통 소스코드 생성 단계를 나타낸 순서도.
도 9는 본 발명이 적용되어 생성된 소스코드 예시도.
도 10은 도 4에 있어 소스코드 생성 과정에서 반복 노드 소스코드 생성 단계를 나타낸 순서도.
도 11은 본 발명이 적용되어 생성된 반복에 대한 소스코드 예시도.
도 12는 본 발명에 적용되는 노드 합성의 예시도.
상술한 바와 같은 목적을 해결하기 위하여, 본 발명의 소스코드 생성 방법은 ABNF 형식으로 정의된 문장들을 처리하는 전처리 과정과; 상기 처리된 문장들에 대해 입력값을 이용하여 링크드 리스트 및 goto 문의 레이블을 생성하는 구문분석 과정과; 상기 생성된 링크드 리스트 및 goto 문의 레이블을 이용해 디코딩될 데이터를 검증하고 해당 검증된 데이터의 길이를 구하는 소스코드 생성 과정을 포함하여 이루어진 것을 특징으로 한다.
이하, 본 발명의 실시예를 첨부한 도면을 참조하여 상세하게 설명하면 다음과 같다.
본 발명의 실시예에 따른 소스코드 생성 방법은 도 1에 도시된 바와 같이 네트워크로 연결된 시스템의 ABNF로 기술된 텍스트 기반 프로토콜을 구현시, 텍스트 데이터를 디코딩하는 소스코드를 자동으로 생성시킨다. 즉, 수신된 데이터가 올바른 데이터인지 검증하고 검증된 데이터의 길이를 구하는 소스코드를 생성시킨다.
먼저, RFC822 2장의 ABNF에 대하여 간단히 설명한다.
첫번째로, 정의(Naming)를 설명한다.
문자나 문자열을 정의한다. 예를 들어
DIGIT = ('0'-'9')
ALPHA = ('A'-'Z') / ('a'-'z')
NAME = DIGIT / ALPHA
이면, 상기 DIGIT는 0 에서 9 사이의 숫자를 나타내고, 상기 ALPHA는 영문자 대문자와 영문자 소문자를 나타내며, 상기 NAME은 상기 DIGIT와 ALPHA를 이용하여 나타낸다. 즉, 상기 NAME은 숫자와 영문자 대문자, 소문자를 나타낸다.
두번째로, 얼터네이티브(ALTERNATIVES)를 설명한다.
'RULE1 / RULE2'로 나타내며, 둘 중 하나의 의미로 '또는'으로 해석되는데, '/' 문자로 둘 사이를 연결하면, 'RULE1' 또는 'RULE2'라는 의미이다. 예를 들면 'red' / 'green' 은 'red' 문자열이나 'green' 문자열을 나타낸다.
세번째로, 반복(REPETITION)을 설명한다.
'*RULE'로 나타내며, 어떤 패턴의 앞에 * 문자가 붙으면 반복을 의미하고, 표현 형식은 '<l>*<m>element'와 같다. 이는 'l'번에서 'm'번 반복 될 수 있다는 의미이다. 예를 들면 '*A' 라면 'A'가 '0'번부터 무한히 반복할 수 있다는 의미이다. 즉, 아무것도 없는 경우나 'A', 'AA', 'AAA' 등이 모두 일치하는 패턴이 된다. 또다른 예로, '1*3(AB)'라면 'AB', 'ABAB', 'ABABAB'가 일치하는 패턴이 된다.
네번째로, [RULE], 즉 'OPTIONAL'과 같은 '*RULE' 이외의 반복되는 패턴은 '*RULE'로서 표현이 가능하다.
이하, 도 3을 참조하여 본 발명에 적용되는 링크드 리스트를 설명한다.
도 3은 본 발명에 적용되는 링크드 리스트를 나타낸 도면이다.
도 3a는 링크드 리스트를 정의한 것으로, 'Node No.'는 노드 번호를 나타내고, 'Characters'는 노드가 가지고 있는 문자들을 나타내고, 'l,m'은 반복을 나타내며 표기가 되어 있지 않으면 반복하지 않음을 나타낸다.
도 3b는 차일드(Child) 패턴을 표현한 것으로, 문자 A 다음에 문자 B가 오는 패턴의 경우 차일드 패턴(→)으로 표현하고, 도 3c는 얼터네이티브(Alternative) 패턴을 표현한 것으로, 문자 A나 문자 B가 올 수 있는 패턴의 경우 얼터네이티브 패턴(-)으로 표현하고, 도 3d는 반복 패턴을 표현한 것으로, 문자 A와 문자 B가 반복되는 패턴의 경우 반복 패턴, 즉 점선으로 된 양쪽 화살표를 이용하여 표현하며, 도 3e는 소스코드 생성시 goto 문에 대한 레이블을 생성하기 위해 사용하는 goto 노드를 표현한 것으로, 점선으로 된 한쪽 화살표를 이용하여 표현한다.
본 발명에서 텍스트 데이터를 디코딩할 때 현재 문맥상 가능한 패턴들과 디코딩할 데이터가 어떤 패턴인지를 알아야 하는데, 이는 규격에 정의되어 있다.
Megacop 프로토콜의 예를 들면, 규격에서 ammsReply는 다음과 같이 정의되어 있다.
ammsReply = (AddToken / MoveToken / ModifyToken / SubtractToken ) EQUAL TerminationID [ LBRKT terminationAudit RBRKT ]
AddToken = "Add"
MoveToken = "Move"
ModifyToken = "Modify"
SubtractToken = "Subtract"
상기 ammsReply를 디코딩하는 소스코드를 생성하려면 수신된 데이터가 "Add"라는 문자열인지 "Move"인지 "Modify"인지 "Subtract"인지를 구분하고 그 길이를 구하는 소스코드를 생성하여야 한다. 이때, 디코딩할 데이터가 "Add"라는 문자열이면 DEF_ADDTOKEN(#define DEF_ADDTOKEN 1 과 같이 정의된 값)라는 값을 리턴하고 "Add"문자열의 길이 3을 구하는 소스코드를 생성한다. 다음에 EQUAL, TerminationID 등도 각각 같은 기능을 갖는 소스코드를 생성시킨다.
이하, 본 발명의 실시예예 따른 소스코드 생성 방법을 설명한다.
도 4는 본 발명의 실시예에 따른 소스코드 생성 방법을 나타낸 순서도이다.
먼저, ABNF 형식으로 정의(Naming)된 문장들을 처리하는 전처리를 수행한다(S401).
다음으로, 상기 처리된 문장들에 대해 입력값을 이용하여 링크드 리스트 및 goto 문의 레이블을 생성하는 구문분석을 수행한다(S402).
그리고, 상기 생성된 링크드 리스트 및 goto 문의 레이블을 이용해 디코딩될 데이터를 검증하고 해당 검증된 데이터의 길이를 구하는 소스코드 생성을 수행한다(S403).
이하, 상기 전처리 과정(S401)을 설명한다.
상기 전처리 과정(S401)은 예를 들어,
DIGIT = '0' / '1'
ALPHA = 'A' / 'a' / 'B' / 'b'
NAME = DIGIT / ALPHA
라고 정의되어 있으면
NAME = ('0' / '1' ) / ('A' / 'a' / 'B' / 'b')
로 바꿔주는 역할을 수행한다.
또한, [RULE], NRULE, #RULE을 *RULE로 변환한다
이하, 도 5를 참조하여 상기 구문분석 과정(S402)을 설명한다.
도 5는 본 발명에 적용되는 링크드 리스트의 사용 예시도이다.
도 5a는 문자열 AB나 문자 C가 올 수 있는 얼터네이티브 패턴을 표현한 것인데, 루트(Root) 노드 다음에 문자 A나 문자 C가 올 수 있으므로, 루트의 차일드를 빈 노드(1번 노드)로, 해당 1번 노드에 얼터네이티브 노드로 2번 노드 A와 4번 노드 C를 연결한다. 그리고, 'A'와 'B'는 연속되므로 2 번 노드의 차일드로 B(3번 노드)를 연결한다. 5번 노드 리턴(RET)은 링크드 리스트의 끝을 가리킨다.
도 5b는 문자 A 다음에 문자 B나 문자 C가 오는 패턴을 표현한 것인데, 즉, AB나 AC인 경우를 표현한 것이다.
도 5c와 도 5d는 *RULE을 링크드 리스트로 표현한 것인데, 반복 노드는 얼터네이티브 노드를 이용하여 표현하고, 반복 시작 노드와 반복이 끝나는 노드는 점선으로 된 양쪽화살표 연결로 표시한다.
다음으로, 상기 소스코드 생성 과정(S403)에서 사용될 goto 문의 레이블(예: yy1:, yy2:)을 생성 절차를 설명한다.
이하, 도 6을 참조하여 상기 goto 문의 레이블을 생성하는 절차를 설명한다.
도 6은 goto 문 레이블 번호 생성 절차를 나타내 순서도이다.
먼저, 노드(Node)=루트로 설정하고, goto 문 레이블 번호(GotoNum)=1로 설정한다(S601).
그리고, 얼터네이티브가 존재하는지를 판단한다(S602).
이때, 상기 판단 결과(S602), 상기 얼터네이티브가 존재하는 경우에, 노드=얼터네이티브(i)로 설정한다(S603).
반면에, 상기 판단 결과(S603), 상기 얼터네이티브가 존재하지 않는 경우에, 차일드가 존재하는지, 반복(*)되는 노드의 마지막 노드인지, 패턴의 마지막 노드(RET)인지를 판단한다(S604).
이때, 상기 판단 결과(S604), 상기 차일드가 존재하거나 반복되는 노드의 마지막 노드이거나 패턴의 마지막 노드인 경우에, 노드. goto 문 레이블 번호=goto 문 레이블 번호로 설정한다(S605).
그리고, 상기 S605 단계이후 또는 상기 판다 결과(S604), 상기 차일드가 존재하지않거나 반복되는 노드의 마지막 노드가 아니거나 패턴의 마지막 노드가 아닌 경우에, 노드=차일드(l)로 설정하고(S606), 상기 얼터네이티브 존재 판단 단계(S602)로 회귀한다.
도 7은 goto 번호와 goto 노드를 나타낸 도면으로, 도 7은 도 5a에 도 6의 goto 문 레이블 번호 생성 절차의 알고리즘과 goto 노드를 적용한 결과이다.
얼터네이티브 노드의 마지막 노드(3번 노드, 4번 노드)는 goto 문을 위한 레이블 번호를 붙이지 않고 goto 노드라는 개념을 사용한다. 해당 goto 노드는 점선으로된 단방향 화살표를 사용하여 상위의 얼터네이티브 노드를 가리키도록 함으로써 소스코드 생성시 해당 노드에 대한 처리가 끝났을 때 분기할 곳을 지정한다.
이하, 도 8을 참조하여 상기 소스코드 생성 과정(S403)에서 보통 소스코드 생성 단계를 설명한다.
도 8은 도 4에 있어 소스코드 생성 과정에서 보통 소스코드 생성 단계를 나타낸 순서도이다.
먼저, 함수의 시작부분을 생성한다(S801).
int dec_func1(char *buf, int *len)
{
int yych;
int yydecode = 0;
그리고, 현재 노드의 goto 레이블과 디코딩한 문자수를 증가시키는 소스코드를 생성한다(S802). 이때, 첫번재 노드인 경우는 디코딩한 문자수를 증가시키는 소스코드를 생성하지 않는다.
yy1: yydecode++;
다음으로, 입력값으로부터 문자 하나를 읽는 소스코드를 생성한다(S803).
yych = *buf++;
그리고, 차일드가 리턴(RET) 노드인지를 판단하여(S803a), 차일드가 리턴 노드가 아닌 경우에, 밑줄이 붙은 레이블을 생성한다(S804). 이때, 밑줄이 붙은 레이블은 *RULE (반복)을 위해 사용한다.
yy1_:
그리고, 스위치(switch) 문을 생성한다(S805).
switch(yych)
이에, 현재 노드의 차일드에 대해서 케이스(case)문을 생성한다(S806). 이때, 상기 차일드가 여러 개면 각각에 대해서 케이스 문을 생성한다. 그리고, 각각의 차일드의 얼터네이티브 노드가 있다면 각각의 노드에 대해서 케이스 문을 생성한다.
여기서, 상기 케이스 문은 다음과 같다.
case 문자: goto 레이블
그리고, 노드가 여러 개의 문자를 포함하고 있다면 각각에 대해서 케이스 문을 생성한다.
예컨대, 한 노드가 'A', 'a', 'B', 'b' 문자를 포함한다면 다음과 같이 케이스 문을 만든다.
case 'A':
case 'a':
case 'B':
case 'b': goto 레이블
여기서, 상기 goto 문의 레이블은 다음과 같이 구한다.
goto 노드가 있으면 goto 노드의 레이블로 설정하고, goto 레이블을 없으면현재의 goto 레이블로 설정한다.
그리고, 디폴트(default) 문을 다음과 같이 생성한다(S807).
default: goto yyErr;
그런 후, 여전히 처리되지 않은 얼터네이티브와 차일드 노드가 존재하는지 판단하여(S809a), 존재하는 경우에 각각의 얼터네이티브와 차일드 노드에 대해서 상기 S802 단계 ~ S809 단계를 수행한다.
반면에, 처리되지 않은 얼터네이티브와 차일드 노드가 존재하지 않는 경우에, 함수를 마무리하는 소스코드를 생성한다(S810).
yyErr:
return VALUE_ERROR;
yyReturn:
*len = yydecode;
return ret;
한편, 상기 판단 결과(S803a), 차일드가 리턴(RET) 노드인 경우에, 다음과 같은 리턴값을 생성하고(S808), 리턴 goto 문을 생성한다(S809).
ret = VALUE_1;
goto yyReturn;
도 9는 본 발명이 적용되어 생성된 소스코드 예시도이다.
이하, 도 10을 참조하여 상기 소스코드 생성 과정(S403)에서 반복 노드 소스코드 생성 단계를 설명한다.
도 10은 도 4에 있어 소스코드 생성 과정에서 반복 노드 소스코드 생성 단계를 나타낸 순서도이다.
먼저, 함수의 시작부분을 생성한다(S101a).
이에, 상기 보통 소스코드 생성 단계를 통해 첫번째 반복 시작 노드와 다른 노드가 있을때 첫번째 반복 시작 노드에 대한 소스코드를 생성한다(S101).
그리고, 상기 보통 소스코드 생성 단계를 통해 반복 중간 노드(들)에 대한 소스코드를 생성한다(S102).
또한, 상기 보통 소스코드 생성 단계를 통해 반복 끝 노드에 대한 소스코드를 생성한다(S103).
마지막으로, 상기 보통 소스코드 생성 단계를 통해 다시 반복 시작 노드이면 두번째 반복 시작 노드에 대한 소스코드를 생성하고(S104), 상기 반복 중간 노드에 대한 소스코드 생성 단계(S102)로 회귀한다.
상기 각각의 단계 S101, S102, S103, S104는 상기 도 8의 단계 S802~단계 S809와 같은 보통 소스코드 생성 단계로 이루어진다.
검사할 패턴이 *(ABCD)일 경우 A문자가 들어가는 곳이 반복 시작노드, B문자가 들어가는 노드와 C문자가 들어가는 노드가 반복 중간 노드, D문자가 들어가는 노드가 반복 끝 노드가 되고 *A인 경우는 A문자가 속한 노드가 반복 시작 노드이자 반복 끝 노드가 되고 반복 중간 노드는 없다.
반복 시작 노드 소스코드 생성 단계(S101,S104)가 두개 필요한 이유는 검사할 패턴이 여러 개 있을 때, 예컨대, *AB와 CD를 구분할 경우 A이면 반복 소스코드생성으로 B이면 보통 소스코드 생성하는 부분으로 분기할 경우에 필요하기 때문이다.
다음으로, 도 11을 참조하여 도 10에 도시된 상기 반복 노드에 대한 소스코드 생성 절차가 상술한 도 8에 도시된 소스코드 생성 절차와 비교하여 추가 혹은 수정되어야 할 사항들을 설명한다. 여기서, 도 11은 본 발명이 적용되어 생성된 반복에 대한 소스코드 예시도이다.
도 10에서 상기 함수의 시작 부분 생성 단계(S101a)는 도 8의 보통 소스코드 생성 단계에서 S801 단계의 함수 선언부에 현재 링크드 리스트에 들어있는 반복 노드의 수를 세어서 개수가 N개라면 count1 ~ countN 까지의 변수를 생성하여 각각의 반복되는 루틴에 대한 횟수를 검사할 수 있도록 한다(도 11 (ㄱ)).
그리고, 도 8의 보통 소스코드 생성 단계에서 S806 단계의 케이스 문에 대한 goto 문에서 해당 차일드 노드가 반복 시작 노드이면, countN = 1로 노드의 반복할 횟수를 초기화하는 소스코드 생성 단계를 추가한다(도 11 (ㄴ)).
그리고, 상기 반복 중간 노드 소스코드 생성 단계(S102)는 도 8의 보통 소스코드 생성 단계에서 S802~S807 단계를 그대로 사용한다.
상기 반복 끝 노드 소스코드 생성 단계(S103)는 두번째 반복 시작 노드 소스코드 생성 단계(S104)로 분기하는 소스코드 생성 단계로 구성된다(도 11 (ㄷ)).
그리고, 상기 두번째 반복 시작 노드 소스코드 생성 단계(S104)는 도 11 (ㄹ)~(ㅇ)과 같은 반복 횟수를 증가시키는 소스코드 생성 단계와 반복 횟수가 초과되었는지를 검사하는 소스코드 생성 단계, 반복이 끝났을 경우 다음 문자를 검사할소스코드로 분기하는 소스코드 생성 단계로 이루어진다.
이하, 도 12를 참조하여 노드 합성에 대하여 설명한다.
도 12는 본 발명에 적용되는 노드 합성의 예시도이다.
검사할 패턴이 두개 이상인 경우에는 각각의 패턴에 대해서 링크드 리스트를 생성한 후 두 노드를 합성한다. 도 12는 노드 합성의 예를 링크드 리스트로 표현한 것이고, 특히 도 12b와 같이 AB 패턴과 AC 패턴의 A문자가 중복되는 경우 두번째 A문자가 포함된 노드(5번 노드)를 삭제하고 C문자가 포함된 6번 노드를 1번노드의 차일드로 연결한다.
또한, 본 발명에 따른 실시예는 상술한 것으로 한정되지 않고, 본 발명과 관련하여 통상의 지식을 가진 자에게 자명한 범위 내에서 여러 가지의 대안, 수정 및 변경하여 실시할 수 있다.
이상과 같이, 본 발명은 ABNF로 기술된 텍스트 데이터에 대한 디코딩 기능을 수행하는 소스코드를 소스코드 생성 프로그램을 통해서 자동으로 소스코드를 생성시킴으로써, 디코딩 루틴 코딩 시간을 절감하여 개발 기간을 단축 할 수 있고, 디코딩 루틴 성능을 향상시킬 수 있고, 소스코드 오류를 최소화할 수 있으며, 새로운 패턴 추가시 유지보수를 용이하게 할 수 있다.

Claims (9)

  1. ABNF 형식으로 정의된 문장들을 처리하는 전처리 과정과;
    상기 처리된 문장들에 대해 입력값을 이용하여 링크드 리스트 및 goto 문의 레이블을 생성하는 구문분석 과정과;
    상기 생성된 링크드 리스트 및 goto 문의 레이블을 이용해 디코딩될 데이터를 검증하고 해당 검증된 데이터의 길이를 구하는 소스코드 생성 과정을 포함하여 이루어진 것을 특징으로 하는 소스코드 생성 방법.
  2. 제 1 항에 있어서,
    상기 구문분석과정에서 goto 문 레이블 생성 단계는,
    노드=루트로 설정하고 goto 문 레이블 번호=1로 설정하는 단계와;
    얼터네이티브가 존재하는지를 판단하여 해당 얼터네이티브가 존재하지 않는 경우에 차일드가 존재하는지, 반복되는 노드의 마지막 노드인지, 패턴의 마지막 노드인지를 판단하는 단계와;
    상기 차일드가 존재하거나 반복되는 노드의 마지막 노드이거나 패턴의 마지막 노드인 경우에 노드. goto 문 레이블 번호=goto 문 레이블 번호로 설정하는 단계와;
    상기 차일드가 존재하지 않거나 반복되는 노드의 마지막 노드가 아니거나 패턴의 마지막 노드가 아닌 경우에 노드=차일드로 설정하고 상기 얼터네이티브 존재 판단 단계로 회귀하는 단계를 포함하여 이루어진 것을 특징으로 하는 소스코드 생성 방법.
  3. 제 2 항에 있어서,
    상기 goto 문 레이블 생성 단계는,
    상기 얼터네이티브가 존재하는 경우에 노드=얼터네이티브로 설정하는 단계를 더 포함하여 이루어진 것을 특징으로 하는 소스코드 생성 방법.
  4. 제 1 항에 있어서,
    상기 소스코드 생성 과정에서 보통 소스코드 생성 단계는,
    함수의 시작부분을 생성하고 현재 노드의 goto 레이블과 디코딩한 문자수를 증가시키는 소스코드를 생성하는 단계와;
    입력값으로부터 상기 문자 하나를 읽는 소스코드를 생성하고 차일드가 리턴 노드인지를 판단하여 리턴 노드가 아닌 경우에 밑줄이 붙은 레이블을 생성하는 단계와;
    스위치 문을 생성하고 상기 현재 노드의 차일드에 대해서 케이스 문을 생성하며 디폴트 문을 생성하는 단계와;
    처리되지 않은 얼터네이티브와 차일드 노드가 존재하는지 판단하여 존재하는 경우에 각각의 얼터네이티브와 차일드 노드에 대해서 상기 goto 레이블과 문자수를 증가시키는 소스코드 생성 단계로 회귀하는 단계와;
    처리되지 않은 얼터네이티브와 차일드 노드가 존재하지 않는 경우에 함수를 마무리하는 소스코드를 생성하는 단계를 포함하여 이루어진 것을 특징으로 하는 소스코드 생성 방법.
  5. 제 4 항에 있어서,
    상기 보통 소스코드 생성 단계는,
    상기 차일드가 리턴 노드인 경우에 리턴값을 생성하고 리턴 goto 문을 생성하는 단계를 더 포함하여 이루어진 것을 특징으로 하는 소스코드 생성 방법.
  6. 제 1 항에 있어서,
    상기 소스코드 생성 과정에서 반복 노드 소스코드 생성 단계는,
    함수의 시작부분을 생성하는 단계와;
    보통 소스코드 생성 단계를 통해 첫번째 반복 시작 노드와 다른 노드가 있을때 첫번째 반복 시작 노드에 대한 소스코드를 생성하는 단계와;
    보통 소스코드 생성 단계를 통해 반복 중간 노드(들)에 대한 소스코드를 생성하는 단계와;
    보통 소스코드 생성 단계를 통해 반복 끝 노드에 대한 소스코드를 생성하는 단계와;
    보통 소스코드 생성 단계를 통해 다시 반복 시작 노드이면 두번째 반복 시작 노드에 대한 소스코드를 생성하고 상기 반복 중간 노드에 대한 소스코드 생성 단계로 회귀하는 단계를 포함하여 이루어진 것을 특징으로 하는 소스코드 생성 방법.
  7. 제 6 항에 있어서,
    상기 반복 노드 소스코드 생성 단계는,
    상기 보통 소스코드 생성 단계에서 함수 시작 부분 생성 단계의 함수 선언부에 현재 링크드 리스트에 들어있는 반복 노드의 수를 세어서 개수가 N개라면 count1 ~ countN 까지의 변수를 생성하여 각각의 반복되는 루틴에 대한 횟수를 검사하는 소스코드 생성 단계와;
    상기 보통 소스코드 생성 단계에서 케이스 문 생성 단계의 케이스 문에 대한 goto 문에서 해당 차일드 노드가 반복 시작 노드이면 countN = 1로 노드의 반복할 횟수를 초기화하는 소스코드 생성 단계를 더 포함하여 이루어진 것을 특징으로 하는 소스코드 생성 방법.
  8. 제 6 항에 있어서,
    상기 반복 끝 노드 소스코드 생성 단계는,
    상기 두번째 반복 시작 노드 소스코드 생성 단계로 분기하는 소스코드 생성 단계를 포함하여 이루어진 것을 특징으로 하는 소스코드 생성 방법.
  9. 제 6 항에 있어서,
    상기 두번째 반복 시작 노드 소스코드 생성 단계는,
    반복 횟수를 증가시키는 소스코드 생성 단계와;
    반복 횟수가 초과되었는지를 검사하는 소스코드 생성 단계와;
    반복이 끝났을 경우 다음 문자를 검사할 소스코드로 분기하는 소스코드 성 단계를 포함하여 이루어진 것을 특징으로 하는 소스코드 생성 방법.
KR1020020073170A 2002-11-22 2002-11-22 소스코드 생성 방법 KR20040045143A (ko)

Priority Applications (1)

Application Number Priority Date Filing Date Title
KR1020020073170A KR20040045143A (ko) 2002-11-22 2002-11-22 소스코드 생성 방법

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
KR1020020073170A KR20040045143A (ko) 2002-11-22 2002-11-22 소스코드 생성 방법

Publications (1)

Publication Number Publication Date
KR20040045143A true KR20040045143A (ko) 2004-06-01

Family

ID=37341177

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020020073170A KR20040045143A (ko) 2002-11-22 2002-11-22 소스코드 생성 방법

Country Status (1)

Country Link
KR (1) KR20040045143A (ko)

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR100908889B1 (ko) * 2009-03-03 2009-07-23 (주) 바인젠 네트워크 상의 텍스트 메시지를 처리하는 소스 코드 생성 방법 및 그 장치
KR20180115921A (ko) * 2017-04-14 2018-10-24 박태영 프로그래밍 언어간 변환 방법

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR100908889B1 (ko) * 2009-03-03 2009-07-23 (주) 바인젠 네트워크 상의 텍스트 메시지를 처리하는 소스 코드 생성 방법 및 그 장치
KR20180115921A (ko) * 2017-04-14 2018-10-24 박태영 프로그래밍 언어간 변환 방법

Similar Documents

Publication Publication Date Title
CN108388425B (zh) 一种基于lstm自动补全代码的方法
JP3368883B2 (ja) データ圧縮装置、データベースシステム、データ通信システム、データ圧縮方法、記憶媒体及びプログラム伝送装置
Parr et al. ANTLR: A predicated‐LL (k) parser generator
Maxted et al. Error recovery for variable length codes
Ladkin et al. Interpreting message flow graphs
CN109739494B (zh) 一种基于Tree-LSTM的API使用代码生成式推荐方法
TWI262439B (en) Strategy for dynamically modeling ASN.1 data to an object model
CN113778449B (zh) 航空电子接口数据适配转换系统
CN109460231A (zh) 基于xml的上位机软件实现方法
US7409619B2 (en) System and methods for authoring domain specific rule-driven data generators
Nygaard et al. Domain theory for concurrency
Mernik et al. LISA: A tool for automatic language implementation
US20080141230A1 (en) Scope-Constrained Specification Of Features In A Programming Language
KR20040045143A (ko) 소스코드 생성 방법
JP2879099B1 (ja) 抽象構文木処理方法、抽象構文木処理プログラムを記録したコンピュータ読み取り可能な記録媒体、抽象構文木データを記録したコンピュータ読み取り可能な記録媒体、及び、抽象構文木処理装置
Palm et al. Syntactic translation of message payloads between at least partially equivalent encodings
Armstrong Getting Erlang to talk to the outside world
CN115599394A (zh) 序列化和反序列化方法、装置、计算机设备及存储介质
Paakki Prolog in practical compiler writing
League et al. Schema-Based Compression of XML Data with Relax NG.
TW305091B (ko)
Fung et al. Maximum-likelihood syntactic decoding
JPH02224132A (ja) メッセージパーサの自動発生システム
Ionescu et al. P systems with symport/antiport rules: The traces of objects
Szabó et al. TITAN, TTCN-3 test execution environment

Legal Events

Date Code Title Description
N231 Notification of change of applicant
WITN Withdrawal due to no request for examination