ENE414 프로그래밍언어론강의노트 1 1 문법, 핵심구문나무, 인터프리터 한양대학교 ERICA캠퍼스컴퓨터공학과도경구 2012년 1학기 (version 0.35) 1 c David A. Schmidt, 도경구 (2012). 본문서는 Kansas State Univers

Size: px
Start display at page:

Download "ENE414 프로그래밍언어론강의노트 1 1 문법, 핵심구문나무, 인터프리터 한양대학교 ERICA캠퍼스컴퓨터공학과도경구 2012년 1학기 (version 0.35) 1 c David A. Schmidt, 도경구 (2012). 본문서는 Kansas State Univers"

Transcription

1 ENE414 프로그래밍언어론강의노트 1 1 문법, 핵심구문나무, 인터프리터 한양대학교 ERICA캠퍼스컴퓨터공학과도경구 2012년 1학기 (version 0.35) 1 c David A. Schmidt, 도경구 (2012). 본문서는 Kansas State University의 David A. Schmidt 교수의강의노트 Introduction to Programming-Language Paradigms* 를한양대학교 ERICA캠퍼스컴퓨터공학과학부 3학년프로그래밍언어론강의용으로번역하여개작하였습니다. 수업이외의용도로원저자및번역개작자의허락없이무단복제하여배포할수없습니다. (*

2 내가쓴글을다른사람은어떻게이해할까? 서로약속된공용어로문법에맞게글을쓰면, 다른사람은내가사용한단어와문장의뜻 ( 의미 ) 을이해할수있을것이다. 컴퓨터와소통하기위해서프로그래밍언어로프로그램을짤때도같은원리가적용된다. 컴퓨터도프로그래머도사용하는프로그래밍언어의구문과의미를알고있어야한다. 구문syntax: 단어와문장의철자법과문법 생김새 의미semantics: 단어와문장의뜻 실행결과 표현 구문은문법grammar으로표현한다. 일반적으로 BNF(Backus-Naur Form) 를가장널리쓴다. 경우에따라서구문다이어그램syntax diagram과같이그림으로표현하기도하지만원칙적으로표기방식은같다. 의미는표현방식이다양하다. 수학함수로의미를표현하는함수의미표기법denotational semantics, 실행성질을논리식으로표현하는공리의미표기법axiomatic semantics, 실행과정을규칙으로표현하는실행의미표기법operational semantics이있다. 이중에서실행의미표기법은실제프로그래밍언어를사용하여프로그램으로표현가능하며, 이를인터프리터 ( 해석기 )interpreter라고한다. 이해 프로그램의구문구조를이해하는프로그램은파서parser이다. 파서는문자열로작성된프로그램을핵심구문트리로만들어준다. 프로그램의의미를이해하는프로그램은인터프리터이다. 인터프리터는핵심구문트리의의미를이해하고실행하여결과를내준다. 이장에서는파서와인터프리터프로그램으로언어의구문과의미를상세하게이해하는기술에대해서공부하려고한다. 1. 문법 BNF 1950년대에노암촘스키Noam Chomsky 교수는나무tree 형식으로문장의구문을표현할수있음을알아챘다. 그리고구문에맞는문장을만드는규칙을귀납방정식inductive equations으로정의할수있다는사실을발견하고, 그정의를문법grammar이라고하였다. 이후에존박커스John Backus 와피터나우어Peter Naur는똑같은개념을따로발견했고실제로프로그래밍언어의구문을정의하는데사용할수있도록발전시켰다. 그래서 BNFBackus-Naur Form라고하기도한다. 문법은방정식 ( 규칙 ) 의집합으로방정식끼리서로참조하면서얽혀있는연립방정식으로볼수있으며, 단어로나열된문장의집합을정의한다. 사례탐구를통해서문법을어떻게정의하는지알아보자. 1

3 1.1 사례탐구 : 산술식수numeral와덧셈뺄셈연산자로구성된산술식arithmetic expression을작성하는구문을상세하게정의해보자. 먼저구문도메인syntax domain을다음과같이정의한다. E, E1, E2 : Expression O : Operator N : Numeral Expression, Operator, Numeral은각각구문도메인으로, Expression은정의하는모든산술식의집합이고, Operator는덧셈, 뺄셈연산자기호의집합이고, Numeral은숫자열의집합으로보면된다. 왼쪽에있는 E, E1, E2, O, N 구문도메인에속한산술식, 연산자기호, 숫자열을가리키는이름으로문법변수nonterminal라고한다. 구문도메인정의를사용하여산술식의구문을정의하는문법을다음과같이방정식으로표현할수있다. (1) E ::= N ( E1 O E2 ) (2) O ::= + - (3) N ::= 숫자열문법변수가아닌나머지단어또는기호는문법상수terminal라고한다. 위의문법에서문법변수와문법상수를모두찾아보자. 식 (1) 은산술식 (E) 을어떻게구성하는지정의한다. 산술식은임의의숫자열하나 (N) 로구성하거나, 아니면여는괄호기호 ((), 산술식 (E1), 연산자기호 (O), 산술식 (E2), 닫는괄호기호 ()) 순으로나열하여구성할수있다. ( 여기서 는 또는 을의미한다.) 숫자열 N은위에서말로정의했지만, 다음과같이상세하게문법으로정의할수도있다. D : Digit N ::= D D N D ::= 하지만 N과같이수 ( 또는단어 ) 의철자법은말로만정의해도의도를분명히전달할수있어서앞에서와같이대부분말로정의한다. 산술식 Expression의문법규칙을정의했으므로이제특정산술식이문법에맞는지검증할수있다. (4 - (3 + 2)) 검증절차는다음과같이말로기술할수있다. 1. 4와 3과 2는모두 N이다. 2. N은모두 E 산술식이므로 3과 2는 E 산술식이고, + 는 OPERATOR 기호이다. 따라서 (3 + 2) 는 E 산술식이다. 2

4 3. 4와 (3+2) 는모두 E 산술식이고, -는 O 기호이다. 따라서 (4 - (3 + 2)) 는 E 산술식이다. 말대신위에서정의한문법규칙을이용하여전개하면훨씬더상세하게검증할수있는데이를 유도derivation라고한다. (4 - (3 + 2)) 는다음과같이유도한다. E => ( E O E ) => ( N O E ) => ( 4 O E ) => ( 4 + E ) => ( 4 + ( E O E )) => ( 4 + ( N O E )) => ( 4 + ( 3 O E )) => ( 4 + ( 3 - E )) => ( 4 + ( 3 - N )) => ( 4 + ( 3-2 )) 유도는아래와같이유도나무derivation tree로그릴수도있다. 수와기호를나열하여 Expression 산술식을만드는필요충분조건은문법규칙을가지고수와기호로구성된유도나무를만들수있느냐이다. 지금까지본바와같이문법규칙으로언어의구문을상세하게정의할수있다. 프로그램을읽고의미를이해하는 (= 실행하는 ) 컴파일러와인터프리터프로그램을만들기전에문법규칙을먼저이해해야한다. 연습문제 1. 산술식 ((4-3) + 2) 를유도해보고, 유도나무를그려보자 는문법에맞는 Expression 문구가왜아닐까? 3

5 1.2 사례탐구 : 미니명령언어프로그래밍언어전체의구조를문법으로정의할수있다. 간단한미니명령언어의문법규칙을정의해보자. 먼저구문도메인을정의하자. P : Program CL : CommandList C : Command V : Var E : Expression N : Numeral O : Operator 여기서 Program은미니명령어프로그램의집합이고, Command는명령문의집합, CommandList 는 1개이상나열된명령문의집합이고, Var는 "print", "while", "end" 를제외한문자열의집합이다. P ::= CL CL ::= C C ; CL C ::= V = E print V while E : CL end E ::= N V ( E1 O E2 ) O ::= + - 문법규칙에의하면명령문 (C) 은지정문assignment 또는프린트문또는 while 루프로구성하고, 프로그램 (P) 은그러한명령문을하나이상나열하여구성한다. while 루프의몸체내부에도명령문을나열할수있다. 문법규칙은구문에대해서만정의하고그문구의뜻이무엇인지설명해주지않으므로, while x : x = (x - 1) end와같은프로그램이어떻게작동하는지문법규칙만봐서는알길이없다. 이는의미semantics 이슈이며곧뒤에서공부하게된다. 연습문제 1. 다음프로그램Program의유도나무를그려보자. x = (2 + x) x = 3; print x x = 3 ; while x : x = (x - 1) end ; print x 4

6 2. 핵심구문나무 유도나무는문장의복잡한내부구조를모두보여준다. 하지만유도나무의내부구조는좀지나치게복잡하여의미를파악하는데 ( 실제로프로그램을실행하는데 ) 필요없는부분은제거하고필요한실제모양만유지하도록간단하게만들필요가있다. 이렇게간단한형태로바꾼나무를핵심구문나무abstract-syntax tree 라고하고, 유도나무는상세구문나무concrete-syntax tree 라고한다. (4 - (3 + 2)) 을유도하면서만든핵심구문나무는다음과같다. 앞에서본유도나무와비교하면훨씬단출하지만, 실제로계산에필요한기본구조는동일하다. 문법과나무를다루는프로그램을만들려면 Python, Scheme, ML, OCaml과같이중첩리스트nested list를허용해주는자료구조를제공하는언어를쓰면좋다. 왜냐하면핵심구문나무는중첩리스트로쉽게표현되기때문이다. 위의핵심구문나무를 Python 리스트로표현하면다음과같다. ["-", "4", ["+", "3", "2"]] ((2+1) - (3-4)) 를핵심구문나무로표현하면, ["-", ["+", "2", "1"], ["-", "3", "4"]] 프로그램 x = 3; while x : x = (x -1) end; print x를핵심구문나무로표현하면, [["=", "x", "3"], ["while", "x", [["=", "x", ["-", "x", "1"]]]], ["print", "x"] ] 원하면전체를아래와같이한줄로늘어놓아도상관은없지만위와같이줄을띄우고약간의들여쓰기를하여맞추어나열하면보기가좋다. [["=", "x", "3"], ["while", "x", [["=", "x", ["-", "x", "1"]]]], ["print", "x"]] COMMANDLIST는명령문핵심구문나무의리스트로표현했다. 리스트로핵심구문나무를표현하면프로그램하기용이하므로앞으로쭉사용하도록하겠다. 연습문제 1. 앞의연습문제에서그린유도나무를모두핵심구문나무로바꾸시오. 5

7 핵심구문나무의 의미 3. 인터프리터(실행기)가 프로그램을 실행하기 위해서, 해당 프로그램 파일을 파싱하여 핵심구 문나무를 먼저 만들고, 핵심구문나무의 의미를 계산(실행)한다. (컴파일러가 프로그램을 번역 하기 위해서, 해당 프로그램 파일을 파싱하여 핵심구문나무를 먼저 만들고, 핵심구문나무를 다른 언어로 번역한다.) 핵심구문나무를 정의하는 BNF 규칙은 재귀적으로 정의하므로, 의미를 계산하는 함수도 재귀적으로 나무를 훑어서 의미를 계산한다. 자세히 예를 통해서 살펴보자. 3.1 산술식의 의미 산술식의 핵심구문나무는 두 가지 종류가 있으며, BNF 규칙으로 다음과 같이 정의할 수 있다. TREE ::= OP ::= NUMERAL + [ OP, TREE, TREE ] - 여기서 NUMERAL은 수를 나타내는 숫자열string of digits이다. 즉, 핵심구문나무는 하나의 수이거나 연산자기호와 2개의 하부나무subtree로 구성된 리스트 이다. 핵심구문나무를 훑으면서 의미를 계산하려면, 문법규칙의 귀납구조에 맞게 재귀호출을 하는 함수를 구현하면 된다. 산술식 핵심구문나무의 의미는 정수integer이다. 예를 들어, ["-", ["+", "2", "1"], ["-", "3", "4"]]를 계산하면 결과는 정수 4가 된다. 핵심구문나무를 훑어가면서 결과를 계산하는 함수 eval을 작성해보자. eval은 핵심구문나무의 의미semantics를 정의하는 함수이다. 즉, eval 함수는 산술식 언어의 인터프리터interpreter(해석기)인 셈이다. Python으로 작성한 완성된 인터프리터는 다음과 같다. # file: "eval.py" def eval(t) : pre: t == TREE, where TREE ::= NUMERAL [ OP, TREE, TREE ] OP ::= "+" "-" NUMERAL ::= 숫자열 post: ans == t의 의미(계산결과) returns: ans # case1: TREE == NUMERAL if isinstance(t, str) : if t.isdigit() : ans = int(t) raise Exception # t가 문자열인가? # t가 숫자로만 된 문자열인가? # 문자열을 해당 정수로 변환(cast) # t가 정수가 아님 # 프로그램 멈춤 6

8 # case2: TREE == [ OP, TREE, TREE ] op = t[0] t1 = t[1] t2 = t[2] # 왼쪽 하위나무의 답을 구함: ans1 = eval(t1) # 오른쪽 하위나무의 답을 구함: ans2 = eval(t2) if op == "+" : ans = ans1 + ans2 elif op == "-" : ans = ans1 - ans2 # 연산자가 + 또는 - 가 아님 print("eval error:", t, "is illegal") raise Exception # 프로그램 멈춤 return ans 함수의 재귀호출은 핵심구문나무를 정의한 문법규칙의 귀납구조와 정확하게 일치한다. 재 귀호출은 하부나무의 의미를 계산한 후, 이를 묶어서 전체 나무의 의미를 계산하는 방식으로 작동한다. 연습문제 위의 eval 함수를 eval.py라는 이름의 파일에 복사하고, Python 실행기를 띄워보자. 다음과 같은 예제를 만들어서 함수 호출을 해보자. eval( ["-", ["+", "2", "1"], ["-", "3", "4"]]) 위 함수 호출의 실행 과정을 추적해보자. eval 함수를 재귀 호출하면, eval 함수 호출 자리에 eval 함수 몸체를 복제하여 실행과정을 추적한다. 이를 복제규칙 의미계산copy-rule semantics 라고 하는데, 실제로 실행기가 실행할때는 함수를 호출할 때마다 필요한 정보를 보관하는 활 성레코드activation record를 만든다. 복제규칙 의미계산으로 실행 과정을 추적해보면 실행기가 실행할 때 어떠한 방식으로 활성레코드 스택을 확장하고 축소하는지 알 수 있다. eval( ["-", ["+", "2", "1"], ["-", "3", "4"]] ) => op = "-" t1 = ["+", "2", "1"] t2 = ["-", "3", "4"] ans1 = eval(t1) => op = "+" 7

9 t1 = "2" t2 = "1" ans1 = eval(t1) => ans = 2 => ans = 1 => ans = 3 => ans = 4 = 2 ans2 = eval(t2) = 1 ans = 2+1 = 3 = 3 ans2 = eval(t2) => op = "-" t1 = "3" t2 = "4" ans1 = eval(t1) = 3 ans2 = eval(t2) = 4 ans = 3-4 = -1 = -1 ans = 3 - (-1) = 4 = 4 실행과정 추적에서 =>는 핵심구문나무의 하부나무를 대상으로 eval 함수를 새로이 재귀호 출함을 나타낸다. 새롭게 재귀호출하면 지역변수의 고유 이름영역이 생기고 자신의 영역에서 답을 계산하는데 사용된다. 궁극적으로 돌아온 답은 모아져서 최종 계산을 하는데 사용된다. 재귀호출 패턴은 핵심구문나무의 구조 패턴과 정확하게 일치한다. 3.2 번역하기 컴파일러compiler(번역기translator)는 프로그램 파일을 파싱하여 핵심구문나무로 변환하 고, 이어서 (기계어와 같은) 다른 언어의 프로그램으로 변환하는 프로그램이다. 예를 들면, C 컴파일러는 C 프로그램을 어셈블리어(기계어)로 번역하고, 자바Java 컴파일러는 자바 프로그 램을 자바가상머신Java Virtual Machine에서 실행되는 자바바이트코드Java Bytecode로 번역한다. 이 절에서는 핵심구문나무를 연산자후위표기법postfix을 사용하는 바이트코드bytecode로 컴 파일해보자. 이는 실제로 자바 컴파일러가 바이트코드로 번역하는 방식과 원칙적으로 같다. # file: postfix.py def postfix(t) : pre: t == TREE, where TREE ::= NUM [ OP, TREE, TREE ] post: ans == t안에 있는 연산자기호들을 연산자후위표기법으로 나열 returns: ans 8

10 # case1: TREE == NUMERAL if isinstance(t, str) : # t가 문자열인가? # t가 숫자로만 된 문자열인가? if t.isdigit() : ans = t #(*) # t에 숫자가 아닌 문자가 있음 raise Exception # case2: TREE == [ OP, TREE, TREE ] # t의 모양은 리스트 [op, t1, t2] op = t[0] t1 = t[1] t2 = t[2] # 왼쪽 하위나무의 문자열 생성: ans1 = postfix(t1) # 오른쪽 하위나무 문자열 생성: ans2 = postfix(t2) # 하위 나무에서 구한 답을 연결: if op == "+" : ans = ans1 + ans2 + "+" #(*) elif op == "-" : ans = ans1 + ans2 + "-" #(*) print("error:", t, "is illegal") raise Exception # 프로그램 멈춤 return ans 이 코드는 eval 함수의 코드와 거의 같다. 그러나 실제로 #(*)로 표시된 부분에서 답을 계 산하는 대신 후위표기법으로 문자열을 재생성하였다. 예를 들어, postfix(["+", ["-", "2", "1"], "4"])는 "21-4+"와 같은 후위표기법 문자열을 생성한다. 수행하는 연산자가 뒤에 붙어 있어서 어떤 연산을 할지 알려준다. 이 연산의 실행과정은 다음과 같이 추적할 수 있다. postfix(["+", ["-", "2", "1"], "4"]) => op = "+" t1 = ["-", "2", "1"] t2 = "4" ans1 = postfix(t1) => op = "-" t1 = "2" t2 = "1" 9

11 ans1 = postfix(t1) => ans = "2" = "2" ans2 = postfix(t2) => ans = "1" = "1" ans = "2" + "1" + "-" = "21-" = "21-" ans2 = postfix(t2) => ans = "4" = "4" ans = "21-" + "4" + "+" = "21-4+" 여기서도 각 =>는 핵심구문나무의 하부나무를 대상으로 postfix 함수를 새로이 재귀호출함을 나타낸다. 아직도 이해가 가지 않으면 print 명령을 다음과 같이 적재적소에 삽입하여 나무를 연산자후위표기법으로 변환하는 과정을 따라가보면 이해가 쉬워질 것이다. # file: postfixx.py def postfixx(level, t) : pre: t == TREE, where TREE ::= INT [ OP, TREE, TREE ] level == 후위연산자가 붙는 전체 나무에서 t의 깊이를 나타내는 정수 post: ans == t안에 있는 심벌들을 연산자후위표기법으로 나열 returns: ans print(level * " ", "Entering subtree t=", t) # case1: TREE == NUMERAL if isinstance(t, str) : # t가 문자열인가? if t.isdigit() : ans = t # t가 숫자로만 된 문자열인가? #(*) # t에 숫자가 아닌 문자가 있음 raise Exception # case2: TREE == [ OP, TREE, TREE ] # t의 모양은 리스트 [op, t1, t2] op = t[0] t1 = t[1] t2 = t[2] # 왼쪽 하위나무의 문자열 생성: ans1 = postfixx(level + 1, t1) # 오른쪽 하위나무의 문자열 생성: 10

12 ans2 = postfixx(level + 1, t2) # 하위나무에서구한답을연결 : ans = ans1 + ans2 + op print(level * " ", "Exiting subtree t=", t, " ans=", ans) print() return ans postfixx(0, ["+", "2", ["-", "3", "4"]]) 를 Python으로실행하보자. 어떤결과가프 린트되는가? Entering subtree t= [ +, 2, [ -, 3, 4 ]] Entering subtree t= 2 Exiting subtree t= 2 ans= 2 Entering subtree t= [ -, 3, 4 ] Entering subtree t= 3 Exiting subtree t= 3 ans= 3 Entering subtree t= 4 Exiting subtree t= 4 ans= 4 Exiting subtree t= [ -, 3, 4 ] ans= 34- Exiting subtree t= [ +, 2, [ -, 3, 4 ]] ans= 컴퓨터는잎사귀 leaf 의답을모아서전체나무의답을계산하는데, 나무를깊이우선순으로 왼쪽에서오른쪽으로훑어내려간다. 3.3 명령문의의미 : 소형인터프리터구조 앞절에서배운기술을가지고실제프로그래밍언어의의미를달아줄수있다. 여기서도앞에서 본미니명령언어를가지고공부해보자. PROGRAM ::= COMMANDLIST COMMANDLIST ::= COMMAND COMMAND ; COMMANDLIST COMMAND ::= VAR = EXPRESSION print VAR while EXPRESSION : COMMANDLIST end EXPRESSION ::= NUMERAL VAR ( EXPRESSION OPERATOR EXPRESSION ) OPERATOR ::=

13 여기서 NUMERAL은숫자열의집합이고, VAR는 print, while, end를제외한문자열의집합이다. 이프로그램을보자. x = 3 ; while x : x = x - 1 end ; print x 그러면이프로그램의핵심구문나무는다음과같다. [["=", "x", "3"], ["while", "x", [["=", "x", ["-", "x", "1"]]]], ["print", "x"] ] 핵심구문나무에는 COMMANDLIST, COMMAND, EXPRESSION 등 3가지다른레벨이있다. 프로그램은그자체가 COMMANDLIST이며, 핵심구문나무를정의하는문법은다음과같다. PTREE ::= CLIST CLIST ::= [ CTREE+ ] 여기서 + 는한번이상반복해서나타남을표시함 CTREE ::= ["=", VAR, ETREE] ["print", VAR] ["while", ETREE, CLIST] ETREE ::= NUMERAL VAR [OP, ETREE, ETREE] 여기서 OP는 "+" 아니면 "-" 여기서각비단말자마다하나씩인터프리터함수를만드는데, 각함수가그비단말자에해당하는프로그램의의미를나타낸다. Python과 Java 내부적으로내장되어있는인터프리터도같은원리로만든다. 인터프리터의구조는아래그림과같이그릴수있다. 여기서화살표는입력데이터의흐름과데이터구조의호출흐름이있음을나타낸다. Python 으로데이터구조와함수를작성하여미니명령언어의인터프리터를만들어보자. 12

14 변수와루프로구성된미니명령언어의인터프리터프로그램 There is one crucial data structure: ns = {} # ns는이름등록부 (namespace) 이다. 프로그램변수의이름과값을알고있다. # Python의해시테이블, 즉, 사전 (dictionary) 을사용한다. # 예를들어, ns = { x = 2, y = 0} 이면, # 변수 x는정수 2의이름이고, 변수 y는정수 0의이름이다. def interpretclist(p) : pre: p == CLIST로표현된프로그램, CLIST ::= [ CTREE+ ] post: ns == 프로그램 p를실행한후변경된이름등록부 for command in p : interpretctree(command) def interpretctree(c) : pre: c == CTREE로표현된명령문, CTREE ::= ["=", VAR, ETREE] ["print", VAR] ["while", ETREE, CLIST] post: ns == 명령문 c를실행한후변경된이름등록부 operator = c[0] if operator == "=" : # 할당문 ["=", VAR, ETREE] var = c[1] # 좌변을가져옴 exprval = interpretetree(c[2]) # 우변을계산함 ns[var] = exprval # 우변값을좌변변수에저장 elif operator == "print" : # 프린트문 ["print", VAR] var = c[1] if var in ns : # 변수이름이이름등록부에등록되어있는지확인 ans = ns[var] # 해당값을가져옴 print(ans) crash("variable name undefined") elif operator == "while" : # while문 expr = c[1] body = c[2] while (interpretetree(expr)!= 0) : 13

15 interpretclist(body) # 오류 crash("invalid command") def interpretetree(e) : pre: e == ETREE로표현된식, ETREE ::= NUMERAL VAR [OP, ETREE, ETREE] 여기서 OP는 "+" 아니면 "-" post: ans == 식 e를계산한결과값 returns: ans if isinstance(e, str) and e.isdigit() : # 숫자열인지확인 ans = int(e) elif isinstance(e, str) and len(e) > 0 and e[0].isalpha() : # 변수이름인지확인 if e in ns : # 변수이름이이름등록부에등록되어있는지확인 ans = ns[e] # 해당값을가져옴 crash("variable name undefined") # [op, e1, e2] op = e[0] ans1 = interpretetree(e[1]) ans2 = interpretetree(e[2]) if op == "+" : ans = ans1 + ans2 elif op == "-" : ans = ans1 - ans2 crash("illegal arithmetic operator") return ans def crash(message) : pre: message == 문자열 post: message을출력하고, 인터프리터를종료함 print(message + "! crash! core dump: ", ns) raise Exception # 인터프리터를종료함 14

16 def main(program) : pre: program == PTREE로 표현된 프로그램, PTREE ::= post: CLIST ns == 프로그램을 모두 실행한 후 변경된 이름등록부 global ns # ns는 전역변수 ns = {} interpretclist(program) print("final namespace =", ns) main 함수는 인터프리터의 시동을 건다. main([["=", "x", "3"], ["while", "x", [["=", "x", ["-", "x", "1"]], ["print", "x"]]], ]) 위 프로그램은 3을 x 에 할당하고 x의 값을 2에서 1로, 다시 0으로 감소시키고, 루프를 마치는 프로그램이다. 연습문제 위의 실행기 코드를 실행시켜보시오. 가상머신 컴퓨터 하드웨어는 특정 기계어밖에 이해하지 못한다. 실행기는 우리가 사용하는 언어로 작성 한 프로그램을 컴퓨터가 직접 이해하는 것처럼 보이게 하는 역할을 하므로, 실행기를 가상머 신virtual machine이라고 하기도 한다. 단순무식 미니명령언어 컴파일러 3.4 명령문으로 구성된 프로그램은 바로 실행할 수 있는 실행기(인터프리터)가 없거나 기타 다른 이유로 직접 실행가능한 다른 언어로 번역해야 할 경우가 많다. C 프로그램은 특정 컴퓨터 프로세서가 이해하는 코드로 번역하여 실행하고, Java의 경우 자바바이트코드Java bytecode로 번역하여 자바가상컴퓨터Java Virtual Machine로 실행한다. 컴파일러를 이해하기 위해서 미니명 령언어를 자바바이트코드와 유사한 바이트코드로 번역하는 컴파일러를 만들어보자. 후위 산술 식으로 번역하는 방식과 유사하게, 미니명령언어 실행기를 수정하여 다음과 같은 미니명령언어 프로그램을 x = 3 ; while x : x = x - 1 end ; 15

17 print x 다음과 같은 바이트코드로 번역하는 컴파일러를 만들어보자. LOADNUM 3 STORE x BEGINLOOP LOAD x IFZERO EXITLOOP LOAD x LOADNUM 1 SUBTRACT STORE x ENDLOOP PRINT x 바이트코드 명령과 실행의미는 아래와 같다. 바이트코드는 실행할 때 스택메모리를 사용한 다. LOADNUM n n을 스택에 밀어넣음 LOAD v 심볼테이블에서 v 변수 값을 스택에 밀어넣음 ADD 스택 꼭대기 두 값을 꺼내서 더한 값을 다시 스택에 밀어넣음 SUBTRACT 스택 꼭대기 두 값을 꺼내서 뺀 값을 다시 스택에 밀어넣음 STORE v 스택의 꼭대기 값을 꺼내서 심볼테이블의 v에 저장 PRINT v 스택의 꼭대기 값을 꺼내서 화면에 출력 IFZERO EXITLOOP 스택의 꼭대기 값을 꺼내보고 0이면 루프의 끝으로 빠져나감 BEGINLOOP 루프의 시작지점 ENDLOOP 루프의 끝지점 컴파일할 때, 실행하면서 지정할 변수 목록을 심볼테이블symboltable로 유지한다. 지정하는 변 수를 심볼테이블symboltable에 저장하여 기억해두고 지정한 변수만 사용하는지 컴파일하면서 점검한다. 변수와 루프로 구성된 미니명령언어의 컴파일러 프로그램. 프로그램을 바이트코드로 번역함: 16

18 symboltable = [] # 심벌테이블 : 실행시간에메모리에저장될변수이름목록. # 프로그램의 " 선언점검 " 에사용됨. def compileclist(p) : pre: p is CLIST로표현된프로그램, CLIST ::= [ CTREE+ ] post: ans == 프로그램 p를컴파일한바이트코드 returns: ans ans = "" for command in p : ans = ans + compilectree(command) return ans def compilectree(c) : pre: c == CTREE로표현된명령문, CTREE ::= ["=", VAR, ETREE] ["print", VAR] ["while", ETREE, CLIST] post: ans == 명령문 c를컴파일한바이트코드 returns: ans operator = c[0] if operator == "=" : # 할당문 ["=", VAR, ETREE] var = c[1] # 좌변을가져옴 exprcode = compileetree(c[2]) symboltable.append(var) # 심벌테이블목록에변수이름추가 ans = exprcode + "STORE " + var + "\n" elif operator == "print" : # 프린트문 ["print", VAR] var = c[1] if var in symboltable : # 변수이름이이름등록부에등록되어있는지확인 ans = "PRINT " + var + "\n" crash("variable name undefined") elif operator == "while" : # while문 expr = c[1] body = c[2] exprcode = compileetree(c[1]) 17

19 bodycode = compileclist(c[2]) ans = "BEGINLOOP \n" + exprcode \ + "IFZERO EXITLOOP \n" + bodycode + "ENDLOOP \n" # 오류 crash("invalid command") return ans def compileetree(e) : pre: e == ETREE로표현된식, ETREE ::= NUMERAL VAR [OP, ETREE, ETREE] 여기서 OP는 "+" 아니면 "-" post: ans == 식 e를컴파일한바이트코드 returns: ans if isinstance(e, str) and e.isdigit() : # 숫자열인지확인 ans = "LOADNUM " + e + "\n" elif isinstance(e, str) and len(e) > 0 and e[0].isalpha() : # 변수이름인지확인 if e in symboltable : # 변수이름이이름등록부에등록되어있는지확인 ans = "LOAD " + e + "\n" crash("variable name undefined") # [op, e1, e2] op = e[0] ans1 = compileetree(e[1]) ans2 = compileetree(e[2]) if op == "+" : ans = ans1 + ans2 + "ADD \n" elif op == "-" : ans = ans1 + ans2 + "SUBTRACT \n" crash("illegal arithmetic operator") return ans def crash(message) : pre: message == 문자열 post: message을출력하고, 컴파일러를종료함 18

20 print(message + "! crash!", symboltable) raise Exception # 컴파일러를 종료함 def main(program) : pre: program == PTREE로 표현된 프로그램, PTREE ::= CLIST post: 프로그램을 모두 컴파일한 바이트코드 global symboltable # symboltable은 전역변수 symboltable = [] code = compileclist(program) print(code) 컴파일러는 핵심구문나무를 훑으면서 바이트코드를 문자열로 생성한다. 사소할 수도 있지 만 인터프리터와 컴파일러의 중요한 기술적인 차이점을 비교해보자. 인터프리터는 지정문을 실행하면서 이름등록부namespace를 사용하여 데이터를 저장, 수정, 참조하지만, 컴파일러는 지 정문을 실행하지 않고 번역만 하므로 이름등록부는 필요없다. 대신 프로그램이 실행중에 어떤 변수를 만들고 사용할 것인지를 기록하는 새로운 구조인 심볼테이블symboltable이 필요하다. 심볼테이블은 실행시간 메모리 사용을 예견해주는 일종의 고스트 역할을 하여, 지정되지 않은 변수를 사용하는 오류를 찾는데 도움을 준다. 실행 중 발생할 프로그램 오류를 컴파일하 면서 미리 발견하는 것이다. (만약 미니명령언어를 타입정보와 함께 변수를 미리 선언하도록 만들었다면, 심벌테이블에 타입정보를 저장하여 컴파일하면서 타입검사도 할 수 있었을 것이 다.) 여기서 공부한 컴파일러에서 while루프에 해당하는 바이트코드는 실제 컴파일러가 현장에 서 만들어내는 바이트코드에 비해서 단순하다. 실제 컴파일러는 루프를 번역할때 jump 명령과 레이블label을 같이 생성한다. 예를 들면, 앞에서 컴파일한 다음 코드는 LOADNUM 3 STORE x BEGINLOOP LOAD x IFZERO EXITLOOP LOAD x LOADNUM 1 SUBTRACT STORE x ENDLOOP PRINT x 현장에서는 다음과 같이 컴파일한다. 19

21 LOADNUM 3 STORE x LABEL1: LOAD x JUMPZERO LABEL2 LOAD x LOADNUM 1 SUBTRACT STORE x JUMP LABEL1 LABEL2: PRINT x 우리는기본개념만보여주려고했으므로상대적으로복잡한레이블생성은생략하였음을양해바란다. 3.5 인터프리터를쓸까? 컴파일러를쓸까? 새로운언어를설계할때항상인터프리터interpreter를먼저만든다. 그래야그언어의의미를이해할수있기때문이다. 시간과공간적인성능이중요하다면, 인터프리터를컴파일러compiler 로변경한다. 컴파일러는파싱, 핵심구문나무생성과같은지루한작업과변수선언점검, 연산의타입호환성등과관련한일상적인점검을수행하고나서, 컴파일할코드로번역하는절차를진행한다. 컴파일한결과는소형이면서빠르게실행되는프로그램이될것이다. 인터프리터작성에사용되는언어를하드웨어가이해하지못한다면, 인터프리터를수정하여하드웨어가이해하는언어로된프로그램을만들어내는컴파일러를만들면된다. ( 혹시하드웨어가이해하는언어로인터프리터를만들수있을까? 그게더쉬울지도모른다.) 프로그램을펌웨어firmware 또는칩에구어넣을수있다면, 파싱, 핵심구문나무생성, 변수선언점검, 타입호환성검사등을한번만하고컴파일된코드를펌웨어나칩에구워넣을수있도록인터프리터를컴파일러로만드는편이훨씬좋을것이다. 프로그램의정확성이생명이라면, 인터프리터를사용하는편이낫다. 컴파일러보다인터프리터를분석하기도쉽고, 제대로작동하는지증명하기도쉽다. 언어를지속적으로변경하거나확장해야한다면, 인터프리터로프로그램을실행하는편이훨씬유리하다. 컴파일러를고치기는정말끔찍하게복잡하기때문이다. 4. 파싱하기 : 핵심구문나무만들기 핵심구문나무 abstract syntax tree 는재귀함수로처리하기정말쉽기때문에, 프로그램텍스트를 읽으면서동시에핵심구문나무를만들어나가도록프로그램을작성하는것이제일좋다. ( 유 20

22 도나무 자체는 실제로 만들 필요가 전혀 없다!) 이 작업을 파싱parsing이라고 한다. 컴파일러든 인터프리터든 컴파일이나 실행하기 전에 이 파싱 작업을 반드시 거쳐야 한다. 예를 들어, ((2+1) - (3-4) )와 같은 텍스트 한 줄을 읽고, ["-", ["+", "2", "1"], ["-", "3", "4"]]와 같은 핵심구문나무를 만들 수 있는 파싱 프로그램 parseexpr를 작성해 보자. 파싱은 다음과 같이 두 단계로 나누면 편리하다. 1. 어휘분석lexical analysis 또는 스캐닝scanning: 텍스트 문자열에서 의미가 있는 최소 단위 토 큰token인 연산자와 단어를 차례로 인식하여, 토큰열로 모은다. 빈칸은 무시한다. 2. 파싱: 토큰열에서 토큰을 하나씩 읽어서, 문법규칙에 따라 핵심구문나무를 만든다. 두 번째 단계는 어려워보이지만, 지금까지 공부한 기술을 그대로 적용하면 의외로 쉽게 해결할 수 있다. 문법 규칙 하나에 함수 하나씩을 작성한다. 각 문법규칙에 맞추어 토큰을 하나 씩 읽으면서 핵심구문나무를 만들어나간다. 이 기술을 재귀강하파싱recursive-descent parsing 이라고 한다. 어휘분석, 스캐닝: 토큰을 인식하여 모으기 4.1 먼저 텍스트 문자열의 문자를 하나씩 검사하여 인식한 토큰 리스트를 만드는 함수를 만들어 보자. def scan(text) : scan 함수는 텍스트 문자열에서 토큰을 차례로 찾아내어 토큰 리스트로 모은다. pre: text == 프로그램 텍스트 문자열 post: answer == text에서 찾아낸 토큰 리스트 (빈칸과 빈줄은 무시) OPERATORS = ("(", ")", "+", "-", ";", ":", "=") # 문자 한 개짜리 연산자만 처리 가능 SPACES = (" ", "\n") SEPARATORS = OPERATORS + SPACES nextword = "" # answer 리스트에 추가될 다음 토큰 answer = [] for letter in text: # 불변식(invariant): # answer + nextword + letter # === 빈칸과 빈줄을 제외하고 텍스트에서 지금까지 읽은 모든 단어와 심벌 21

23 # nextword가 완전히 모아져서 answer의 뒤에 추가할 수 있는지 확인: if letter in SEPARATORS and nextword!= "" : answer.append(nextword) nextword = "" if letter in OPERATORS : answer.append(letter) elif letter in SPACES : pass # 빈칸과 빈줄은 버림 # 단어 또는 수를 만듬 nextword = nextword + letter if nextword!= "" : answer.append(nextword) return answer 예를 들어, scan("((2+1) - (3-4) )")을 실행하면 다음과 같은 결과를 얻는다. [ (, (, 2, +, 1, ), -, (, 3, -, 4, ), ) ] 4.2 파싱: (산술)식의 핵심구문나무 만들기 토큰 리스트를 읽고 핵심구문나무를 만드는 함수를 문법규칙에 맞추어서 작성한다. 산술식Expression 의 문법규칙은 다음과 같다. E ::= N V ( E1 O E2 ) 여기서 E, E1, E2 : Expression N : Numeral 은 숫자열 V : Var 은 문자열 O : Operator 는 "+" 또는 "-" 각 문법규칙마다 핵심구문나무를 하나씩 다음과 같이 만들면 된다. N의 핵심구문나무 = N V의 핵심구문나무 = V ( E1 O E2 )의 핵심구문나무 = [O, T1, T2] 여기서 T1은 E1의 핵심구문나무이고, T2는 E2의 핵심구문나무 22

24 산술식의 토큰을 읽어서 핵심구문나무를 만드는 parseexpr 함수를 작성해보자. 앞에서 공 부한 eval 함수와 같이 문법규칙을 보면 무엇을 어떻게 해야하는지 보인다. 아래에서 정의한 전역변수global variable와 도우미 함수를 쓰면 단어를 하나씩 받아서 파싱하 기 편하다. # 변수 inputtext에 프리로 파싱할 텍스트가 저장되어 있다고 가정하자. # 토큰 리스트 생성 wordlist = scan(inputtext) nextword = "" # 다음 토큰 # 전역 불변식(global invariant): nextword + wordlist == 처리할 토큰 # 토큰 리스트의 끝을 표시하는토큰 EOF = "!" # 이 함수를 호출하면 다음에 읽을 토큰을 nextword에 저장: def : wordlist의 맨 앞에 있는 단어를 nextword에 저장 wordlist가 비어있으면 nextword에 EOF를 저장 global nextword, wordlist if wordlist == [] : nextword = EOF nextword = wordlist[0] wordlist = wordlist[1:] 산술식 핵심구문나무를 만드는 함수는 다음과 같다. def parseexpr() : nextword + wordlist의 단어를 가지고 E 핵심구문나무를 만든다, 여기서 E ::= N V ( E1 O E2 ) O 는 "+" 또는 "-" wordlist와 nextword로 구성된 전역불변식은 항상 참이다 if nextword.isdigit() : # N? ans = nextword elif isvar(nextword) : # V? ans = nextword 23

25 elif nextword == "(" : # ( E1 O E2 )? tree1 = parseexpr() op = nextword if op == "+" or op == "-" : tree2 = parseexpr() if nextword == ")" : ans = [op, tree1, tree2] error("missing )") error("missing operator") error("illegal symbol to start an expression") return ans def isvar(word) : word가 합법적인 변수이름인지 확인 KEYWORDS = ("print", "while", "end") ans = ( word.isalpha() and not(word in KEYWORDS) ) return ans def error(message) : 오류메시지를 프린트하고 파싱을 종료 print("parse error: " + message) print(nextword, wordlist) raise Exception parseexpr 함수는 문법규칙을 사용하여 다음에 처리할 입력 단어인 nextword에 대해서 어 떠한 유형의 핵심구문나무를 만들지 결정하기 위해서 적절한 확인 절차를 거친다. Expression 의 3가지 종류의 문법규칙에서 맨 앞에 있는 단어들이 서로 구별되게 만든건 우연의 일치는 아니다. 어떤 나무를 만들지 바로 결정할 수 있게 해주어야 별 문제없이 파싱을 한다. 다음의 전역 변수와 main 함수가 전체 파싱 작업을 총지휘한다. # 전역 불변식: nextword + wordlist == 처리할 토큰 24

26 nextword = "" # 다음 토큰 wordlist = [] # 토큰 리스트 EOF = "!" # 토큰 리스트의 끝을 표시하는 토큰 def main() : global wordlist # 입력 텍스트를 읽고, 단어 단위로 쪼개서, wordlist에 나열하여 붙인다. text = input("type an arithmetic expression: ") wordlist = scan(text) # 파싱을 한다. tree = parseexpr() print(tree) if nextword!= EOF : error("there are extra words") 4.3 파싱: 명령문의 핵심구문나무 만들기 앞에서 작성한 함수를 이용하여 미니명령언어의 파서를 만들 수 있다. 사용하는 기술도 대동소 이하다. def parsecommand() : nextword + wordlist의 토큰을 가지고 Command 핵심구문나무를 만든다, 여기서 C ::= V = E print V while E : CL end wordlist와 nextword로 된 전역 불변식은 항상 참이다. if nextword == "print" : # print 변수? if isvar(nextword) : ans = ["print", nextword] error("expected var") elif nextword == "while" : # while E : CL end? exprtree = parseexpr() if nextword == ":" : 25

27 error("missing :") cmdlisttree = parsecmdlist() if nextword == "end" : ans = ["while", exprtree, cmdlisttree] error("missing end") elif isvar(nextword) : # V = E? v = nextword if nextword == "=" : exprtree = parseexpr() ans = ["=", v, exprtree] error("missing =") # 오류 -- 없는명령 error("bad word to start a command") return ans 다음은 CommandList에나열된명령을모아서처리하는함수이다. def parsecmdlist() : nextword + wordlist의단어를가지고 CommandList 핵심구문나무를만든다, 여기서 CL ::= C C ; CL 즉, 하나이상의 C 가 ; 로분리되어있음 wordlist와 nextword로된전역불변식은항상참이다. anslist = [ parsecommand() ] # 첫명령파싱 while nextword == ";" : # 다른명령수집 anslist.append( parsecommand() ) return anslist 그리고다음의 main 함수가전체파싱작업을총지휘한다. def main() : 26

28 입력 미니명령언어 프로그램을 읽고 핵심구문나무를 만든다, 여기서 P ::= CL 전역 불변식이 참이 되게 wordlist와 nextword 초기화 global wordlist text = input("type the program: ") wordlist = scan(text) # assert: 전역불변식 만족 tree = parsecmdlist() # assert: tree == text 전체에 해당하는 핵심구문나무 print(tree) if nextword!= EOF : error("there are extra words") 지금까지 살펴본 방식으로 하는 파싱을 하향식 예측 파싱top-down predictive parsing 이라고 도 한다. 왜냐하면 나무의 맨꼭대기 뿌리에서부터 아래 잎새쪽으로 내려오면서 핵심구문나무를 구축하고, 입력 프로그램에서 토큰을 하나씩 보아도 구문구조를 정확히 예측할 수 있기 때문이 다. 이 기술로 파싱을 성공적으로 하기 위해서는 입력 프로그램의 정확한 장소에 항상 정확한 수의 키워드와 괄호가 있어야 한다. 파싱이론parsing theory은 문법규칙과 파서의 작성방법에 대한 학문이다. 5. 이 기술을 배워야 하는 이유 프로그래밍언어를 사용하려면 문법 규칙을 숙지하여 문법에 맞는 프로그램을 짤 수 있어야 한다. 게다가 짜는 프로그램의 의미와 프로그램이 무엇을 하려하는지도 알아야 한다. 대부분의 프로그래밍 언어는 딱딱한 말로 쓰여진 매뉴얼(참고서)을 제공한다. 운이 좋으면 예제도 곁들 여 설명해준다. 문서가 잘 작성되어 있는 경우에는 언어의 문구가 어떤 의미인지 바로 이해할 수 있지만, 때로는 이 장에서 보여준 것과 같은 정의용 인터프리터definitional interpreter를 들 여다 봐야하는 이해가 가는 경우도 있다. 살다보면 필요에 의해서 프로그래밍 언어를 자신이 직접 설계해야 하는 경우도 생긴다. 사실, 소프트웨어를 설계할 때마다 이런 요구에 맞닥뜨리 게 되는게 현실이다. 왜냐하면, 소프트웨어에 주어지는 입력은 어떤 일정한 순서로 구문구조를 지키며 주어지기 때문이다. 소프트웨어를 사용하는 사람은 그 소프트웨어와 의사소통(교류) 하기 위한 입력 언어에 대한 (문법)규칙을 알아야 한다. 경우에 따라서 그 문법규칙은 마우스를 드래그하고 클릭하는 정해진 일정 순서일 수도 있다. 일종의 수화언어인 셈이다. 하지만 프로그램에 어떤 문구를 말하고(입력하고) 싶으면, 단어와 문구와 문장으로 구성 된 입력 언어input language가 필요한다. 이러한 언어는 어떤 모습이어야 할까? 어떤 연산자, 데이터, 제어장치가 필요할까? 소프트웨어를 설계하는 경우에는 그 언어를 설계해야 하고, 그 27

29 언어를처리할파서와인터프리터를작성해야한다. 이것이바로이과목에서프로그래밍언어의구문과의미를기술하고이해하는방법을반드시배워야하는이유이다. 특정분야 ( 항공학, 통신학, 문서처리, 데이터베이스, 게임등 ) 에특화된문제를해결하기위하여설계된프로그래밍언어는그분야에딱맞는연산을할수있는기능이있어야하고, 그분야의계산유형에적합한데이터및제어구조를갖춰야한다. 특정분야에맞추어서설계된언어를도메인특화프로그래밍언어domain-specific programming language라고한다. 이강의의끝자락에서그러한언어를설계하는기본기술을배울것이다. 그러고보니, BNF 문법표기법도파서를작성하기위한특수목적프로그래밍언어의일종이다! Yacc, Bison, Antlr 등의파서자동생성프로그램은문법규칙정의를입력으로읽어서파서코드를자동으로생성해준다. 따라서현실적으로문법규칙작성을완료하면이미파서작성은완료된것으로보아도무방한것이다. 연습문제 1. 본격적인인터프리터작성을위한머리 + 몸풀기숙제 (a) 앞에서공부한미니명령언어인터프리터를돌려보자. 미니명령언어프로그램파일을읽어서파싱한후실행해야한다. 교재에나오는예제를돌려보자. 파서는 PLY로자동생성한파서를사용해야한다. (b) 미니명령언어다음과같이확장하여인터프리터를구현해보자. 산술식 (Expression에는 *( 곱셈 ), /( 정수나눗셈, 몫구하기 ), 단항 -( 부호바꿈 ) 를다음과같이추가한다. E ::=... ( E1 * E2 ) ( E1 / E2 ) - E 명령문Command에는다음과같이조건문과입력문을추가한다. C ::=... if E then CL1 else CL2 end input V 조건문의의미 : E의계산결과가 0이아니면 CL1을실행하고, 0이면 CL2를실행한다. 입력문의의미 : 실행창에서사용자입력을문자열로받아서정수로바꾸어변수 V에저장한다. (Python의 input() 명령으로구현하면됨 ) (c) 미니명령언어로 입력받은정수의계승 (factorial) 구하여화면에프린트하는프로그램 을짜서인터프리터로실행해보자. (d) 미니명령언어로 입력받은두정수의최대공약수 (gcd) 구하여화면에프린트하는프로그램 을짜서인터프리터로실행해보자. 2. 1번문제로갈증이해소되지않으면내친김에미니명령언어의컴파일러도확장해봅시다. 3. 2번문제로만든컴파일러가컴파일한바이트코드를실행할가상머신 ( 바이트코드인터프리터 ) 를만들어봅시다. 28

30 4. 파라미터없는프로시저를다음과같은구문으로추가해보자. C ::=... proc I : C call I 인터프리터에서는새로정의한프로시저의몸체를이름등록부에저장한다. ( 즉, proc I: C 의의미는 I = C 의의미와비슷하다.) 그러면 call I 의의미는무엇일까? 구현해보자. 29

SIGPLwinterschool2012

SIGPLwinterschool2012 1994 1992 2001 2008 2002 Semantics Engineering with PLT Redex Matthias Felleisen, Robert Bruce Findler and Matthew Flatt 2009 Text David A. Schmidt EXPRESSION E ::= N ( E1 O E2 ) OPERATOR O ::=

More information

slide2

slide2 Program P ::= CL CommandList CL ::= C C ; CL Command C ::= L = E while E : CL end print L Expression E ::= N ( E + E ) L &L LefthandSide L ::= I *L Variable I ::= Numeral N ::=

More information

Microsoft PowerPoint - chap02-C프로그램시작하기.pptx

Microsoft PowerPoint - chap02-C프로그램시작하기.pptx #include int main(void) { int num; printf( Please enter an integer "); scanf("%d", &num); if ( num < 0 ) printf("is negative.\n"); printf("num = %d\n", num); return 0; } 1 학습목표 을 작성하면서 C 프로그램의

More information

Microsoft PowerPoint - chap01-C언어개요.pptx

Microsoft PowerPoint - chap01-C언어개요.pptx #include int main(void) { int num; printf( Please enter an integer: "); scanf("%d", &num); if ( num < 0 ) printf("is negative.\n"); printf("num = %d\n", num); return 0; } 1 학습목표 프로그래밍의 기본 개념을

More information

Microsoft PowerPoint - chap05-제어문.pptx

Microsoft PowerPoint - chap05-제어문.pptx int num; printf( Please enter an integer: "); scanf("%d", &num); if ( num < 0 ) printf("is negative.\n"); printf("num = %d\n", num); 1 학습목표 제어문인,, 분기문에 대해 알아본다. 인 if와 switch의 사용 방법과 사용시 주의사항에 대해 알아본다.

More information

untitled

untitled 시스템소프트웨어 : 운영체제, 컴파일러, 어셈블러, 링커, 로더, 프로그래밍도구등 소프트웨어 응용소프트웨어 : 워드프로세서, 스프레드쉬트, 그래픽프로그램, 미디어재생기등 1 n ( x + x +... + ) 1 2 x n 00001111 10111111 01000101 11111000 00001111 10111111 01001101 11111000

More information

Microsoft PowerPoint - chap04-연산자.pptx

Microsoft PowerPoint - chap04-연산자.pptx int num; printf( Please enter an integer: "); scanf("%d", &num); if ( num < 0 ) printf("is negative.\n"); printf("num = %d\n", num); } 1 학습목표 수식의 개념과 연산자, 피연산자에 대해서 알아본다. C의 를 알아본다. 연산자의 우선 순위와 결합 방향에

More information

자연언어처리

자연언어처리 제 7 장파싱 파싱의개요 파싱 (Parsing) 입력문장의구조를분석하는과정 문법 (grammar) 언어에서허용되는문장의구조를정의하는체계 파싱기법 (parsing techniques) 문장의구조를문법에따라분석하는과정 차트파싱 (Chart Parsing) 2 문장의구조와트리 문장 : John ate the apple. Tree Representation List

More information

제4장 기본 의미구조 (Basic Semantics)

제4장  기본 의미구조 (Basic Semantics) 제 4 장블록및유효범위 Reading Chap. 5 숙대창병모 1 4.1 변수선언및유효범위 숙대창병모 2 변수선언과유효범위 변수선언 Declaration before Use! 대부분의언어에서변수는사용전에먼저선언해야한다. 변수의유효범위 (scope) 선언된변수가유효한 ( 사용될수있는 ) 프로그램내의범위 / 영역 변수이름뿐아니라함수등다른이름도생각해야한다. 정적유효범위

More information

OCW_C언어 기초

OCW_C언어 기초 초보프로그래머를위한 C 언어기초 4 장 : 연산자 2012 년 이은주 학습목표 수식의개념과연산자및피연산자에대한학습 C 의알아보기 연산자의우선순위와결합방향에대하여알아보기 2 목차 연산자의기본개념 수식 연산자와피연산자 산술연산자 / 증감연산자 관계연산자 / 논리연산자 비트연산자 / 대입연산자연산자의우선순위와결합방향 조건연산자 / 형변환연산자 연산자의우선순위 연산자의결합방향

More information

컴파일러

컴파일러 YACC 응용예 Desktop Calculator 7/23 Lex 입력 수식문법을위한 lex 입력 : calc.l %{ #include calc.tab.h" %} %% [0-9]+ return(number) [ \t] \n return(0) \+ return('+') \* return('*'). { printf("'%c': illegal character\n",

More information

슬라이드 1

슬라이드 1 Pairwise Tool & Pairwise Test NuSRS 200511305 김성규 200511306 김성훈 200614164 김효석 200611124 유성배 200518036 곡진화 2 PICT Pairwise Tool - PICT Microsoft 의 Command-line 기반의 Free Software www.pairwise.org 에서다운로드후설치

More information

슬라이드 1

슬라이드 1 -Part3- 제 4 장동적메모리할당과가변인 자 학습목차 4.1 동적메모리할당 4.1 동적메모리할당 4.1 동적메모리할당 배울내용 1 프로세스의메모리공간 2 동적메모리할당의필요성 4.1 동적메모리할당 (1/6) 프로세스의메모리구조 코드영역 : 프로그램실행코드, 함수들이저장되는영역 스택영역 : 매개변수, 지역변수, 중괄호 ( 블록 ) 내부에정의된변수들이저장되는영역

More information

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션 Chapter 06 반복문 01 반복문의필요성 02 for문 03 while문 04 do~while문 05 기타제어문 반복문의의미와필요성을이해한다. 대표적인반복문인 for 문, while 문, do~while 문의작성법을 알아본다. 1.1 반복문의필요성 반복문 동일한내용을반복하거나일정한규칙으로반복하는일을수행할때사용 프로그램을좀더간결하고실제적으로작성할수있음.

More information

EA0015: 컴파일러

EA0015: 컴파일러 5 Context-Free Grammar 무엇을공부하나? 앞에서배운 " 정규식 " 은언어의 " 어휘 (lexeme)" 를표현하는도구로사용되었다. 언어의 " 구문 (syntax)" 은 " 정규언어 " 의범위를벗어나기때문에 " 정규식 " 으로표현이불가능하다. 본장에서배우는 " 문맥자유문법 " 은언어의 " 구문 (syntax)" 을표현할수있는도구이다. 어떤 " 문맥자유문법

More information

금오공대 컴퓨터공학전공 강의자료

금오공대 컴퓨터공학전공 강의자료 C 프로그래밍프로젝트 Chap 14. 포인터와함수에대한이해 2013.10.09. 오병우 컴퓨터공학과 14-1 함수의인자로배열전달 기본적인인자의전달방식 값의복사에의한전달 val 10 a 10 11 Department of Computer Engineering 2 14-1 함수의인자로배열전달 배열의함수인자전달방식 배열이름 ( 배열주소, 포인터 ) 에의한전달 #include

More information

<322EBCF8C8AF28BFACBDC0B9AEC1A6292E687770>

<322EBCF8C8AF28BFACBDC0B9AEC1A6292E687770> 연습문제해답 5 4 3 2 1 0 함수의반환값 =15 5 4 3 2 1 0 함수의반환값 =95 10 7 4 1-2 함수의반환값 =3 1 2 3 4 5 연습문제해답 1. C 언어에서의배열에대하여다음중맞는것은? (1) 3차원이상의배열은불가능하다. (2) 배열의이름은포인터와같은역할을한다. (3) 배열의인덱스는 1에서부터시작한다. (4) 선언한다음, 실행도중에배열의크기를변경하는것이가능하다.

More information

비트와바이트 비트와바이트 비트 (Bit) : 2진수값하나 (0 또는 1) 를저장할수있는최소메모리공간 1비트 2비트 3비트... n비트 2^1 = 2개 2^2 = 4개 2^3 = 8개... 2^n 개 1 바이트는 8 비트 2 2

비트와바이트 비트와바이트 비트 (Bit) : 2진수값하나 (0 또는 1) 를저장할수있는최소메모리공간 1비트 2비트 3비트... n비트 2^1 = 2개 2^2 = 4개 2^3 = 8개... 2^n 개 1 바이트는 8 비트 2 2 비트연산자 1 1 비트와바이트 비트와바이트 비트 (Bit) : 2진수값하나 (0 또는 1) 를저장할수있는최소메모리공간 1비트 2비트 3비트... n비트 2^1 = 2개 2^2 = 4개 2^3 = 8개... 2^n 개 1 바이트는 8 비트 2 2 진수법! 2, 10, 16, 8! 2 : 0~1 ( )! 10 : 0~9 ( )! 16 : 0~9, 9 a, b,

More information

10 강. 쉘스크립트 l 쉘스크립트 Ÿ 쉘은명령어들을연속적으로실행하는인터프리터환경을제공 Ÿ 쉘스크립트는제어문과변수선언등이가능하며프로그래밍언어와유사 Ÿ 프로그래밍언어와스크립트언어 -프로그래밍언어를사용하는경우소스코드를컴파일하여실행가능한파일로만들어야함 -일반적으로실행파일은다

10 강. 쉘스크립트 l 쉘스크립트 Ÿ 쉘은명령어들을연속적으로실행하는인터프리터환경을제공 Ÿ 쉘스크립트는제어문과변수선언등이가능하며프로그래밍언어와유사 Ÿ 프로그래밍언어와스크립트언어 -프로그래밍언어를사용하는경우소스코드를컴파일하여실행가능한파일로만들어야함 -일반적으로실행파일은다 10 강. 쉘스크립트 쉘스크립트 쉘은명령어들을연속적으로실행하는인터프리터환경을제공 쉘스크립트는제어문과변수선언등이가능하며프로그래밍언어와유사 프로그래밍언어와스크립트언어 -프로그래밍언어를사용하는경우소스코드를컴파일하여실행가능한파일로만들어야함 -일반적으로실행파일은다른운영체제로이식되지않음 -스크립트언어를사용하면컴파일과정이없고인터프리터가소스파일에서명령문을판독하여각각의명령을수행

More information

<4D F736F F F696E74202D203137C0E55FBFACBDC0B9AEC1A6BCD6B7E7BCC72E707074>

<4D F736F F F696E74202D203137C0E55FBFACBDC0B9AEC1A6BCD6B7E7BCC72E707074> SIMATIC S7 Siemens AG 2004. All rights reserved. Date: 22.03.2006 File: PRO1_17E.1 차례... 2 심벌리스트... 3 Ch3 Ex2: 프로젝트생성...... 4 Ch3 Ex3: S7 프로그램삽입... 5 Ch3 Ex4: 표준라이브러리에서블록복사... 6 Ch4 Ex1: 실제구성을 PG 로업로드하고이름변경......

More information

금오공대 컴퓨터공학전공 강의자료

금오공대 컴퓨터공학전공 강의자료 C 프로그래밍프로젝트 Chap 13. 포인터와배열! 함께이해하기 2013.10.02. 오병우 컴퓨터공학과 13-1 포인터와배열의관계 Programming in C, 정재은저, 사이텍미디어. 9 장참조 ( 교재의 13-1 은읽지말것 ) 배열이름의정체 배열이름은 Compile 시의 Symbol 로서첫번째요소의주소값을나타낸다. Symbol 로서컴파일시에만유효함 실행시에는메모리에잡히지않음

More information

윈도우즈프로그래밍(1)

윈도우즈프로그래밍(1) 제어문 (2) For~Next 문 윈도우즈프로그래밍 (1) ( 신흥대학교컴퓨터정보계열 ) 2/17 Contents 학습목표 프로그램에서주어진특정문장을부분을일정횟수만큼반복해서실행하는문장으로 For~Next 문등의구조를이해하고활용할수있다. 내용 For~Next 문 다중 For 문 3/17 제어문 - FOR 문 반복문 : 프로그램에서주어진특정문장들을일정한횟수만큼반복해서실행하는문장

More information

17장 클래스와 메소드

17장 클래스와 메소드 17 장클래스와메소드 박창이 서울시립대학교통계학과 박창이 ( 서울시립대학교통계학과 ) 17 장클래스와메소드 1 / 18 학습내용 객체지향특징들객체출력 init 메소드 str 메소드연산자재정의타입기반의버전다형성 (polymorphism) 박창이 ( 서울시립대학교통계학과 ) 17 장클래스와메소드 2 / 18 객체지향특징들 객체지향프로그래밍의특징 프로그램은객체와함수정의로구성되며대부분의계산은객체에대한연산으로표현됨객체의정의는

More information

Semantic Consistency in Information Exchange

Semantic Consistency in Information Exchange 제 3 장시맨틱스 (Semantics) Reading Chap 13 숙대창병모 1 시맨틱스의필요성 프로그램의미의정확한이해 소프트웨어의정확한명세 소프트웨어시스템에대한검증혹은추론 컴파일러혹은해석기작성의기초 숙대창병모 2 3.1 Operational Semantics 숙대창병모 3 의미론의종류 Operational Semantics 프로그램의동작과정을정의 Denotational

More information

다른 JSP 페이지호출 forward() 메서드 - 하나의 JSP 페이지실행이끝나고다른 JSP 페이지를호출할때사용한다. 예 ) <% RequestDispatcher dispatcher = request.getrequestdispatcher(" 실행할페이지.jsp");

다른 JSP 페이지호출 forward() 메서드 - 하나의 JSP 페이지실행이끝나고다른 JSP 페이지를호출할때사용한다. 예 ) <% RequestDispatcher dispatcher = request.getrequestdispatcher( 실행할페이지.jsp); 다른 JSP 페이지호출 forward() 메서드 - 하나의 JSP 페이지실행이끝나고다른 JSP 페이지를호출할때사용한다. 예 ) RequestDispatcher dispatcher = request.getrequestdispatcher(" 실행할페이지.jsp"); dispatcher.forward(request, response); - 위의예에서와같이 RequestDispatcher

More information

C++ Programming

C++ Programming C++ Programming 연산자다중정의 Seo, Doo-okok clickseo@gmail.com http://www.clickseo.com 목 차 연산자다중정의 C++ 스타일의문자열 2 연산자다중정의 연산자다중정의 단항연산자다중정의 이항연산자다중정의 cin, cout 그리고 endl C++ 스타일의문자열 3 연산자다중정의 연산자다중정의 (Operator

More information

Visual Basic 반복문

Visual Basic 반복문 학습목표 반복문 For Next문, For Each Next문 Do Loop문, While End While문 구구단작성기로익히는반복문 2 5.1 반복문 5.2 구구단작성기로익히는반복문 3 반복문 주어진조건이만족하는동안또는주어진조건이만족할때까지일정구간의실행문을반복하기위해사용 For Next For Each Next Do Loop While Wend 4 For

More information

Microsoft PowerPoint - [2009] 02.pptx

Microsoft PowerPoint - [2009] 02.pptx 원시데이터유형과연산 원시데이터유형과연산 원시데이터유형과연산 숫자데이터유형 - 숫자데이터유형 원시데이터유형과연산 표준입출력함수 - printf 문 가장기본적인출력함수. (stdio.h) 문법 ) printf( Test printf. a = %d \n, a); printf( %d, %f, %c \n, a, b, c); #include #include

More information

<B3EDB9AEC0DBBCBAB9FD2E687770>

<B3EDB9AEC0DBBCBAB9FD2E687770> (1) 주제 의식의 원칙 논문은 주제 의식이 잘 드러나야 한다. 주제 의식은 논문을 쓰는 사람의 의도나 글의 목적 과 밀접한 관련이 있다. (2) 협력의 원칙 독자는 필자를 이해하려고 마음먹은 사람이다. 따라서 필자는 독자가 이해할 수 있는 말이 나 표현을 사용하여 독자의 노력에 협력해야 한다는 것이다. (3) 논리적 엄격성의 원칙 감정이나 독단적인 선언이

More information

[ 마이크로프로세서 1] 2 주차 3 차시. 포인터와구조체 2 주차 3 차시포인터와구조체 학습목표 1. C 언어에서가장어려운포인터와구조체를설명할수있다. 2. Call By Value 와 Call By Reference 를구분할수있다. 학습내용 1 : 함수 (Functi

[ 마이크로프로세서 1] 2 주차 3 차시. 포인터와구조체 2 주차 3 차시포인터와구조체 학습목표 1. C 언어에서가장어려운포인터와구조체를설명할수있다. 2. Call By Value 와 Call By Reference 를구분할수있다. 학습내용 1 : 함수 (Functi 2 주차 3 차시포인터와구조체 학습목표 1. C 언어에서가장어려운포인터와구조체를설명할수있다. 2. Call By Value 와 Call By Reference 를구분할수있다. 학습내용 1 : 함수 (Function) 1. 함수의개념 입력에대해적절한출력을발생시켜주는것 내가 ( 프로그래머 ) 작성한명령문을연산, 처리, 실행해주는부분 ( 모듈 ) 자체적으로실행되지않으며,

More information

설계란 무엇인가?

설계란 무엇인가? 금오공과대학교 C++ 프로그래밍 jhhwang@kumoh.ac.kr 컴퓨터공학과 황준하 5 강. 배열, 포인터, 참조목차 배열 포인터 C++ 메모리구조 주소연산자 포인터 포인터연산 배열과포인터 메모리동적할당 문자열 참조 1 /20 5 강. 배열, 포인터, 참조배열 배열 같은타입의변수여러개를하나의변수명으로처리 int Ary[10]; 총 10 개의변수 : Ary[0]~Ary[9]

More information

< E20C6DFBFFEBEEE20C0DBBCBAC0BB20C0A7C7D12043BEF0BEEE20492E707074>

< E20C6DFBFFEBEEE20C0DBBCBAC0BB20C0A7C7D12043BEF0BEEE20492E707074> Chap #2 펌웨어작성을위한 C 언어 I http://www.smartdisplay.co.kr 강의계획 Chap1. 강의계획및디지털논리이론 Chap2. 펌웨어작성을위한 C 언어 I Chap3. 펌웨어작성을위한 C 언어 II Chap4. AT89S52 메모리구조 Chap5. SD-52 보드구성과코드메모리프로그래밍방법 Chap6. 어드레스디코딩 ( 매핑 ) 과어셈블리어코딩방법

More information

학습목표 함수프로시저, 서브프로시저의의미를안다. 매개변수전달방식을학습한다. 함수를이용한프로그래밍한다. 2

학습목표 함수프로시저, 서브프로시저의의미를안다. 매개변수전달방식을학습한다. 함수를이용한프로그래밍한다. 2 학습목표 함수프로시저, 서브프로시저의의미를안다. 매개변수전달방식을학습한다. 함수를이용한프로그래밍한다. 2 6.1 함수프로시저 6.2 서브프로시저 6.3 매개변수의전달방식 6.4 함수를이용한프로그래밍 3 프로시저 (Procedure) 프로시저 (Procedure) 란무엇인가? 논리적으로묶여있는하나의처리단위 내장프로시저 이벤트프로시저, 속성프로시저, 메서드, 비주얼베이직내장함수등

More information

Microsoft PowerPoint - chap-03.pptx

Microsoft PowerPoint - chap-03.pptx 쉽게풀어쓴 C 언어 Express 제 3 장 C 프로그램구성요소 컴퓨터프로그래밍기초 이번장에서학습할내용 * 주석 * 변수, 상수 * 함수 * 문장 * 출력함수 printf() * 입력함수 scanf() * 산술연산 * 대입연산 이번장에서는 C프로그램을이루는구성요소들을살펴봅니다. 컴퓨터프로그래밍기초 2 일반적인프로그램의형태 데이터를받아서 ( 입력단계 ), 데이터를처리한후에

More information

Microsoft PowerPoint - C++ 5 .pptx

Microsoft PowerPoint - C++ 5 .pptx C++ 언어프로그래밍 한밭대학교전자. 제어공학과이승호교수 연산자중복 (operator overloading) 이란? 2 1. 연산자중복이란? 1) 기존에미리정의되어있는연산자 (+, -, /, * 등 ) 들을프로그래머의의도에맞도록새롭게정의하여사용할수있도록지원하는기능 2) 연산자를특정한기능을수행하도록재정의하여사용하면여러가지이점을가질수있음 3) 하나의기능이프로그래머의의도에따라바뀌어동작하는다형성

