블로그 이미지
기록 형식의 블로그입니다. 이브시나

카테고리

분류 전체보기 (6)
Programming Language (4)
PlayGame (0)
DataStruct (2)
OS (0)
Total
Today
Yesterday

달력

« » 2025.12
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31

공지사항

최근에 올라온 글

'Programming Language'에 해당되는 글 4건

  1. 2011.11.07 선언
  2. 2011.11.07 데이터형 기본
  3. 2011.11.07 토큰이란? 1
  4. 2011.11.07 Android ADK란?

선언

Programming Language/C/C++ / 2011. 11. 7. 15:55

간단한 선언



선언자에 하나의 이름을 붙여준다. 그 경우를 명칭이라고 한다.

“char soccer”를 예를 들겠다. char라는 타입을 지정해 주고 거기에 이름 soccer을 붙여준다.

타입을 우리 말로 표현하자면 선정지정자라고 칭할수 있고, 이름을 선언자라고 칭한다.

이 선언자에 괄호 즉 ” 선정지정자 (선언지정자)“라고 나타낸 것을 전체 지정자라고 한다.

이런 전체 지정자는 특별히 뜻은없다. 하지만 복잡한 선언할때에는 의미를 가질 수 있다.

- 포인터 선언자

위에 간단한 선언에 나오는 타입 즉 선정지정자와 선언자는 똑같다. 다만 명칭이 약간 다를뿐이다.

선정지정자는 그대로 써주고 “*(포인터)+형을나타내는 명칭” 이다.

형한정어 명칭을 표현하자면 “char *soccer” 이 있다. 타입이 char 포인터이므로 포인터의 “p”와 char형의 “c”를 붙여주는 방식으로 하

면 되겟다.(다른 명칭을 넣어도 되지만 이 방식을 이용하는 방법이 사용자가 알기 쉬울 것이다.)

말로 표현이 이해가 안갈 수도 있으니 그림으로 표현하겠다. 



- 배열 연산자

배열 선언자는 명칭부분에 배열추가, 즉 함수기호 ”[ ]“기호 추가와 그 배열안에 상수 값을 넣어주면 되겠다.

- 함수 선언자

함수 선언자는 배열포인터와 비슷한 방식으로 명칭부분에 함수를 나타내는 ”( )“를 추가해주면 된다 그 함수 안에는 매개변수 리스트가 들어가면 되겠다.

매개변수 리스트란 타입 혹은 타입과 명칭을 넣으면 된다. 


복잡한 선언

- 첫번째 방법 “명칭에서부터 의미 유추하기(가장 안쪽에 있는 데이터형이 유도 과정에서 가장 마지막에 적용되는 것이며, 가장 바깥쪽에 있는 데이터형이 가장 처음에 적용되는 것이다.) 


int 함수를 반환하는 배열

'Programming Language > C/C++' 카테고리의 다른 글

데이터형 기본  (0) 2011.11.07
토큰이란?  (1) 2011.11.07
Posted by 이브시나
, |

  • 데이터형은 다음과 같이 분류된다.


  • 분류된 데이터형을 세부적으로 표현하면 다음과 같다.


'Programming Language > C/C++' 카테고리의 다른 글

선언  (0) 2011.11.07
토큰이란?  (1) 2011.11.07
Posted by 이브시나
, |

토큰이란?

 토큰은 '문법적으로 의미있는 최소단위'를 말한다.C로 작성된 프로그램 소스를 구성하는 문자들을 번역 프로그램에 넣으면, 번역 프로그램은 프로그램 소스를 이해하는 가장 기본적인 단위인 '토큰(token)'으로 분리하여 인식하고, C언어의 '문법(syntax)'에 맞춰 프로그래머가 의도한 '의미(semantic)'를 의미한다. 쉽게말해 문장을 각각 분리하여 인식하는 과정이라고 보면된다.


 번역프로그램이 C언어로 작성된 프로그램이 이해하는 기본단위는??

문자 (X)     토큰(token) (O)

토큰?

- 연속된 문자에서 구별할 수 있는 단위

토큰 분리는? - 공백문자에 의해 이루어진다.



어휘분석 - 문자를 토큰으로 인식하는 과정


구문해석 – 토큰을 “문법에 맞춰” 해석하는 과정

※ 토큰화 과정에서는 문법이나 프로그램 구조가 올바른지 여부는 신경 쓰지 않는다.

토큰의 분류 – 전처리기 토큰, 일반 토큰으로 정의

전처리기 토큰

- 명칭, 구분자, 문자 상수, 문자열 상수, 전처리기 숫자, 헤더명, 어디에도 속하지 않는 부류

