제 7 강 C언어의 기본 구문(Syntax)
개요 C언어 프로그램의 기본 구성 문법
실습 directory mkdir lab07 cd lab07
언어 ? 言語 Language 001010101000100101010010101010 main(){ printf("Hello"); } 컴파일러 source program source code machine code
자연 언어 Alphabet: a,b,c,d,…, A,B, ㄱ,ㄴ,ㄷ,ㅏ,ㅕ 구두점, 특수 기호: ~!@#$%^&*().,;: 단어: 대한민국, America, soccer 문장: “오늘은 월드컵 4강 경기가 있는 날입니다.” 글: 관련된 여러 문장의 순서적 모임
프로그래밍 언어 alphabet: a,b,c,d,…A,B,C,D C언어에서 한글은 되지 않음. 특수 기호: ~&*%.;:"’\ etc. token: 독립된 의미를 가진 최소 단위 korea, i, number_1, &, ;, etc. sentences: 컴퓨터에게 완전한 하나의 동작을 지시 program: 프로그래머가 원하는 일 (task)을 완성하도록 여러 개의 문장으로 구성함.
자연어와 C언어 알파벳: 유사함 구두점, 특수 기호: 유사 단어 : 토큰 문장:문장 글: 프로그램
소스 코드에 사용하는 글자 set 26x2 alphabet A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z Numerals 0 1 2 3 4 5 6 7 8 9 29 graphic characters ! " # % & ’ ( ) * + , - . / : ; < = > ? [ \ ] ˆ _ { | } ˜ 폰트에 따라 \ 대신 \ 로 보이기도 함
Quiz 07_01
영어의 구문 규칙 <sentence> <noun_phrase> <verb_phrase> <noun_phrase> <determiner> <noun> | <pronoun> | <proper noun> <verb_phrase> <verb> | <verb ><noun_phrase> <verb> go | kick | … <determiner> a | the <noun> table | ball | … <pronoun> I | he | they <proper noun> Sandra | Boa |
문장 생성의 예 <S> <NP> <VP> <pronoun> <VP> He <VP> He <V> <NP> He kicked <NP> He kicked <Det> <N> He kicked the <N> He kicked the ball
실습 (lab07_01) 아래 문법을 이용하여 “I love Boa” 라는 문장을 생성해보라 파일명 sentence.txt <S> <NP> <VP> <NP> <Det> <N> | <pronoun> | <proper noun> <VP> <V> | <V> <NP> <V> go | kick | love | … <Det> a | the <N> table | ball | … <pronoun> I | he | they <proper noun> Sandra | Boa |
C 언어의 구문 규칙 예제 letter_or_digit - letter_or_digit ::= letter |digit - letter ::= lowercase_letter|uppercase_letter - lowercase_letter ::= a | b | c | ... | z - uppercase_letter ::= A | B | C | ... | Z - digit ::= 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 identifier ::= (letter | underscore) {letter_or_digit}* underscore ::= _
C언어의 구문 규칙 (예제) 다음중 이름(identifier)으로서 사용될 수 없는 것은? A 점수 1_AB _the_new_value_is AB and CD -value
예약어(keyword)
Quiz 07_02
C언어의 구문 규칙: 상수(constant) 정수: 0, 1, 234324, 실수: 0.12, 3.1415, .1415, 123. 6.0E23 문자: ’a’ ’1’ ’$’ 문자열: "hello" "this is a sample"
띄어쓰기 자연언어: 단어와 단어는 띄어쓴다. 인용 부호 내에서는 예외이다. I love Korea (O) Ilove Korea (X) "Ilove Korea"는 틀렸다 (O) C언어: 토큰과 토큰은 띄어 쓴다. 단 문맥으로 보아 구분이 명확한 것은 붙여써도 상관없다. int main ( ) { printf ("Hello") ; } int main(){printf("Hello");}
Hello world의 분석 #include <stdio.h> /* * programmed by Sehyeong Cho */ int main( ) { // printf prints to the screen printf("안녕하세요.\n"); } Token 찾아 보기 블랭크 집어 넣기 줄 바꾸어 보기
전처리 명령 preprocessing directives #include ... #if ... #define ... 컴파일러가 처리하기 전에 text로서 대체됨
실습(lab07_02) 앞의 프로그램을 두개의 파일 hello2.c와 hello2.h로 나눈다. #include <stdio.h> main(){ #include "hello2.h" } hello2.h에 들어갈 내용: printf("Hello, world\n"); gcc hello2.c로 컴파일하여 실행하여보라.
Comments Surrounded by /* and */ Not effective if surrounded by " " "Hello /* there */" Cannot surround another comment /* /* Comment1 */ /* Comment2 */ */ Single line comment: //
실습(lab07_03) Single line comment 파일명: comment.c hello.c와 동일한 내용의 파일을 작성하되, comment를 모두 single-line comment로 바꾼다. 또, single-line comment는 multi-line comment (/* ... */)로 바꾼다. 컴파일, 수행하여 이상 없음을 확인하고 제출. 제한 시간: 2분
문자열(string) 상수 문자열 상수 내 줄바꿈 불가 또는 비권장 "This is a wrong example" "This is a right\n example" "(double quote)와 ’(single quote)는 다름. 문자열 내에 "을 넣으려면? "He said, \"yes\"." 문자열 내에 \을 넣으려면? "Backslash is \\" 너무 길어서 어쩔 수 없이 줄을 바꾼다면? "This is a really long line of string,\ and I used two lines to write it."
examples main(){ printf("Hello, world"); printf("안녕하세요.\n"); everyone."); } 출력 결과는? Hello, world안녕하세요. Hello, everyone.
lab07_04 다음의 프로그램을 수정하여 올바르게 만들어 실행하여보고 제출하라.(hello3.c) #include <stdio.h> main( ) { // printf prints to the screen printf(’안녕하세요.\n’); }
lab07_05 다음과 같은 출력을 하는 프로그램을 작성하라. print.c 출력 결과: He said, "Yes."
lab07_06 다음과 같은 형태의 출력을 하는 프로그램을 작성하라. 파일: print2.c 출력 결과: 따옴표는 \” 을, backslash는 \\ 을, 줄바꿈을 하려면 \n을 사용하면 출력할 수 있다.
Indentation (들여쓰기) #include <stdio.h> /* * programmed by Sehyeong Cho */ int main( ){ // printf prints to the screen printf("안녕하세요.\n"); }
Windows programmers #include <stdio.h> /* * programmed by Sehyeong Cho */ main( ) { // printf prints to the screen printf("안녕하세요.\n"); }
Bad indentation style:an example #include <stdio.h> /* * programmed by Sehyeong Cho */ main( ) { // printf prints to the screen printf("안녕하세요.\n"); }
Summary 구문 규칙 해독 방법 comment /* */ // 문자열(string) 전처리기 indentation
제 7 강 끝.