More information

4. #include <stdio.h> #include <stdlib.h> int main() { functiona(); } void functiona() { printf("hihi\n"); } warning: conflicting types for functiona

4. #include <stdio.h> #include <stdlib.h> int main() { functiona(); } void functiona() { printf(hihi\n); } warning: conflicting types for functiona 이름 : 학번 : A. True or False: 각각항목마다 True 인지 False 인지적으세요. 1. (Python:) randint 함수를사용하려면, random 모듈을 import 해야한다. 2. (Python:) '' (single quote) 는한글자를표현할때, (double quote) 는문자열을표현할때사용한다. B. 다음에러를수정하는방법을적으세요.

More information

Microsoft PowerPoint - chap06-1Array.ppt

Microsoft PowerPoint - chap06-1Array.ppt 2010-1 학기프로그래밍입문 (1) chapter 06-1 참고자료 배열 박종혁 Tel: 970-6702 Email: jhpark1@snut.ac.kr 한빛미디어 출처 : 뇌를자극하는 C프로그래밍, 한빛미디어 -1- 배열의선언과사용 같은형태의자료형이많이필요할때배열을사용하면효과적이다. 배열의선언 배열의사용 배열과반복문 배열의초기화 유연성있게배열다루기 한빛미디어

More information

OCW_C언어 기초

