KR101118819B1 - 심볼과 수식을 지원하는 컴파일러를 기록한 기록 매체 - Google Patents

심볼과 수식을 지원하는 컴파일러를 기록한 기록 매체 Download PDF

Info

Publication number
KR101118819B1
KR101118819B1 KR1020100011671A KR20100011671A KR101118819B1 KR 101118819 B1 KR101118819 B1 KR 101118819B1 KR 1020100011671 A KR1020100011671 A KR 1020100011671A KR 20100011671 A KR20100011671 A KR 20100011671A KR 101118819 B1 KR101118819 B1 KR 101118819B1
Authority
KR
South Korea
Prior art keywords
code
symbol
formula
compiler
converted
Prior art date
Application number
KR1020100011671A
Other languages
English (en)
Other versions
KR20110092161A (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 KR1020100011671A priority Critical patent/KR101118819B1/ko
Publication of KR20110092161A publication Critical patent/KR20110092161A/ko
Application granted granted Critical
Publication of KR101118819B1 publication Critical patent/KR101118819B1/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/42Syntactic analysis
    • G06F8/427Parsing
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F17/00Digital computing or data processing equipment or methods, specially adapted for specific functions
    • G06F17/10Complex mathematical operations
    • G06F17/11Complex mathematical operations for solving equations, e.g. nonlinear equations, general mathematical optimization problems
    • G06F17/13Differential equations
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F17/00Digital computing or data processing equipment or methods, specially adapted for specific functions
    • G06F17/10Complex mathematical operations
    • G06F17/16Matrix or vector computation, e.g. matrix-matrix or matrix-vector multiplication, matrix factorization
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/44Encoding
    • G06F8/447Target code generation

Landscapes

  • Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Theoretical Computer Science (AREA)
  • Mathematical Physics (AREA)
  • General Engineering & Computer Science (AREA)
  • Pure & Applied Mathematics (AREA)
  • Mathematical Optimization (AREA)
  • Mathematical Analysis (AREA)
  • Computational Mathematics (AREA)
  • Data Mining & Analysis (AREA)
  • Software Systems (AREA)
  • Algebra (AREA)
  • Databases & Information Systems (AREA)
  • Computing Systems (AREA)
  • Operations Research (AREA)
  • Devices For Executing Special Programs (AREA)

Abstract

본 발명의 일 실시예에 따른 심볼과 수식을 지원하는 컴파일러를 기록한 기록 매체는 수식 입력기를 통해 프로그래머에 의해 작성된 수식을 소스 코드로서 입력 받는 입력부; 상기 입력된 수식을 파싱(parsing)하여 연산자, 변수 및 상수 중 적어도 하나의 토큰(token)으로 분류하고, 상기 분류된 토큰을 일련의 토큰열(token-sequence)로 전환하는 분석부; 및 상기 전환된 토큰열을 미리 설정된 수식 포맷의 집합에서 검색하고, 상기 토큰열과 매칭되는 수식 포맷이 상기 수식 포맷의 집합에서 검색되는 경우, 상기 토큰열을 상기 수식에 대응하는 목적 코드로 변환하는 변환부를 포함한다.

Description

심볼과 수식을 지원하는 컴파일러를 기록한 기록 매체 {RECORDING MEDIUM FOR RECORDING COMPILER SUPPORTING SYMBOL AND MATHEMATICAL EXPRESSION}
본 발명의 실시예들은 컴파일러에 관한 것으로, 더욱 상세하게는 심볼과 수식을 지원하는 컴파일러에 관한 것이다.
고급 언어로 쓰여진 프로그램이 컴퓨터에서 수행되기 위해서는 컴퓨터가 직접 이해할 수 있는 언어, 즉 컴퓨터 언어로 바꾸어 주어야 한다. 컴파일러는 소스 코드(source code)를 기계어(machine langage)로 변환시켜 목적 코드(object code)로 번역해주는 특수한 프로그램이다. 목적 코드는 프로세서가 한 번에 한 명령씩 처리하거나 또는 실행시킬 수 있는 기계 코드이다.
컴파일러는 실행 시에 모든 문장을 먼저 구문적으로 하나씩 분해하고, 어떤 문장이 다른 문장을 참조하는 경우 그 문장이 정확하게 참조될 수 있도록 여러 번의 연속적인 상태에서 결과 코드를 만든다.
그런데, 종래의 컴파일러는 문자 등의 소스 코드는 지원하는 반면, 심볼이나 수식 등의 소스 코드는 제대로 지원하지 않는다. 따라서, 종래의 컴파일러를 사용할 경우, 프로그래머는 코딩에 많은 어려움을 느낄 뿐만 아니라 추후에 코딩된 내용을 이해하기도 어려운 문제점 등이 있다.
본 발명의 일 실시예는 심볼 및 수식 그대로를 소스 코드로 입력 받아 컴퓨터 언어에 맞는 목적 코드로 변환함으로써, 심볼 및 수식에 대한 컴파일을 지원할 수 있는, 심볼 및 수식을 지원하는 컴파일러를 기록한 기록 매체를 제공한다.
본 발명이 일 실시예는 수식 및 심볼의 소스 코딩이 용이하고, 추후 소스 코드 확인 시 쉽게 이해할 수 있어 제작된 코드의 재사용성을 증대시킬 수 있으며, 쉬운 디버깅이 가능하게 하는, 심볼 및 수식을 지원하는 컴파일러를 기록한 기록 매체를 제공한다.
본 발명이 해결하고자 하는 과제는 이상에서 언급한 과제(들)로 제한되지 않으며, 언급되지 않은 또 다른 과제(들)은 아래의 기재로부터 당업자에게 명확하게 이해될 수 있을 것이다.
본 발명의 일 실시예에 따른 심볼과 수식을 지원하는 컴파일러를 기록한 기록 매체는 수식 입력기를 통해 프로그래머에 의해 작성된 수식을 소스 코드로서 입력 받는 입력부; 상기 입력된 수식을 파싱(parsing)하여 연산자, 변수 및 상수 중 적어도 하나의 토큰(token)으로 분류하고, 상기 분류된 토큰을 일련의 토큰열(token-sequence)로 전환하는 분석부; 및 상기 전환된 토큰열을 미리 설정된 수식 포맷의 집합에서 검색하고, 상기 토큰열과 매칭되는 수식 포맷이 상기 수식 포맷의 집합에서 검색되는 경우, 상기 토큰열을 상기 수식에 대응하는 목적 코드로 변환하는 변환부를 포함한다.
기타 실시예들의 구체적인 사항들은 상세한 설명 및 첨부 도면들에 포함되어 있다.
본 발명의 이점 및/또는 특징, 그리고 그것들을 달성하는 방법은 첨부되는 도면과 함께 상세하게 후술되어 있는 실시예들을 참조하면 명확해질 것이다. 그러나, 본 발명은 이하에서 개시되는 실시예들에 한정되는 것이 아니라 서로 다른 다양한 형태로 구현될 것이며, 단지 본 실시예들은 본 발명의 개시가 완전하도록 하며, 본 발명이 속하는 기술분야에서 통상의 지식을 가진 자에게 발명의 범주를 완전하게 알려주기 위해 제공되는 것이며, 본 발명은 청구항의 범주에 의해 정의될 뿐이다. 명세서 전체에 걸쳐 동일 참조 부호는 동일 구성요소를 지칭한다.
본 발명의 일 실시예에 따르면, 심볼 및 수식 그대로를 소스 코드로 입력 받아 컴퓨터 언어에 맞는 목적 코드로 변환함으로써, 심볼 및 수식에 대한 컴파일을 지원할 수 있다.
본 발명이 일 실시예에 따르면, 수식 및 심볼의 소스 코딩이 용이하고, 추후 소스 코드 확인 시 쉽게 이해할 수 있어 제작된 코드의 재사용성을 증대시킬 수 있으며, 쉬운 디버깅이 가능하게 한다.
도 1은 본 발명의 일 실시예에 따른 심볼과 수식을 지원하는 컴파일러를 설명하기 위해 도시한 블록도이다.
도 2는 본 발명의 일 실시예에 따른 심볼과 수식을 지원하는 컴파일러의 동작 방법을 설명하기 위해 도시한 흐름도이다.
본 발명의 일 실시예들은 복잡한 수식 등이 들어가는 프로그램을 작성할 때, 프로그래머와 컴퓨터 코드 사이의 괴리감을 극복할 수 있는, 심볼과 수식을 지원하는 컴파일러에 관한 것이다. 상기 컴파일러는 컴퓨터에서 판독 가능한 기록 매체에 기록되어 사용될 수 있다.
시스템의 제어를 위한 프로그램을 제작할 때는 일반적으로 시스템의 모델링을 한 후, 제어기를 구성하고, 이를 프로그램으로 변형한다. 이때 복잡한 시스템의 경우 제어기는 다양한 심볼릭(Symbolic) 문자들로 구성되지만, 프로그램을 제작할 경우 이런 문자들을 컴파일러가 인식하는 문자로 바꾸어야 한다.
이런 괴리감을 극복하기 위하여, 본 발명의 일 실시예에서는 프로그래머가 수식 등이 들어가는 코드를 작성할 때, 심볼릭한 문자를 그대로 사용할 수 있도록 하고, 컴파일러가 이러한 심볼릭한 문자를 실시간으로 변경하여 프로그래머와 컴퓨터 코드 사이의 괴리감을 없앨 수 있도록 한다.
따라서, 본 발명의 일 실시예에 따르면, 프로그래머는 모델링한 제어기를 컴퓨터 코딩으로 쉽게 변경할 수 있으며, 제작된 코드의 재사용성을 증대시키고 쉬운 디버깅을 할 수 있게 된다.
이하에서는 첨부된 도면을 참조하여 본 발명의 실시예들을 상세히 설명하기로 한다.
도 1은 본 발명의 일 실시예에 따른 심볼과 수식을 지원하는 컴파일러를 설명하기 위해 도시한 블록도이다.
도 1을 참조하면, 본 발명의 일 실시예에 따른 심볼과 수식을 지원하는 컴파일러(100)는 입력부(110), 분석부(120), 변환부(130), 검사부(140), 설정부(150), 및 제어부(160)를 포함할 수 있다.
상기 입력부(110)는 수식 입력기를 통해 프로그래머에 의해 작성된 수식을 소스 코드로서 입력 받는다. 예를 들어, 상기 입력부(110)는 워드 프로세서(word processor) 등에서 사용되는 수식 입력기와 동일한 형태로 구성될 수 있으며, 상기 프로그래머는 상기 수식 입력기를 통해 수식을 소스 코드로서 입력할 수 있다.
상기 분석부(120)는 상기 입력된 수식을 파싱(parsing)하여 연산자, 변수 및 상수 중 적어도 하나의 토큰(token)으로 분류하고, 상기 분류된 토큰을 일련의 토큰열(token-sequence)로 전환한다.
C언어의 예를 들면,
Figure 112010008504079-pat00001
와 같은 수식의 경우, 상기 분석부(120)는 상기 수식을 파싱하여 k, =,
Figure 112010008504079-pat00002
, a, t2, dt 등의 토큰으로 분류한 후 v=
Figure 112010008504079-pat00003
v dt 와 같은 토큰열로 전환한다. 이때, 상기 분석부(120)는 연산자의 경우에는 해당 연산자를 전환하지 않고, 변수나 상수 등의 경우에만 해당 기호로 전환한다(변수 = v, 상수 = c).
상기 변환부(130)는 상기 전환된 토큰열을 미리 설정된 수식 포맷의 집합에서 검색하고, 상기 토큰열과 매칭되는 수식 포맷이 상기 수식 포맷의 집합에서 검색되는 경우, 상기 토큰열을 상기 수식에 대응하는 목적 코드로 변환한다.
즉, 상기 변환부(130)는 상기 수식 포맷 집합에서 검색된 수식 포맷을 이용하여 상기 수식에 대응하는 목적 코드를 생성할 수 있다.
일례로, 위와 같은 토큰열 v=
Figure 112010008504079-pat00004
v dt 의 경우, 상기 변환부(130)는 수식 포맷 집합에서 상기 토큰열과 같은 적분 수식 포맷을 검색하고, 상기 토큰열이 검색되는 경우 상기 토큰열을 해당 적분 수식 포맷에 대응하는 목적 코드인 k=k+a*t*t*dt 로 변환할 수 있다. 즉, 상기 변환부(130)는
Figure 112010008504079-pat00005
을 k=k+a*t*t*dt 와 같은 목적 코드로 변환할 수 있다.
상기 변환부(130)는 상기 변환 과정에 있어서, 상기 수식에 포함된 연산자의 종류에 따라서 다양한 변형이 가능하다. 아래에서는 상기 변환부(130)에 의한 다양한 변형의 예들에 대해 살펴 보기로 한다.
상기 변환부(130)는 상기 수식이 미분인 경우, 이전 미분값에 관한 정보를 저장하고, 상기 저장된 정보를 이용하여 상기 토큰열을 상기 미분과 관련한 목적 코드로 변환할 수 있다.
예를 들면,
Figure 112010008504079-pat00006
와 같은 미분 수식의 경우, 상기 변환부(130)는 상기 미분 수식을 {static double prev_x=0; x_dot=(x-prev_x)/dt; k=x_dot+x;prev_x=x;} 와 같은 목적 코드로 변환할 수 있다. 여기서, prev_x 는 이전 미분값을 나타낸다.
또한, 상기 변환부(130)는 상기 수식이 구간이 주어진 미적분(미분 또는 적분)인 경우, 미리 제작된 수치해석 솔버(solver)를 이용하여 상기 수식을 상기 구간이 주어진 미적분과 관련한 목적 코드로 변환할 수 있다.
예를 들면,
Figure 112010008504079-pat00007
와 같이 구간이 주어진 적분 수식의 경우, 상기 변환부(130)는 상기 수치해석 솔버를 이용하여 상기 수식을 풀 수 있도록 구성함으로써, 상기 수식에 대한 해답을 도출하여 상기 해답을 이용하여 상기 적분 수식을 상기 목적 코드로 변환할 수 있다.
또한, 상기 변환부(130)는 상기 수식이 행렬인 경우, 상기 프로그래머에 의해 미리 설정된 행렬 크기를 이용하여 상기 토큰열을 상기 행렬과 관련한 목적 코드로 변환할 수 있다.
예를 들면,
Figure 112010008504079-pat00008
와 같은 행렬 수식의 경우, 상기 변환부(130)는 변수 x에 대한 크기, 즉 행렬 크기를 미리 설정하도록 프로그래머에게 요구하고, 상기 프로그래머에 의해 상기 행렬 크기가 설정되면 상기 행렬 크기를 이용하여 상기 행렬 수식을 상기 목적 코드로 변환할 수 있다. 이때, 상기 변수 x를 읽을 수 있는 심벌로는 xij, x(i,j), x[i,j] 등 사용자(프로그래머)의 편의에 따라 다양하게 구성될 수 있도록 한다.
또한, 행렬의 덧셈과 뺄셈 등과 같은 수식의 경우, 상기 변환부(130)는 적절한 반복문을 통하여 연산을 수행하는 목적 코드로서 상기 수식을 변환할 수 있다.
예를 들어, 상기 변환부(130)는
Figure 112010008504079-pat00009
와 같은 행렬 연산 수식의 경우, x={{1,2},{3,4}};y={{1,2},{3,4}};for(i=0;i<2;i++) for(j=0;j<2;j++) z[i][j]=x[i][j]+y[i][j]; 와 같은 목적 코드로 변환할 수 있다(for 반복문 이용).
또한, 상기 변환부(130)는 상기 수식이 시그마인 경우, 적절한 반복문(for, while 등)을 이용하여 상기 토큰열을 상기 시그마와 관련한 목적 코드로 변환할 수 있다.
예컨대,
Figure 112010008504079-pat00010
와 같은 시그마 수식의 경우, 상기 변환부(130)는 for 반복문을 이용하여 상기 시그마 수식을 {k=0; for(i=0;i<5;i++) for(j=0;j<;j++) k=k+x[i][j]; 와 같은 목적 코드로 변환할 수 있다.
한편, 상기 변환부(130)는 상기 수식에 심볼이 포함된 경우, 상기 심볼을 해당 문자열로 이루어진 제1 목적 코드로 변환할 수 있다. 예를 들면, 상기 수식에
Figure 112010008504079-pat00011
와 같은 심볼이 포함된 경우, 상기 변환부(130)는 zeta 와 같은 목적 코드로 상기 수식을 변환할 수 있다.
이때, 상기 변환부(130)는 상기 심벌에 상기 심볼을 꾸며주는 부호가 포함된 경우, 상기 부호(꾸밈 부호)를 상기 꾸밈 부호에 해당하는 문자열로 이루어진 제2 목적 코드로 변환한 후 상기 제1 목적 코드와 결합할 수 있다.
이를 테면,
Figure 112010008504079-pat00012
등과 같은 꾸밈 부호를 포함하는 심볼의 경우, 상기 변환부(130)는 상기 심벌을 각각 x_hat(x: 제1 목적 코드, hat: 제2 목적 코드), x_tilda(x: 제1 목적 코드, tilda: 제2 목적 코드) 등의 목적 코드(제1 목적 코드 + 제2 목적 코드)로 변환할 수 있다.
또한, 상기 변환부(130)는 상기 심벌에 번호가 포함된 경우, 상기 심벌을 상기 심벌에 해당하는 상수 또는 배열로 이루어진 목적 코드로 변환할 수 있다.
일례로, 상기 변환부(130)는 x0 와 같은 심벌(번호 포함)의 경우 상기 심벌을 상수로 이루어진 목적 코드로 변환하고, x22 와 같은 심벌의 경우 상기 심벌을 2*2 크기의 행렬로 이루어진 목적 코드로 변환할 수 있다.
상기 검사부(140)는 컴파일러에 의해 제작된 수식(목적 코드)의 타당성을 검사한다. 상기 검사부(140)는 수식의 종류에 따라 다양한 방법으로 타당성을 검사할 수 있다.
예를 들면, 상기 검사부(140)는 배열을 사용하는 목적 코드의 경우, 미리 선언된 변수의 크기와 상기 수식에서 억세스하는 배열의 범위를 비교하여 상기 목적 코드의 타당성을 검사할 수 있다. 또한, 상기 검사부(140)는 중복된 심볼을 사용하는 목적 코드의 경우, 상기 중복된 심벌이 동일한 심벌인지를 확인하여 상기 목적 코드의 타당성을 검사할 수 있다. 뿐만 아니라, 상기 검사부(140)는 미적분을 사용하는 목적 코드의 경우, 미적분 수행 시간(dt)이 미리 설정되어 있는지를 확인하여 상기 목적 코드의 타당성을 검사할 수 있다.
상기 설정부(150)는 상기 목적 코드가 미리 선언되어 있는 변수나 함수명과 충돌하는 것을 회피할 수 있도록, 상기 목적 코드가 상기 변수나 상기 함수명과 동일할 경우 상기 목적 코드를 다른 코드로 변경하는 규약을 설정할 수 있다.
이때, 상기 규약은 프로그래머에 의해 미리 정해질 수 있다. 상기 프로그래머는 자동 코드 변환 기능(수식을 목적 코드로 변환하는 기능)을 사용하여
Figure 112010008504079-pat00013
이 자동으로 변환될 때, _changed_x_hat 등으로 변환되어 기존의 x_hat 이 다른 함수에서 사용될 때 충돌을 회피할 수 있도록 미리 규약을 정할 수 있다.
또한, 상기 설정부(150)는 상기 규약 외에도 프로그래머에 의해 설정되는 다양한 값들, 예를 들면 미적분 수행 시간(dt), 행렬 크기 등을 입력 받아 해당 설정 과정을 수행할 수 있다.
상기 제어부(160)는 본 발명의 일 실시예에 따른 심볼과 수식을 지원하는 컴파일러(100), 즉 상기 입력부(110), 상기 분석부(120), 상기 변환부(130), 상기 검사부(140), 및 상기 설정부(150) 등의 동작을 전반적으로 제어한다.
도 2는 본 발명의 일 실시예에 따른 심볼과 수식을 지원하는 컴파일러의 동작 방법을 설명하기 위해 도시한 흐름도이다.
도 2를 참조하면, 단계(210)에서 상기 컴파일러는 수식 입력기를 통해 프로그래머에 의해 작성된 수식을 소스 코드로서 입력 받는다. 예를 들어, 상기 컴파일러는 워드 프로세서 등에서 사용되는 수식 입력기와 동일한 형태로 구성될 수 있으며, 상기 프로그래머는 상기 수식 입력기를 통해 수식을 소스 코드로서 입력할 수 있다.
다음으로, 단계(220)에서 상기 컴파일러는 상기 입력된 수식을 파싱하여 연산자, 변수 및 상수 중 적어도 하나의 토큰으로 분류한다.
다음으로, 단계(230)에서 상기 컴파일러는 상기 분류된 토큰을 일련의 토큰열로 전환한다.
다음으로, 단계(240)에서 상기 컴파일러는 상기 전환된 토큰열을 미리 설정된 수식 포맷의 집합에서 검색한다.
다음으로, 상기 토큰열과 매칭되는 수식 포맷이 상기 수식 포맷의 집합에서 검색되는 경우(250의 "예" 방향), 단계(260)에서 상기 컴파일러는 상기 토큰열을 상기 수식에 대응하는 목적 코드로 변환한다.
반면, 상기 토큰열과 매칭되는 수식 포맷이 상기 수식 포맷의 집합에서 검색되지 않은 경우(250의 "아니오" 방향), 단계(255)에서 상기 컴파일러는 에러 메시지를 출력하고 본 발명의 일 실시예를 종료한다.
상기 변환 과정에 있어서, 상기 컴파일러는 상기 수식에 포함된 연산자의 종류에 따라서 다양한 변형이 가능하다. 아래에서는 상기 다양한 변형 예들에 대해 살펴 보기로 한다.
상기 컴파일러는 상기 수식이 미분인 경우, 이전 미분값에 관한 정보를 저장하고, 상기 저장된 정보를 이용하여 상기 토큰열을 상기 미분과 관련한 목적 코드로 변환할 수 있다.
또한, 상기 컴파일러는 상기 수식이 구간이 주어진 미적분(미분 또는 적분)인 경우, 미리 제작된 수치해석 솔버를 이용하여 상기 수식을 상기 구간이 주어진 미적분과 관련한 목적 코드로 변환할 수 있다.
또한, 상기 컴파일러는 상기 수식이 행렬인 경우, 상기 프로그래머에 의해 미리 설정된 행렬 크기를 이용하여 상기 토큰열을 상기 행렬과 관련한 목적 코드로 변환할 수 있다.
또한, 상기 컴파일러는 행렬의 덧셈과 뺄셈 등과 같은 수식의 경우, 적절한 반복문을 통하여 연산을 수행하는 목적 코드로서 상기 수식을 변환할 수 있다.
또한, 상기 컴파일러는 상기 수식이 시그마인 경우, 적절한 반복문(for, while 등)을 이용하여 상기 토큰열을 상기 시그마와 관련한 목적 코드로 변환할 수 있다.
한편, 상기 컴파일러는 상기 수식에 심볼이 포함된 경우, 상기 심볼을 해당 문자열로 이루어진 제1 목적 코드로 변환할 수 있다. 이때, 상기 컴파일러는 상기 심벌에 상기 심볼을 꾸며주는 부호가 포함된 경우, 상기 부호(꾸밈 부호)를 상기 꾸밈 부호에 해당하는 문자열로 이루어진 제2 목적 코드로 변환한 후 상기 제1 목적 코드와 결합할 수 있다.
또한, 상기 컴파일러는 상기 심벌에 번호가 포함된 경우, 상기 심벌을 상기 심벌에 해당하는 상수 또는 배열로 이루어진 목적 코드로 변환할 수 있다.
상기와 같은 코드 변환 과정이 끝나면, 상기 컴파일러는 단계(270)에서 상기 변환된 목적 코드의 타당성을 검사한다. 이때, 상기 컴파일러는 수식의 종류에 따라 다양한 방법으로 타당성을 검사할 수 있다.
예를 들면, 상기 컴파일러는 배열을 사용하는 목적 코드의 경우, 미리 선언된 변수의 크기와 상기 수식에서 억세스하는 배열의 범위를 비교하여 상기 목적 코드의 타당성을 검사할 수 있다.
또한, 상기 컴파일러는 중복된 심볼을 사용하는 목적 코드의 경우, 상기 중복된 심벌이 동일한 심벌인지를 확인하여 상기 목적 코드의 타당성을 검사할 수 있다.
뿐만 아니라, 상기 컴파일러는 미적분을 사용하는 목적 코드의 경우, 미적분 수행 시간(dt)이 미리 설정되어 있는지를 확인하여 상기 목적 코드의 타당성을 검사할 수 있다.
한편, 상기 컴파일러는 상기 목적 코드가 미리 선언되어 있는 변수나 함수명과 충돌하는 것을 회피할 수 있도록, 상기 목적 코드가 상기 변수나 상기 함수명과 동일할 경우 상기 목적 코드를 다른 값으로 변경하는 규약을 설정할 수 있다. 이때, 상기 규약은 프로그래머에 의해 미리 정해질 수 있다.
이와 같은 본 발명의 일 실시예에 따르면, 수식 및 심볼 그대로를 소스 코드로 입력 받아 컴퓨터 언어에 맞는 목적 코드로 변환함으로써, 수식 및 심볼에 대한 컴파일을 지원할 수 있다. 따라서, 본 발명이 일 실시예에 따르면, 수식 및 심볼의 소스 코딩이 용이하고, 추후 소스 코드 확인 시 쉽게 이해할 수 있어 제작된 코드의 재사용성을 증대시킬 수 있으며, 쉬운 디버깅이 가능하게 한다.
본 발명의 실시예들은 다양한 컴퓨터로 구현되는 동작을 수행하기 위한 프로그램 명령을 포함하는 컴퓨터 판독 가능 매체를 포함한다. 상기 컴퓨터 판독 가능 매체는 프로그램 명령, 로컬 데이터 파일, 로컬 데이터 구조 등을 단독으로 또는 조합하여 포함할 수 있다. 상기 매체는 본 발명을 위하여 특별히 설계되고 구성된 것들이거나 컴퓨터 소프트웨어 당업자에게 공지되어 사용 가능한 것일 수도 있다. 컴퓨터 판독 가능 기록 매체의 예에는 하드 디스크, 플로피 디스크 및 자기 테이프와 같은 자기 매체, CD-ROM, DVD와 같은 광기록 매체, 플롭티컬 디스크와 같은 자기-광 매체, 및 롬, 램, 플래시 메모리 등과 같은 프로그램 명령을 저장하고 수행하도록 특별히 구성된 하드웨어 장치가 포함된다. 프로그램 명령의 예에는 컴파일러에 의해 만들어지는 것과 같은 기계어 코드뿐만 아니라 인터프리터 등을 사용해서 컴퓨터에 의해서 실행될 수 있는 고급 언어 코드를 포함한다.
지금까지 본 발명에 따른 구체적인 실시예에 관하여 설명하였으나, 본 발명의 범위에서 벗어나지 않는 한도 내에서는 여러 가지 변형이 가능함은 물론이다. 그러므로, 본 발명의 범위는 설명된 실시예에 국한되어 정해져서는 안 되며, 후술하는 특허 청구의 범위뿐 아니라 이 특허 청구의 범위와 균등한 것들에 의해 정해져야 한다.
이상과 같이 본 발명은 비록 한정된 실시예와 도면에 의해 설명되었으나, 본 발명은 상기의 실시예에 한정되는 것은 아니며, 이는 본 발명이 속하는 분야에서 통상의 지식을 가진 자라면 이러한 기재로부터 다양한 수정 및 변형이 가능하다. 따라서, 본 발명 사상은 아래에 기재된 특허청구범위에 의해서만 파악되어야 하고, 이의 균등 또는 등가적 변형 모두는 본 발명 사상의 범주에 속한다고 할 것이다.
110: 입력부
120: 분석부
130: 변환부
140: 검사부
150: 설정부
160: 제어부

Claims (10)

  1. 수식 입력기를 통해 프로그래머에 의해 작성된 수식을 소스 코드로서 입력 받는 입력부;
    상기 입력된 수식을 파싱(parsing)하여 연산자, 변수 및 상수 중 적어도 하나의 토큰(token)으로 분류하고, 상기 분류된 토큰을 일련의 토큰열(token-sequence)로 전환하는 분석부; 및
    상기 전환된 토큰열을 미리 설정된 수식 포맷의 집합에서 검색하고, 상기 토큰열과 매칭되는 수식 포맷이 상기 수식 포맷의 집합에서 검색되는 경우, 상기 토큰열을 상기 수식에 대응하는 코드로 변환하되, 상기 수식이 미분인 경우, 이전 미분값에 관한 정보를 저장하고, 상기 저장된 정보를 이용하여 상기 토큰열을 상기 미분과 관련한 코드로 변환하는 것을 특징으로 하는 심볼과 수식을 지원하는 컴파일러를 기록한 기록 매체.
  2. 삭제
  3. 제1항에 있어서,
    상기 변환부는
    상기 수식이 미적분인 경우, 상기 프로그래머에 의해 미리 설정된 미적분 수행 시간(dt)을 이용하여 상기 토큰열을 상기 미적분과 관련한 코드로 변환하는 것을 특징으로 하는 심볼과 수식을 지원하는 컴파일러를 기록한 기록 매체.
  4. 제1항에 있어서,
    상기 변환부는
    상기 수식이 구간이 주어진 미적분인 경우, 미리 제작된 수치해석 솔버(solver)를 이용하여 상기 구간이 주어진 미적분의 해답을 도출하고, 상기 도출된 해답을 이용하여 상기 토큰열을 상기 미적분과 관련한 코드로 변환하는 것을 특징으로 하는 심볼과 수식을 지원하는 컴파일러를 기록한 기록 매체.
  5. 제1항에 있어서,
    상기 변환부는
    상기 수식이 행렬인 경우, 상기 프로그래머에 의해 미리 설정된 행렬 크기를 이용하여 상기 토큰열을 상기 행렬과 관련한 코드로 변환하는 것을 특징으로 하는 심볼과 수식을 지원하는 컴파일러를 기록한 기록 매체.
  6. 제1항에 있어서,
    상기 변환부는
    상기 수식이 시그마 또는 행렬 연산인 경우, 반복문을 이용하여 상기 토큰열을 상기 시그마와 관련한 코드로 변환하는 것을 특징으로 하는 심볼과 수식을 지원하는 컴파일러를 기록한 기록 매체.
  7. 제1항에 있어서,
    상기 변환부는
    상기 수식에 심볼이 포함된 경우, 상기 심볼을 해당 문자열로 이루어진 제1 코드로 변환하되, 상기 심볼에 상기 심볼을 꾸며주는 부호가 포함된 경우, 상기 부호를 해당 문자열로 이루어진 제2 코드로 변환한 후 상기 제1 코드와 결합하는 것을 특징으로 하는 심볼과 수식을 지원하는 컴파일러를 기록한 기록 매체.
  8. 제1항에 있어서,
    상기 변환부는
    상기 수식에 심볼이 포함된 경우, 상기 심볼을 해당 문자열로 이루어진 제1 코드로 변환하되, 상기 심볼에 번호가 포함된 경우, 상기 심볼을 해당 상수 또는 배열로 이루어진 코드로 변환하는 것을 특징으로 하는 심볼과 수식을 지원하는 컴파일러를 기록한 기록 매체.
  9. 제1항에 있어서,
    배열을 사용하는 코드의 경우, 미리 선언된 변수의 크기와 상기 수식에서 억세스하는 배열의 범위를 비교하여 상기 코드의 타당성을 검사하고, 중복된 심볼을 사용하는 코드의 경우, 상기 중복된 심볼이 동일한 심볼인지를 확인하여 상기 코드의 타당성을 검사하며, 미적분을 사용하는 코드의 경우, 미적분 수행 시간이 미리 설정되어 있는지를 확인하여 상기 코드의 타당성을 검사하는 검사부
    를 더 포함하는 것을 특징으로 하는 심볼과 수식을 지원하는 컴파일러를 기록한 기록 매체.
  10. 제1항에 있어서,
    상기 코드가 미리 선언되어 있는 변수나 함수명과 충돌하는 것을 회피할 수 있도록, 상기 코드가 상기 변수나 상기 함수명과 동일할 경우 상기 코드를 다른 값으로 변경하는 규약을 정하는 설정부
    를 더 포함하는 것을 특징으로 하는 심볼과 수식을 지원하는 컴파일러를 기록한 기록 매체.
KR1020100011671A 2010-02-08 2010-02-08 심볼과 수식을 지원하는 컴파일러를 기록한 기록 매체 KR101118819B1 (ko)

Priority Applications (1)

Application Number Priority Date Filing Date Title
KR1020100011671A KR101118819B1 (ko) 2010-02-08 2010-02-08 심볼과 수식을 지원하는 컴파일러를 기록한 기록 매체

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
KR1020100011671A KR101118819B1 (ko) 2010-02-08 2010-02-08 심볼과 수식을 지원하는 컴파일러를 기록한 기록 매체

Publications (2)

Publication Number Publication Date
KR20110092161A KR20110092161A (ko) 2011-08-17
KR101118819B1 true KR101118819B1 (ko) 2012-03-20

Family

ID=44929144

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020100011671A KR101118819B1 (ko) 2010-02-08 2010-02-08 심볼과 수식을 지원하는 컴파일러를 기록한 기록 매체

Country Status (1)

Country Link
KR (1) KR101118819B1 (ko)

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR102131423B1 (ko) * 2019-02-14 2020-07-08 (주)메인라인 문서의 자동 컴파일 방법 및 장치

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2000305786A (ja) * 1999-04-23 2000-11-02 Fujitsu Ltd コンパイル処理装置及びプログラム記録媒体
US20080066052A1 (en) * 2006-09-07 2008-03-13 Stephen Wolfram Methods and systems for determining a formula
US20080091409A1 (en) * 2006-10-16 2008-04-17 Microsoft Corporation Customizable mathematic expression parser and evaluator

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2000305786A (ja) * 1999-04-23 2000-11-02 Fujitsu Ltd コンパイル処理装置及びプログラム記録媒体
US20080066052A1 (en) * 2006-09-07 2008-03-13 Stephen Wolfram Methods and systems for determining a formula
US20080091409A1 (en) * 2006-10-16 2008-04-17 Microsoft Corporation Customizable mathematic expression parser and evaluator

Also Published As

Publication number Publication date
KR20110092161A (ko) 2011-08-17

Similar Documents

Publication Publication Date Title
US8601453B2 (en) COBOL to bytecode translation
EP4075267A1 (en) Combination method and apparatus for multiple change versions of software codes
JP2007304998A (ja) ソースコード生成方法及び装置並びにプログラム
US8954940B2 (en) Integrating preprocessor behavior into parsing
JP2014519630A (ja) 中間フォーマットを用いた、swfのhtmlへのクロスコンパイル
JP5779077B2 (ja) プログラムの生成を支援する装置及び方法
CA3021091C (en) Method, apparatus, and computer-readable medium for performing functional testing of software
CN108595334B (zh) 一种计算Java程序动态切片的方法、装置及可读存储介质
CN111443904A (zh) 一种生成可执行代码的方法及计算机可读存储介质
Juričić Detecting source code similarity using low-level languages
KR101118819B1 (ko) 심볼과 수식을 지원하는 컴파일러를 기록한 기록 매체
CN115904480B (zh) 代码重构方法、装置、电子设备及存储介质
KR20200071413A (ko) 학습용 데이터 생성 장치, 소스 코드 오류 분석 장치 및 방법
US20210096830A1 (en) Incremental code generation method
JP5405684B1 (ja) ソースプログラムのプログラミング言語変換装置
CN106126225B (zh) 一种基于程序演进模型的目标代码逆向工程方法
CN109460236B (zh) 程序版本构建和检查方法及系统
CN116360794A (zh) 数据库语言解析方法、装置、计算机设备及存储介质
CN105843661B (zh) 一种面向主机系统的代码重定位方法及其系统
CN114327614A (zh) 参考模型数据流记录和分析的方法及应用
KR102206019B1 (ko) 시뮬레이션 모델 연동을 위한 어댑터 개발 지원 장치 및 방법
JP5932707B2 (ja) 計算機、プログラム及びデータ生成方法
CN107612919B (zh) 协议配置方法及装置
CN109597624A (zh) 一种sql格式化的方法
KR101585048B1 (ko) 다이어그램 기반 알고리즘 시뮬레이션 시스템

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
FPAY Annual fee payment

Payment date: 20150213

Year of fee payment: 4

FPAY Annual fee payment

Payment date: 20160205

Year of fee payment: 5

FPAY Annual fee payment

Payment date: 20161209

Year of fee payment: 6

FPAY Annual fee payment

Payment date: 20180208

Year of fee payment: 7

FPAY Annual fee payment

Payment date: 20190115

Year of fee payment: 8

FPAY Annual fee payment

Payment date: 20191015

Year of fee payment: 9