일반 토큰


예약어, 명칭, 구분자, 상수, 문자열 상수


예약어

– 언어의 고유한 기능을 위해 별도로 예약된 명칭이다.

- 전처리 과정 이후에는 프로그래머 임의의 명칭으로 사용될 수 없다.

- 모두 소문자이다.


auto, break, case, char, const, continue, default, do, double, else, enum, extern, float, for, goto, if, int, long, register, return, short, signed, sizeof, static, struct, swich, typedef, union, unsigned, void, volatile, while


명칭 – 프로그램 내에서 구분하여 참조할 필요가 있는 언어적 요소에 붙이는 이름.

- 52개의 영문 대소문자, 밑줄문자 _, __로 시작해야함.

- 숫자로 시작할수 없고, 첫 문자가 문자이면, 그 이후는 숫자가 삽입되어도 됨.

- 대소문자를 구별한다.

대상체와 함수 (구조체, 공용체, 열거를 위한) 태그와 멤버 사용자 정의형 매크로 매크로 함수의 매개변수


연산자 – 상수나 대상체의 형태로 주어진 피연산자에 수행되는 연산

구분자 – 독립된 요소로서 문법의 의미를 규정.


Ex) func(); //func() 함수를 호출하는 수식 int func(); //실제 함수는 호출되지 않으면서 func라는 명칭이 함수임을 나타내는 구분자.

[ ] ( ) { } . -> ++ -- & * + - ~ ! / % << >> < > <= >= == != ^ | && || ? : ; … = *= /= %= += -= <<= >>= &= ^= |= , # ##

Ex) x+++++y; ??? x ++ + ++ y ; [명칭][구분자] [구분자] [구분자] [명칭] [구분자] ※실제로는 작동이 안되는 오류가 나는 소스이다.



다음과 같은 소스를 살펴보면..


결과값..



왜 값은 정상적으로 1씩 저장이되는데 sum은 4인가..?

- x다음에 오는 ++은 라인이 끝나고 연산이 되기 때문에 해당 줄에서는 x값은 1으로 연산된다.


다음과 같은 소스코드를 예로 확인해보자.



위의 문장에서 x+++5 와 z+++y를 자세히 확인해보면


 x      ++       +      5      ;


[명칭][구분자][구분자][명칭][구분자] 
 

z     ++       +      y      ;

[명칭][구분자][구분자][명칭][구분자]


와 같이 토큰화가 이루워진다. 토믄 인식의 법칙 '최대한 잘라먹기 큐칙(maximal munch rule)'에 의해 연산자 우선순위 및 법칙에 의해 가장 큰 ++를 처리한 후 이항 연산을 처리하게된다.

그러므로 출력 값은

와 같이 나오는 것을 확인할 수 있다.


상수 - 값을 기억장치에 담을 수 있는 대상체에 들어갈 수 있는 재료를 프로그램소스에 직접 적어주는 방법을 제공. - 모든 상수는 데이터형을 갖음.


종류

부동 상수 : 실수(실수에 근접한 유리수)를 표현하는 방법
정수 상수 : 실제 프로그램에서 가장 많이 사용되는 정수를 표현하는 상수.
문자 상수 : 실행 문자세트의 문자를 프로그램 소스 내에 이식성 있는 방법으로 표현하는 방법을 제공. 
          문자열 상수는 int형이지만, 값은 char 형을 거쳐 변환된 값을 갖는다.
          문자열 상수는 배열로 인식되며, 메모리에 저장될 때 마지막에 문자열의 끝을 알리는 널문자가 포함되어 1 바이트가 더 추가됨.
열거 상수

'Programming Language > C/C++' 카테고리의 다른 글

선언  (0) 2011.11.07
데이터형 기본  (0) 2011.11.07
Posted by 이브시나
, |

Android ADK(Accessory Development Kit)

 저는 구글 개발자 세미나인 Google I/O 2011'에서 흥미로운 주제 중 하나인 ADK에 대해서 이야기 하고자 합니다.

 

 안드로이드폰에서 사용하는 주변기기들을 개발하는 Open Accessory Development Kit(이하 ADK)이다. 다시 말해 ADK는 안드로이드 운영체제를 탑재한 장치의 주변장치를 만들 수 있는 하드웨어 및 소프트웨어를 말합니다.

  

 구글이 소개 한 ADK는 주변장치와 USB를 통한 인터페이스 방법 중 하나입니다. 구글은 안드로이드 운영체제를 탑재한 장치에 USB 호스트나 USB OTG 같은 장치만 있으면 누구나 사용할 수 있는 규격을 정하고 그렇지 않은 경우에는 ADK를 사용해 구현하는 규격도 마련하였습니다.


 구글의 오픈 액세서리 API와 개발 키트를 활용하면 USB 인터페이스를 활용한 안드로이드 액세서리를 개발할 수 있게 된다. 이를 위해 구글은 새롭게 공개한 허니콤 3.1과 진저브레드 2.3.4 USB 호스트 기능을 추가했으며, 앞으로는 USB 외에도 블루투스 페어링 기능도 추가될 예정입니다.

 

 다음 동영상들을 통해 구글이 구글 IP 기조연설에서 시연한 데모를 통해 오픈 액세서리 API의 활용성을 가늠해 볼 수 있습니다.

 



 Android ADK Robot