OCW_C언어 기초 초보프로그래머를위한 C 언어기초 2 장 : C 프로그램시작하기 2012 년 이은주 학습목표 을작성하면서 C 프로그램의구성요소 주석 (comment) 이란무엇인지알아보고, 주석을만드는방법 함수란무엇인지알아보고, C 프로그램에반드시필요한 main 함수 C 프로그램에서출력에사용되는 printf 함수 변수의개념과변수의값을입력받는데사용되는 scanf 함수 2 목차 프로그램코드

More information

C# Programming Guide - Types

C# Programming Guide - Types C# Programming Guide - Types 최도경 lifeisforu@wemade.com 이문서는 MSDN 의 Types 를요약하고보충한것입니다. http://msdn.microsoft.com/enus/library/ms173104(v=vs.100).aspx Types, Variables, and Values C# 은 type 에민감한언어이다. 모든

More information

Microsoft PowerPoint - Java7.pptx

Microsoft PowerPoint - Java7.pptx HPC & OT Lab. 1 HPC & OT Lab. 2 실습 7 주차 Jin-Ho, Jang M.S. Hanyang Univ. HPC&OT Lab. jinhoyo@nate.com HPC & OT Lab. 3 Component Structure 객체 (object) 생성개념을이해한다. 외부클래스에대한접근방법을이해한다. 접근제어자 (public & private)

