언어/Kotlin

Kotlin 기초 : 언어 구성요소 (syntax, semantic)

해리누나 2022. 6. 3. 08:11
728x90
반응형

예로, 영어를 할 줄 알지만 독일어를 모르는 한국인이 독일어로 쓰인 문장을 읽고 이해할 수 없는 듯,

번역가가 이해할 수 있는 언어로 써있어야 번역이 가능한 법이다.

컴파일러도 마찬가지다. 구문상으로 올바른 소스코드만 이해 할 수가 있다.

 

1. Syntax 구문론

구문은 언어에 대한 유효한 문자의 규칙이다.

컴파일러는 구성이 제대로 된 구문이 필요하다.

그런 구문은 예로

  • 코틀린의 fun, class, if 와 같은 명확하게 정의된 키워드나,
  • +, -, *, / , % 와 같은 연산자나,
  • 548 , "안녕" 과 같은 고정된 데이터 값이나,
  • 데이터의 값이나 함수의 이름과 같은 자체 식별자들로 이루어져 있다.

 

예)

println("Hello")

: println은 코틀린의 기본 출력문이다. (자바와 같다)

 자바와 마찬가지로 출력하고 싶은 문자열을 " " 안에 적으면 된다.

 

잘못된 구문의 예

p r i n t l n ("Hello") // 띄어쓰기는 허락되지 않는다.

("Hello") println , "Hello" () println // 잘못된 구성

 

 

2. Semantic 의미론

구문상 올바른 코드가 항상 정확할 수는 없다.

예를 들어 "태양에 비가 내린다" 와 같은 문장은 문법적으로 틀리지 않은 구문이나 말이 되지 않는다. (의미가 없는 문장)

 

예) 의미가 잘못된 경우의 예시

val a = 18      // val은 코틀린 내에서의 변수선언
val b = 25
val multiplikation = a + b
println("a * b 는 $multiplikation 이다.")

컴파일러는 컴파일러 중에 구문이 잘못된 경우가 있으면 이를 알려주지만 당연히 의미오류는 인지할 수 없다.

컴파일러는 쓰여진 코드를 바이트코드나 기계어로 변환하는 프로그램일 뿐이다.

 

의미적 오류는 보통 런타임(프로그램의 실제 실행)시 나타난다.

런타임 환경은 프로그램이 의미론적인지 아닌지의 여부를 평가하지 않는다.

그러나 이 때 인식하게 되는 오류들이 있다.

 

예를 들어,

프로그램이 존재하지 않는 메모리나 요소에 엑세스하려고 할 때나  (컴파일러는 인지할 수 없는 오류들)

잘못된 명령이 실행될 때!

               

대표적인 예) 숫자를 0으로 나누기.

val result = 1/0;
println("1 나누기 0은 $result.")

수학적으로 허용되지 않는 연산.  실제 0으로 값이 나눠지는지 런타임때 분명해진다.

 

프로그램 돌린 후 뜬 exception

 

이런 예외들은 try - catch 나 throw로 처리가 가능하다.

 

 

 

출처

공부내용: 학교 교수님 (Christian Kohls) 강의

728x90
반응형