http://www.youtube.com/watch?v=Ub7newiu930&feature=player_detailpage




Android Open Accessory demonstration(Piano)

http://www.youtube.com/watch?v=GHQjRjJYc-Q&feature=player_detailpage




Android ADK를 이용한 미로 찾기 게임

http://www.youtube.com/watch?v=zLUmH479Cqc&feature=player_embedded#t=0s





 위와 같이 수십 개의 모터를 연결하여 거대한 미로 게임을 안드로이드 태블릿을 기울기로 조절하는 장면을 보면, 단순히 게임에 적용뿐만 아니라 가정 곳곳에서도 사용 할 수 있을 것 같습니다.

 

 안드로이드의 경우에는 3백 개가 넘는 안드로이드폰에서 호환되는 액세서리를 만드는 것은 쉽지 않은 일입니다. 구글의 레퍼런스폰을 제외하곤 각각의 안드로이드 단말기 제조업체에서 직접 액세서리를 제공하거나 서드파티에서 일부 히트 제품에만 호환되는 액세서리를 개발하는 정도입니다.

 

 

 모토로라에서는 자체적으로 웹톱 애플리케이션(Webtop Application)과 랩탑 독(dock)이라는 도킹 스테이션 개념을 탑재하여 많은 인기를 얻은 바 있습니다.

 

 구글의 오픈 액세서리 API와 개발 키트를 활용하여 이를 지원하는 모든 안드로이드 폰에서 호환되는 안드로이드 액세서리를 만나게 될 것입니다.

 

 안드로이드폰이나 태블릿은 PC와 동기화시키기 위해 USB 연결 포트를 사용합니다. 이 연결 포트를 사용해 손쉽게 다른 장치를 연결할 수 있습니다. 하지만 여기서 주목해야 할 것은 이러한 연결 장치를 개발할 때도 구글은 오픈(Open)이라는 방법을 사용했다는 것입니다.

 

 안드로이드가 오픈소스로 공개되듯 주변장치를 개발할 때 필요한 각종 하드웨어 및 소프트웨어 정보를 다 공개해 자유롭게 개발할 수 있습니다. 라이센스 비용의 문제로 이러한 구글의 오픈정책은 안드로이드의 부가 장치를 만드는 업체에게 안드로이드폰이나 태블릿을 하나의 제어장치로서 쉽게 사용할 수 있게 만드는 것입니다.

 

 ADK는 오픈 하드웨어 프로젝트인 아두이노 장치를 사용합니다. 아두이노는 오픈소스에 기반을 둔 전자 프로토 타이핑 플랫품으로, 하드웨어에 대하여 깊은 지식이 없어도 다양한 애플리케이션을 구축 할 수 있다는 게 가장 큰 장점입니다. 





 여기서 생각할 점은 USB에서 악세서리가 USB 호스트 기능을 하고 안드로이드 단말이 USB 디바이스로 연결되는 구조라는 것입니다.

 

 따라서 아두이노를 안드로이드에 장착하기 위해서는 아두이노에 USB 호스트 실드가 장착되어 있어야 하며, 보통 ADK 개발을 위한 보드들이 점점 많아지고 있습니다.

 또한 아두이노를 안드로이드에서 사용하기 위해서는 구글의 안드로이드 부가 장치 통신 프로토콜(Android accessory communication protocol)을 통하여 안드로이드 운영체제를 탑재한 장치에서 USB 호스트를 탑재하거나 ADK와 연결되어 동작하는 모드에서 사용할 수 있는 API 클래스를 지원하고 있습니다.

 

 다음에는 이 API 클래스에 대해 알아보며, 본격적으로 안드로이드 ADK 개발키트를 활용하여 좀 더 재미난 시간이 되었으면 합니다. 
Posted by 이브시나
, |

최근에 달린 댓글

최근에 받은 트랙백

글 보관함