More information

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션 Verilog: Finite State Machines CSED311 Lab03 Joonsung Kim, joonsung90@postech.ac.kr Finite State Machines Digital system design 시간에배운것과같습니다. Moore / Mealy machines Verilog 를이용해서어떻게구현할까? 2 Finite State

More information

Microsoft PowerPoint - chap06-2pointer.ppt

Microsoft PowerPoint - chap06-2pointer.ppt 2010-1 학기프로그래밍입문 (1) chapter 06-2 참고자료 포인터 박종혁 Tel: 970-6702 Email: jhpark1@snut.ac.kr 한빛미디어 출처 : 뇌를자극하는 C프로그래밍, 한빛미디어 -1- 포인터의정의와사용 변수를선언하는것은메모리에기억공간을할당하는것이며할당된이후에는변수명으로그기억공간을사용한다. 할당된기억공간을사용하는방법에는변수명외에메모리의실제주소값을사용하는것이다.

More information

Microsoft PowerPoint - semantics

Microsoft PowerPoint - semantics 제 3 장시맨틱스 (Semantics) Reading Chap 13 숙대창병모 Sep. 2007 1 3.1 Operational Semantics 숙대창병모 Sep. 2007 2 시맨틱스의필요성 프로그램의미의정확한이해 소프트웨어의정확한명세 소프트웨어시스템에대한검증혹은추론 컴파일러혹은해석기작성의기초 숙대창병모 Sep. 2007 3 의미론의종류 Operational

