표제. :: 위잉-치키(소스코드 검사 도구)

담당교수 : 하은용 교수

안양대학교 컴퓨터공학과 14학번

201431011 김동영

개요

우리가 사용하는 개발 도구는 어떤 언어문법을 이용하여 소스 코드의 구조를 매우 깐깐하게 검사해준다. 하지만, 검색 엔진의 유사 검색을 하는 것처럼, 여러 언어에서 통용되는 기본 개념을 프로그램이 구분할 수 있고, 어떤 모양으로 프로그램이 돌아가는지 약간이나마 예측할 수 있는가? 소스 코드의 구조를 예측하는 프로그램을 만들 수 있는 지 확인해 볼 것이다.

2. 본론

2-0. 가정

필자는 C, C++, Java, ECMAScript(HTML), Microsoft Visual Basic, C#, Python 언어만 알고 있기 때문에 위 언어의 특징들을 활용하여 기능을 설정할 것이다.

2-1. 편집 도구의 목표.

내가 해야 할 다음 작업 알려주기.

내가 모르는 함수, 알고리즘, 사용법 알려 주고 자동으로 만들기.

소스 코드의 예상 실행 결과 알려주기.

2-2. 프로그래밍 언어의 구분 종류 정의.

구분 종류.

변수, 생성자, 함수(기능), 연산자, 조건문, 반복문, 블록.

변수 : 생성되거나 복사/참조됨. 변수의 생성 위치(전역/함수 내)에 따라 참조 가능한 영역(Scope)의 위치가 결정됨.

생성자 : 어떤 개체를 만들어 냄. 객체, 개체, 메모리 공간, 일반 변수 생성 포함.

함수 : 무언가를 뱉어내거나 어떤 기능을 대신함. 일부 함수는 이벤트로 분류될 수 있음.

연산자 : 변수끼리 연산 실시.

조건문/반복문 : 프로그램의 분기를 표시. 연산자 중 논리 연산자에 의해 결정됨.

블록 : 변수의 접근 영역을 표현함.

2-3. 프로그램 흐름 구분 정의.

프로그램의 흐름을 정의하기 위해 다음 3가지 분류로 나누어 설명한다.

2-3-1. 정의 블록.

정의 저장 종류 : 함수, 객체 정의, 변수
(위 내용은 모두 전역 배열 안의 값으로 저장됨)

2-3-2. 명령문 블록.

- 변수 할당 블록 : 변수 + 수식

(변수 할당 블록에는 어느 쪽의 내용도 없을 수 있다.)

- 함수는 두 가지 분류로 나뉘어진다.

사용자 함수 / 미리 정의된 함수

오타.

2-3-3. 영역 구분.

조건 영역

반복 영역

함수 정의 영역

값 설정 영역

참조 영역

자동 코드 생성 영역

2-3-4. 선행/후행 결과 임시 삽입 블록.

미리 정의된 함수의 인자들(Arguments)을 생략한 코드, 미리 정의된 함수를 사용할 때 필요한 함수(또는 변수 선언 코드)만 적었을 때 위/아래로 선언되는 코드들을 분류하는 블록.

3. 프로그램 설계도 작성 및 구현 계획.

3-0. 개발 도구 및 개발 언어, 테스트 환경

HTML5 (ECMAScript5)

- Visual Studio 2017(Windows 10)

- Visual Studio Code(Windows 10)

Windows 10 Education Build 15386

Google Chrome

3-1. 프로그램 구현을 위한 요소.

파일 입/출력

Graphic User Interface

객체 정의

산술 연산, 논리 연산

마우스 클릭/이동 이벤트

(선택적 기능)네트워킹

문자열 관련 함수

3-2. 프로그램 구현에 필요한 기능

파일 열기

파일 저장(단, HTML5 기능 한계로 인하여 실시간 쓰기 불가능, 다른 이름으로 저장만 가능)

파일 내용 출력

소스 코드의 의미를 설명하는 화면

예상 결과 출력 화면.(콘솔/그래픽 두 개)

소스 코드 해독

소스 코드에서 빠진 내용을 알려주는 화면

함수의 반환 내용, 함수 인자 정보를 알려주는 화면.

소스 코드의 흐름을 보여 주는 화면.

소스 코드에 기능을 추가하는 화면
(블록을 이용한 드래그-드롭 방식)

단어 유사도 탐색 알고리즘.

3-3. 프로그램의 구조 정의.
3-3-1. 객체 정의(ECMAScript5)

WiingChicky()
‘위잉-치키’프로그램 그 자체.
소스 코드 내용을 담고 있음.
함수, 변수, 객체 정의 내용을 배열로 담고 있음.
이 객체에는 파일 읽기, 파일 저장하기 메서드가 제공됨.

ScopeBlock(type, content, text)
코드 블록의 영역을 표시하는 객체.

DeclarationBlock(type,name,args,content)
함수/변수/배열을 정의하는 객체.

FunctionBlock(name,args)
함수를 정의하는 객체

VariableBlock(name,args)
변수를 정의하는 객체

ConditionBlock(type, condition, ...)
조건을 정의하는 객체

IterationBlock(init, iterCond, content)
반복문을 정의하는 객체

4. 화면 배치

[개정 1]