More information

RVC Robot Vaccum Cleaner

RVC Robot Vaccum Cleaner RVC Robot Vacuum 200810048 정재근 200811445 이성현 200811414 김연준 200812423 김준식 Statement of purpose Robot Vacuum (RVC) - An RVC automatically cleans and mops household surface. - It goes straight forward while

More information

Microsoft PowerPoint - CSharp-10-예외처리

Microsoft PowerPoint - CSharp-10-예외처리 10 장. 예외처리 예외처리개념 예외처리구문 사용자정의예외클래스와예외전파 순천향대학교컴퓨터학부이상정 1 예외처리개념 순천향대학교컴퓨터학부이상정 2 예외처리 오류 컴파일타임오류 (Compile-Time Error) 구문오류이기때문에컴파일러의구문오류메시지에의해쉽게교정 런타임오류 (Run-Time Error) 디버깅의절차를거치지않으면잡기어려운심각한오류 시스템에심각한문제를줄수도있다.

More information

<4D F736F F F696E74202D20C1A63036C0E520BCB1C5C3B0FA20B9DDBAB928B0ADC0C729205BC8A3C8AF20B8F0B5E55D>

<4D F736F F F696E74202D20C1A63036C0E520BCB1C5C3B0FA20B9DDBAB928B0ADC0C729205BC8A3C8AF20B8F0B5E55D> Power Java 제 6 장선택과반복 이번장에서학습할내용 조건문이란? if 문 if, else 문 중첩 if 문 switch 문 break문 continue문 지금까지는문장들이순차적으로실행된다고하였다. 하지만필요에따라서조건이만족되면문장의실행순서를변경할수있는기능이제공된다. 3 가지의제어구조 조건문 문장이실행되는순서에영향을주는문장 조건에따라서여러개의실행경로가운데하나를선택

More information

C++ Programming

C++ Programming C++ Programming 예외처리 Seo, Doo-okok clickseo@gmail.com http://www.clickseo.com 목 차 예외처리 2 예외처리 예외처리 C++ 의예외처리 예외클래스와객체 3 예외처리 예외를처리하지않는프로그램 int main() int a, b; cout > a >> b; cout

More information

Microsoft PowerPoint - Lesson2.pptx

Microsoft PowerPoint - Lesson2.pptx Computer Engineering g Programming g 2 제 3 장 C 프로그래밍구성요소 Lecturer: JUNBEOM YOO jbyoo@konkuk.ac.kr 본강의자료는생능출판사의 PPT 강의자료 를기반으로제작되었습니다. 이번장에서학습할내용 * 주석 * 변수, 상수 * 함수 * 문장 * 출력함수 printf() * 입력함수 scanf() *

More information

Infinity(∞) Strategy

Infinity(∞) Strategy 반복제어 표월성 passwd74@cherub.sungkyul.edu 개요 for() 문 break문과 continue문 while문 do-while문 for() 문 for() 문형식 for( 표현식1; 표현식2; 표현식3) 여러문장들 ; 표현식 1 : 초기화 (1 번만수행 ) 표현식 2 : 반복문수행조건 ( 없으면무한반복 ) 표현식 3 : 반복문수행횟수 for()

More information

A Dynamic Grid Services Deployment Mechanism for On-Demand Resource Provisioning

A Dynamic Grid Services Deployment Mechanism for On-Demand Resource Provisioning C Programming Practice (II) Contents 배열 문자와문자열 구조체 포인터와메모리관리 구조체 2/17 배열 (Array) (1/2) 배열 동일한자료형을가지고있으며같은이름으로참조되는변수들의집합 배열의크기는반드시상수이어야한다. type var_name[size]; 예 ) int myarray[5] 배열의원소는원소의번호를 0 부터시작하는색인을사용

More information

Microsoft PowerPoint - chap12-고급기능.pptx

Microsoft PowerPoint - chap12-고급기능.pptx #include int main(void) int num; printf( Please enter an integer: "); scanf("%d", &num); if ( num < 0 ) printf("is negative.\n"); printf("num = %d\n", num); return 0; 1 학습목표 가 제공하는 매크로 상수와 매크로

More information

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션 System Software Experiment 1 Lecture 5 - Array Spring 2019 Hwansoo Han (hhan@skku.edu) Advanced Research on Compilers and Systems, ARCS LAB Sungkyunkwan University http://arcs.skku.edu/ 1 배열 (Array) 동일한타입의데이터가여러개저장되어있는저장장소

More information

Observational Determinism for Concurrent Program Security

Observational Determinism for  Concurrent Program Security 웹응용프로그램보안취약성 분석기구현 소프트웨어무결점센터 Workshop 2010. 8. 25 한국항공대학교, 안준선 1 소개 관련연구 Outline Input Validation Vulnerability 연구내용 Abstract Domain for Input Validation Implementation of Vulnerability Analyzer 기존연구

More information

EA0015: 컴파일러

EA0015: 컴파일러 4 Flex 무엇을공부하나? " 어휘분석기 (lexical analyzer 혹은 scanner)" 는다음과같은과정을거쳐서프로그램된다. 1 토큰정의, 2 정규식으로표현, 3 NFA로변환, 4 DFA로변환, 5 프로그램작성 위과정은앞장에서배운바와같이기계적으로이루어질수있다. "Flex(Fast Lexical Analyzer)" 는컴파일러개발자를위하여위과정을자동으로처리해주는도구이다.

More information

PowerPoint Presentation

PowerPoint Presentation Lecture 01: Compiler Overview Kwang-Man Ko kkmam@sangji.ac.kr, compiler.sangji.ac.kr Department of Computer Engineering Sang Ji University 2019 강의정보 교과목명 : 컴파일러 개설학과 : 컴퓨터공학과 4학년 학점및시수 : 3학점 3시간 강의시간 :

More information

Tcl의 문법

Tcl의 문법 월, 01/28/2008-20:50 admin 은 상당히 단순하고, 커맨드의 인자를 스페이스(공백)로 단락을 짓고 나열하는 정도입니다. command arg1 arg2 arg3... 한행에 여러개의 커맨드를 나열할때는, 세미콜론( ; )으로 구분을 짓습니다. command arg1 arg2 arg3... ; command arg1 arg2 arg3... 한행이

More information

Microsoft Word - PLC제어응용-2차시.doc

Microsoft Word - PLC제어응용-2차시.doc 과정명 PLC 제어응용차시명 2 차시. 접점명령 학습목표 1. 연산개시명령 (LOAD, LOAD NOT) 에대하여설명할수있다. 2. 직렬접속명령 (AND, AND NOT) 에대하여설명할수있다. 3. 병렬접속명령 (OR, OR NOT) 에대하여설명할수있다. 4.PLC의접점명령을가지고간단한프로그램을작성할수있다. 학습내용 1. 연산개시명령 1) 연산개시명령 (LOAD,

More information

목차 포인터의개요 배열과포인터 포인터의구조 실무응용예제 C 2

목차 포인터의개요 배열과포인터 포인터의구조 실무응용예제 C 2 제 8 장. 포인터 목차 포인터의개요 배열과포인터 포인터의구조 실무응용예제 C 2 포인터의개요 포인터란? 주소를변수로다루기위한주소변수 메모리의기억공간을변수로써사용하는것 포인터변수란데이터변수가저장되는주소의값을 변수로취급하기위한변수 C 3 포인터의개요 포인터변수및초기화 * 변수데이터의데이터형과같은데이터형을포인터 변수의데이터형으로선언 일반변수와포인터변수를구별하기위해

More information

Microsoft PowerPoint - ch09 - 연결형리스트, Stack, Queue와 응용 pm0100

Microsoft PowerPoint - ch09 - 연결형리스트, Stack, Queue와 응용 pm0100 2015-1 프로그래밍언어 9. 연결형리스트, Stack, Queue 2015 년 5 월 4 일 교수김영탁 영남대학교공과대학정보통신공학과 (Tel : +82-53-810-2497; Fax : +82-53-810-4742 http://antl.yu.ac.kr/; E-mail : ytkim@yu.ac.kr) 연결리스트 (Linked List) 연결리스트연산 Stack

More information

슬라이드 1

슬라이드 1 마이크로컨트롤러 2 (MicroController2) 2 강 ATmega128 의 external interrupt 이귀형교수님 학습목표 interrupt 란무엇인가? 기본개념을알아본다. interrupt 중에서가장사용하기쉬운 external interrupt 의사용방법을학습한다. 1. Interrupt 는왜필요할까? 함수동작을추가하여실행시키려면? //***

More information

쉽게

쉽게 Power Java 제 4 장자바프로그래밍기초 이번장에서학습할내용 자바프로그램에대한기초사항을학습 자세한내용들은추후에. Hello.java 프로그램 주석 주석 (comment): 프로그램에대한설명을적어넣은것 3 가지타입의주석 클래스 클래스 (class): 객체를만드는설계도 ( 추후에학습 ) 자바프로그램은클래스들로구성된다. 그림 4-1. 자바프로그램의구조 클래스정의

More information

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션 Web server porting 2 Jo, Heeseung Web 을이용한 LED 제어 Web 을이용한 LED 제어프로그램 web 에서데이터를전송받아타겟보드의 LED 를조작하는프로그램을작성하기위해다음과같은소스파일을생성 2 Web 을이용한 LED 제어 LED 제어프로그램작성 8bitled.html 파일을작성 root@ubuntu:/working/web# vi

More information

Microsoft PowerPoint 웹 연동 기술.pptx

Microsoft PowerPoint 웹 연동 기술.pptx 웹프로그래밍및실습 ( g & Practice) 문양세강원대학교 IT 대학컴퓨터과학전공 URL 분석 (1/2) URL (Uniform Resource Locator) 프로토콜, 호스트, 포트, 경로, 비밀번호, User 등의정보를포함 예. http://kim:3759@www.hostname.com:80/doc/index.html URL 을속성별로분리하고자할경우

More information

PowerPoint Presentation

PowerPoint Presentation 객체지향프로그래밍 클래스, 객체, 메소드 ( 실습 ) 손시운 ssw5176@kangwon.ac.kr 예제 1. 필드만있는클래스 텔레비젼 2 예제 1. 필드만있는클래스 3 예제 2. 여러개의객체생성하기 4 5 예제 3. 메소드가추가된클래스 public class Television { int channel; // 채널번호 int volume; // 볼륨 boolean

More information

C 언어 프로그래밊 과제 풀이

C 언어 프로그래밊 과제 풀이 과제풀이 (1) 홀수 / 짝수판정 (1) /* 20094123 홍길동 20100324 */ /* even_or_odd.c */ /* 정수를입력받아홀수인지짝수인지판정하는프로그램 */ int number; printf(" 정수를입력하시오 => "); scanf("%d", &number); 확인 주석문 가필요한이유 printf 와 scanf 쌍

More information

ThisJava ..

ThisJava .. 자바언어에정확한타입을추가한 ThisJava 소개 나현익, 류석영 프로그래밍언어연구실 KAIST 2014 년 1 월 14 일 나현익, 류석영 자바언어에정확한타입을추가한 ThisJava 소개 1/29 APLAS 2013 나현익, 류석영 자바 언어에 정확한 타입을 추가한 ThisJava 소개 2/29 실제로부딪힌문제 자바스크립트프로그램분석을위한요약도메인 나현익,

More information

SNU =10100 =minusby by1000 ÇÁto0.03exÇÁto0.03exÇÁ=10100 =minusby by1000 ·Îto0.03ex·Îto0.03ex·Î=10100 =minusby by1000 ±×to0.

SNU =10100 =minusby by1000 ÇÁto0.03exÇÁto0.03exÇÁ=10100 =minusby by1000 ·Îto0.03ex·Îto0.03ex·Î=10100 =minusby by1000 ±×to0. 차례 SNU 4190.210 프로그래밍원리 (Principles of Programming) Part II Prof. Kwangkeun Yi 다음 데이타구현하기 (data implementation) 새로운타입의데이타 / 값구현하기 기억하는가 : 타입들 (types) τ ::= ι primitive type τ τ pair(product) type τ + τ

More information

Microsoft PowerPoint - 3ÀÏ°_º¯¼ö¿Í »ó¼ö.ppt

Microsoft PowerPoint - 3ÀÏ°_º¯¼ö¿Í »ó¼ö.ppt 변수와상수 1 변수란무엇인가? 변수 : 정보 (data) 를저장하는컴퓨터내의특정위치 ( 임시저장공간 ) 메모리, register 메모리주소 101 번지 102 번지 변수의크기에따라 주로 byte 단위 메모리 2 기본적인변수형및변수의크기 변수의크기 해당컴퓨터에서는항상일정 컴퓨터마다다를수있음 short

More information

Microsoft PowerPoint - PL_03-04.pptx

Microsoft PowerPoint - PL_03-04.pptx Copyright, 2011 H. Y. Kwak, Jeju National University. Kwak, Ho-Young http://cybertec.cheju.ac.kr Contents 1 프로그래밍 언어 소개 2 언어의 변천 3 프로그래밍 언어 설계 4 프로그래밍 언어의 구문과 구현 기법 5 6 7 컴파일러 개요 변수, 바인딩, 식 및 제어문 자료형 8

More information

C 프로그램의 기본

C 프로그램의 기본 C 프로그램의기본 목차 C 프로그램의구성요소 주석 main 함수 출력 C 언어의입력과출력 변수 printf 함수 scanf 함수 2 예제 2-1 : 첫번째 C 프로그램 3 2.1.1 주석 주석의용도 프로그램에대한설명 프로그램전체에대한대략적인정보를제공 프로그램수행에영향을미치지않는요소 4 2.1.1 주석 주석사용방법 /* 과 */ 을이용한여러줄주석 // 을이용한한줄주석

More information

KNK_C03_Expr_kor

KNK_C03_Expr_kor Expressions adopted from KNK C Programming : A Modern Approach Operators 연산자 C 는표현식을많이사용함 표현식은변수와상수와연산자로구성됨 C 에는연산자의종류가다양함 1. arithmetic operators ( 수식연산자 ) 2. relational operators ( 관계연산자 ) 3. logical

More information

0. 표지에이름과학번을적으시오. (6) 1. 변수 x, y 가 integer type 이라가정하고다음빈칸에 x 와 y 의계산결과값을적으시오. (5) x = (3 + 7) * 6; x = 60 x = (12 + 6) / 2 * 3; x = 27 x = 3 * (8 / 4

0. 표지에이름과학번을적으시오. (6) 1. 변수 x, y 가 integer type 이라가정하고다음빈칸에 x 와 y 의계산결과값을적으시오. (5) x = (3 + 7) * 6; x = 60 x = (12 + 6) / 2 * 3; x = 27 x = 3 * (8 / 4 Introduction to software design 2012-1 Final 2012.06.13 16:00-18:00 Student ID: Name: - 1 - 0. 표지에이름과학번을적으시오. (6) 1. 변수 x, y 가 integer type 이라가정하고다음빈칸에 x 와 y 의계산결과값을적으시오. (5) x = (3 + 7) * 6; x = 60 x

More information

쉽게 풀어쓴 C 프로그래밍

쉽게 풀어쓴 C 프로그래밍 두근두근 파이썬수업 4 장자료의종류에는어떤것들이있나요? 이번장에서만들프로그램 (1) 터틀그래픽의거북이와인사하는프로그램을작성해보자. Run Python (2) 여러개의색상을리스트에저장하였다가하나씩꺼내서원들을그려보자 Run Python 파이썬에서사용할수있는자료의종류 파이썬과자료형 변수에어떤종류의자료도저장할수있다 x = 10 print("x =", x) x = 3.14

More information

슬라이드 1

슬라이드 1 3 장. 선행자료 어휘원소, 연산자와 C 시스템 박종혁교수 UCS Lab Tel: 970-6702 Email: jhpark1@seoultech.ac.kr SeoulTech 2019-1 st 프로그래밍입문 (1) 2 목차 1.1 문자와어휘원소 1.2 구문법칙 1.3 주석 1.4 키워드 (Keyword) 1.5 식별자 (Identifier) 1.6 상수 (Integer,

More information

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션 Chapter 08 함수 01 함수의개요 02 함수사용하기 03 함수와배열 04 재귀함수 함수의필요성을인식한다. 함수를정의, 선언, 호출하는방법을알아본다. 배열을함수의인자로전달하는방법과사용시장점을알아본다. 재귀호출로해결할수있는문제의특징과해결방법을알아본다. 1.1 함수의정의와기능 함수 (function) 특별한기능을수행하는것 여러가지함수의예 Page 4 1.2

More information

학습목차 2.1 다차원배열이란 차원배열의주소와값의참조

학습목차 2.1 다차원배열이란 차원배열의주소와값의참조 - Part2- 제 2 장다차원배열이란무엇인가 학습목차 2.1 다차원배열이란 2. 2 2 차원배열의주소와값의참조 2.1 다차원배열이란 2.1 다차원배열이란 (1/14) 다차원배열 : 2 차원이상의배열을의미 1 차원배열과다차원배열의비교 1 차원배열 int array [12] 행 2 차원배열 int array [4][3] 행 열 3 차원배열 int array [2][2][3]

More information

SNU =10100 =minusby by1000 ÇÁto0.03exÇÁto0.03exÇÁ=10100 =minusby by1000 ·Îto0.03ex·Îto0.03ex·Î=10100 =minusby by1000

SNU =10100 =minusby by1000 ÇÁto0.03exÇÁto0.03exÇÁ=10100 =minusby by1000 ·Îto0.03ex·Îto0.03ex·Î=10100 =minusby by1000 SNU 4190.210 프로그래밍 원리 (Principles of Programming) Part III Prof. Kwangkeun Yi 차례 1 값중심 vs 물건중심프로그래밍 (applicative vs imperative programming) 2 프로그램의이해 : 환경과메모리 (environment & memory) 다음 1 값중심 vs 물건중심프로그래밍

More information

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션 Chapter 15 고급프로그램을 만들기위한 C... 1. main( ) 함수의숨겨진이야기 2. 헤더파일 3. 전처리문과예약어 1. main( ) 함수의숨겨진이야기 main( ) 함수의매개변수 [ 기본 14-1] main( ) 함수에매개변수를사용한예 1 01 #include 02 03 int main(int argc, char* argv[])

More information

게시판 스팸 실시간 차단 시스템

게시판 스팸 실시간 차단 시스템 오픈 API 2014. 11-1 - 목 차 1. 스팸지수측정요청프로토콜 3 1.1 스팸지수측정요청프로토콜개요 3 1.2 스팸지수측정요청방법 3 2. 게시판스팸차단도구오픈 API 활용 5 2.1 PHP 5 2.1.1 차단도구오픈 API 적용방법 5 2.1.2 차단도구오픈 API 스팸지수측정요청 5 2.1.3 차단도구오픈 API 스팸지수측정결과값 5 2.2 JSP

More information

PowerPoint Presentation

PowerPoint Presentation #include int main(void) { int num; printf( Please enter an integer: "); scanf("%d", &num); if ( num < 0 ) printf("is negative.\n"); printf("num = %d\n", num); return 0; } 1 학습목표 을작성하면서 C 프로그램의구성요소에대하여알아본다.

More information

SNU =10100 =minusby by1000 ÇÁto0.03exÇÁto0.03exÇÁ=10100 =minusby by1000 ·Îto0.03ex·Îto0.03ex·Î=10100 =minusby by1000 ±×to0.

SNU =10100 =minusby by1000 ÇÁto0.03exÇÁto0.03exÇÁ=10100 =minusby by1000 ·Îto0.03ex·Îto0.03ex·Î=10100 =minusby by1000 ±×to0. 프로그래밍 원리 (Principles of Programming) Part II Prof. Kwangkeun Yi 차례 1 데이타구현하기 (data implementation) 2 데이터속구현감추기 (data abstraction) 3 여러구현동시지원하기 (multiple implemenations) 4 각계층별로속구현감추기 (data abstraction

More information

chap 5: Trees

chap 5: Trees 5. Threaded Binary Tree 기본개념 n 개의노드를갖는이진트리에는 2n 개의링크가존재 2n 개의링크중에 n + 1 개의링크값은 null Null 링크를다른노드에대한포인터로대체 Threads Thread 의이용 ptr left_child = NULL 일경우, ptr left_child 를 ptr 의 inorder predecessor 를가리키도록변경

More information

Microsoft PowerPoint - ch07 - 포인터 pm0415

Microsoft PowerPoint - ch07 - 포인터 pm0415 2015-1 프로그래밍언어 7. 포인터 (Pointer), 동적메모리할당 2015 년 4 월 4 일 교수김영탁 영남대학교공과대학정보통신공학과 (Tel : +82-53-810-2497; Fax : +82-53-810-4742 http://antl.yu.ac.kr/; E-mail : ytkim@yu.ac.kr) Outline 포인터 (pointer) 란? 간접참조연산자

More information

gnu-lee-oop-kor-lec06-3-chap7

gnu-lee-oop-kor-lec06-3-chap7 어서와 Java 는처음이지! 제 7 장상속 Super 키워드 상속과생성자 상속과다형성 서브클래스의객체가생성될때, 서브클래스의생성자만호출될까? 아니면수퍼클래스의생성자도호출되는가? class Base{ public Base(String msg) { System.out.println("Base() 생성자 "); ; class Derived extends Base

More information

<342EBAAFBCF620B9D720B9D9C0CEB5F92E687770>

<342EBAAFBCF620B9D720B9D9C0CEB5F92E687770> 예약어(reserved word) : 프로그래밍 언어에서 특별한 용도로 사용하고자 미리 지정한 단어 - 프로그램의 구성요소를 구별하게 해주는 역할 => 라벨, 서브 프로그램 이름, 변수에 연관되어 다른 변수나 서브 프로그램 등과 구별 - 식별자의 최대길이는 언어마다 각각 다르며 허용길이를 넘어서면 나머지 문자열은 무시됨 - FORTRAN, COBOL, HTML

More information

이 장에서 사용되는 MATLAB 명령어들은 비교적 복잡하므로 MATLAB 창에서 명령어를 직접 입력하지 않고 확장자가 m 인 text 파일을 작성하여 실행을 한다

이 장에서 사용되는 MATLAB 명령어들은 비교적 복잡하므로 MATLAB 창에서 명령어를 직접 입력하지 않고 확장자가 m 인 text 파일을 작성하여 실행을 한다 이장에서사용되는 MATLAB 명령어들은비교적복잡하므로 MATLAB 창에서명령어를직접입력하지않고확장자가 m 인 text 파일을작성하여실행을한다. 즉, test.m 과같은 text 파일을만들어서 MATLAB 프로그램을작성한후실행을한다. 이와같이하면길고복잡한 MATLAB 프로그램을작성하여실행할수있고, 오류가발생하거나수정이필요한경우손쉽게수정하여실행할수있는장점이있으며,

More information

프로그래밍개론및실습 2015 년 2 학기프로그래밍개론및실습과목으로본내용은강의교재인생능출판사, 두근두근 C 언어수업, 천인국지음을발췌수정하였음

프로그래밍개론및실습 2015 년 2 학기프로그래밍개론및실습과목으로본내용은강의교재인생능출판사, 두근두근 C 언어수업, 천인국지음을발췌수정하였음 프로그래밍개론및실습 2015 년 2 학기프로그래밍개론및실습과목으로본내용은강의교재인생능출판사, 두근두근 C 언어수업, 천인국지음을발췌수정하였음 CHAPTER 9 둘중하나선택하기 관계연산자 두개의피연산자를비교하는연산자 결과값은참 (1) 아니면거짓 (0) x == y x 와 y 의값이같은지비교한다. 관계연산자 연산자 의미 x == y x와 y가같은가? x!= y

More information

구조체정의 자료형 (data types) 기본자료형 (primitive data types) : char, int, float 등과같이 C 언어에서제공하는자료형. 사용자정의자료형 (user-defined data types) : 다양한자료형을묶어서목적에따라새로운자료형을

구조체정의 자료형 (data types) 기본자료형 (primitive data types) : char, int, float 등과같이 C 언어에서제공하는자료형. 사용자정의자료형 (user-defined data types) : 다양한자료형을묶어서목적에따라새로운자료형을 (structures) 구조체정의 구조체선언및초기화 구조체배열 구조체포인터 구조체배열과포인터 구조체와함수 중첩된구조체 구조체동적할당 공용체 (union) 1 구조체정의 자료형 (data types) 기본자료형 (primitive data types) : char, int, float 등과같이 C 언어에서제공하는자료형. 사용자정의자료형 (user-defined

More information

Microsoft PowerPoint - chap03-변수와데이터형.pptx

Microsoft PowerPoint - chap03-변수와데이터형.pptx #include int main(void) { int num; printf( Please enter an integer: "); scanf("%d", &num); if ( num < 0 ) printf("is negative.\n"); printf("num %d\n", num); return 0; } 1 학습목표 의 개념에 대해 알아본다.

More information

Microsoft PowerPoint - KNK_C03_Expr_kor

Microsoft PowerPoint - KNK_C03_Expr_kor Expressions adopted from KNK C Programming : A Modern Approach Operators 연산자 C 는표현식을많이사용함 표현식은변수와상수와연산자로구성됨 C 에는연산자의종류가다양함 1. arithmetic operators ( 수식연산자 ) 2. relational operators ( 관계연산자 ) 3. logical

More information

지도상 유의점 m 학생들이 어려워하는 낱말이 있으므로 자세히 설명해주도록 한다. m 버튼을 무리하게 조작하면 고장이 날 위험이 있으므로 수업 시작 부분에서 주의를 준다. m 활동지를 보고 어려워하는 학생에게는 영상자료를 접속하도록 안내한다. 평가 평가 유형 자기 평가

지도상 유의점 m 학생들이 어려워하는 낱말이 있으므로 자세히 설명해주도록 한다. m 버튼을 무리하게 조작하면 고장이 날 위험이 있으므로 수업 시작 부분에서 주의를 준다. m 활동지를 보고 어려워하는 학생에게는 영상자료를 접속하도록 안내한다. 평가 평가 유형 자기 평가 수업주제 경찰 출동! (버튼, LED, 버저 사용하기) 9 / 12 차시 수업의 주제와 목표 본 수업에서는 이전 차시에 배웠던 블록들의 기능을 복합적으로 활용한다. 스위치 기능을 가진 버튼을 활용하여 LED와 버저를 동시에 작동시키도록 한다. 각 블록들을 함께 사용하는 프로젝트를 통해 각각의 기능을 익히고 보다 다양한 활용 방법을 구상할 수 있다. 교수 학습

More information

Java ...

Java ... 컴퓨터언어 1 Java 제어문 조성일 조건문 : if, switch 어떠한조건을조사하여각기다른명령을실행 if 문, switch 문 if 문 if - else 문형식 if 문형식 if ( 조건식 ) { 명령문 1; 명령문 2;... if ( 조건식 ) { 명령문 1; 명령문 2;... else { 명령문 a; 명령문 b;... 예제 1 정수를입력받아짝수와홀수를판별하는프로그램을작성하시오.

More information

Chapter_06

Chapter_06 프로그래밍 1 1 Chapter 6. Functions and Program Structure April, 2016 Dept. of software Dankook University http://embedded.dankook.ac.kr/~baeksj 이장의강의목표 2 문자의입력방법을이해한다. 중첩된 if문을이해한다. while 반복문의사용법을익힌다. do 반복문의사용법을익힌다.

More information

PowerPoint Presentation

PowerPoint Presentation 컴퓨터프로그래밍 Computer Programming 08 포인터기초 목차 1. 포인터변수와선언 2. 간접연산자 * 와포인터연산 3. 포인터형변환과다중포인터 컴퓨터프로그래밍 (Computer Programming) - 08 포인터기초 3 1. 포인터변수와선언 주소개념 주소 address 메모리공간은 8비트인 1 바이트마다순차적인고유한번호 메모리주소는저장장소인변수이름과함께기억장소를참조하는또다른방법

More information

Microsoft PowerPoint - e pptx

Microsoft PowerPoint - e pptx Import/Export Data Using VBA Objectives Referencing Excel Cells in VBA Importing Data from Excel to VBA Using VBA to Modify Contents of Cells 새서브프로시저작성하기 프로시저실행하고결과확인하기 VBA 코드이해하기 Referencing Excel Cells

More information

1. auto_ptr 다음프로그램의문제점은무엇인가? void func(void) int *p = new int; cout << " 양수입력 : "; cin >> *p; if (*p <= 0) cout << " 양수를입력해야합니다 " << endl; return; 동적할

1. auto_ptr 다음프로그램의문제점은무엇인가? void func(void) int *p = new int; cout <<  양수입력 : ; cin >> *p; if (*p <= 0) cout <<  양수를입력해야합니다  << endl; return; 동적할 15 장기타주제들 auto_ptr 변환함수 cast 연산자에의한명시적형변환실행시간타입정보알아내기 (RTTI) C++ 프로그래밍입문 1. auto_ptr 다음프로그램의문제점은무엇인가? void func(void) int *p = new int; cout > *p; if (*p

More information

슬라이드 1

슬라이드 1 2 장. 어휘원소, 연산자와 C 시스템 박종혁교수 UCS Lab Tel: 970-6702 Email: jhpark1@seoultech.ac.kr SeoulTech 2018-1 st 프로그래밍입문 (1) 2 목차 2.1 문자와어휘원소 2.2 구문법칙 2.3 주석 2.4 키워드 (Keyword) 2.5 식별자 (Identifier) 2.6 상수 (Integer,

More information

Microsoft PowerPoint - chap10-함수의활용.pptx

Microsoft PowerPoint - chap10-함수의활용.pptx #include int main(void) { int num; printf( Please enter an integer: "); scanf("%d", &num); if ( num < 0 ) printf("is negative.\n"); printf("num = %d\n", num); return 0; } 1 학습목표 중 값에 의한 전달 방법과

More information

<4D F736F F F696E74202D20B8AEB4AABDBA20BFC0B7F920C3B3B8AEC7CFB1E22E BC8A3C8AF20B8F0B5E55D>

<4D F736F F F696E74202D20B8AEB4AABDBA20BFC0B7F920C3B3B8AEC7CFB1E22E BC8A3C8AF20B8F0B5E55D> 리눅스 오류처리하기 2007. 11. 28 안효창 라이브러리함수의오류번호얻기 errno 변수기능오류번호를저장한다. 기본형 extern int errno; 헤더파일 라이브러리함수호출에실패했을때함수예 정수값을반환하는함수 -1 반환 open 함수 포인터를반환하는함수 NULL 반환 fopen 함수 2 유닉스 / 리눅스 라이브러리함수의오류번호얻기 19-1

More information