프로젝트/컴파일러 만들기

프로그래밍 언어 문법

춤추는수달 2024. 3. 29. 01:06

문법

  1. 진입점
    • 함수 '본문'()
      {
      }
  2.  문장
    • 문장은 마침표(.)로 끝난다.
    • 단어와 단어는  띄어쓴다.
    • 조사(은, 는, 이, 가, 을, 를, 보다, 와, 과, 거나)는 띄어쓰지 않는다.

    • 식은 평가값을 갖는다.
    • 식은 문장에 포함될 수 있다.
    • 식은 소괄호로 묶일 수 있다.
  3.  리터럴
    • 문자열 리터럴 :
      • 쌍따옴표 안에 글자를 입력한다.
      • "이것은 문자열 리터럴 입니다."
    • 숫자 리터럴 :
      • 한글로 된 숫자를 입력한다.
      • 입력 가능한 글자는 일, 둘, 삼, 사, 오, 육, 칠, 팔, 구, 십, 백, 천, 만, 억, 조, 점 이다.
      • 실수와 정수는 구분되지 않는다.
      • 글자 '점' 아래에 숫자를 쓰면 소수점 아래 표현 가능.
      • 이(2)로 끝나는 숫자 뒤에는 조사 '이' 가 올 수 없다.
      •  
      • 일조삼억오천만삼천둘백칠십일점일둘삼사오
    • 불 리터럴 :
      • '참' 혹은 '거짓' 키워드 입력.
      • 참
        거짓
    • 널 리터럴 :
      • '없음' 키워드 입력.
      • 없음
  4. 식별자 :
    • 따옴표 안에 글자 입력.
    • '이것은 식별자'
  5. 변수 : 변수 명은 식별자로서, 따옴표 사이에 입력한다.
    • 문자열 변수 선언 : 
      • 문자열 + 식별자(변수의 이름) +   은, 는 +  문자열 리터럴.
      • 선언과 동시에 초기화가 강제된다.
      • 문자열 '이름'은 "김지완".
    • 숫자 변수 선언 :
      • 숫자 + 식별자(변수 이름) +  은, 는 + 숫자 리터럴.
      • 선언과 동시에 초기화가 강제된다.
      • 숫자 '나이'는 둘십팔.
    • 불 변수 선언 :
      • 명제+ 식별자(변수의 이름) +  은, 는+ 불 리터럴
      • 선언과 동시에 초기화가 강제된다.
      • 명제 '생존'는 참.
    • 전역 변수 선언 : 
      • 전역 을 변수 선언문 앞에 붙인다.
      • 전역 숫자 '원주율'은 삼점일사팔오구둘.
    • 지역 변수
      • 블록 안에 변수를 선언한다.
      • {
        	숫자 '원주율'은 삼점일사팔오구둘.
        }
    • 배열
      • 변수 선언 시 변수명 뒤에 대괄호 쌍을 붙인다. 
      • 배열의 크기는 입력하지 않는다.
      • 숫자 '원주율'[]은 삼점일사팔오구둘.
  1. 함수
    • 함수 선언 
      •  함수 + 식별자 + 은,는 + (매개변수, 매개변수, ...) + {블록} 형식.
      • 함수 '등록'는 (문자열 '이름', 숫자 '나이')
        {
        	['이름', '나이']를 출력.
        }
    • 함수 호출
      • [매개변수, 매개변수, ...] + 을, 를 + 식별자(함수이름)
      • ['이름', '나이']를 '등록'.
    • 반환
      • (값) + 을, 를 + 반환 
      • 함수 '두배'는 (숫자 '하나')
        {
        	('하나' 곱하기 둘)를 반환.
        }
  2.  반복문(while)
    •  (조건식) + 동안 + {블록} + 을, 를 + 반복
    • break  : 탈출
    • continue : 계속
    • (참) 동안 
      {
      	'나이'를 증가.
          만약('이름'이 "침착맨"과 같다)면
          {
          	계속.
          }
          만약('나이'가 둘십보다 크다)면
          {
          	탈출.
          }
          
      }를 반복.
  3. 조건문(if)
    • 혹시 + (조건식) + 면 + {블록}
    • 혹시 (참)면
      {
      }
  4. 대입연산
    • 식별자 + 은, 는 + 리터럴, 변수 
    • '나이'는 둘십팔.
      '이름'는 "독깨팔".
  5.  사칙연산 + 나머지연산
    • 숫자 + 더하기, 빼기, 곱하기, 나누기 + 숫자
    • '나이'는 '나이' 더하기 일.
      '나이'는 '나이' 빼기 일.
      '나이'는 '나이' 곱하기 둘.
      '나이'는 '나이' 나누기 둘.
      '나이'는 '나이' 나머지 삼.
  6. 단항연산
    1. ++ : 증가
    2. -- : 감소
    3. 증감연산은 후위 연산만 존재함.
    4. - : 부호 반전
    5. '나이'를 증가.
      '나이'를 감소.
      '나이'를 반전.
  7. 문자열 더하기 연산
    • 문자열 + 더하기 + 문자열
    • '이름'은 '사는동네' 더하기 '별명' 더하기 "김지완".
  8.  관계연산
    • 숫자 관계연산 :
      • >, < : 숫자 + 이, 가 + 숫자 + 보다 + 크, 작 + 다
      • == : 숫자 + 이, 가 + 숫자 + 과, 와 + 같다
      • != : 숫자 + 이, 가 + 숫자 + 과, 와 + 다르다
      • && : 그리고
      • || : 또는
      • 관계 연결 : 
        • ~거나 : 또는 으로 연결됨.
        • ~고 : 그리고 으로 연결됨.
    • 문자 관계연산 :
      • == : 문자열 +이,가 + 문자열 + 과, 와 + 같다
      • != : 문자열 + 이,가 + 문자열 + 과, 와 + 다르다
    • 이가 삼보다 크다. 
      이가 삼보다 작다.
      이가 삼보다 크거나 같다. 
      이가 삼보다 작거나 같다. 
      '나이'가 삼십보다 작고 둘십보다 크다. 
      이가 삼보다 작거나 일보다 크다. 
      '이름'이 "김지완"와 같다. 
      혹시('나이'가 삼십보다 작고 둘십보다 크다
      	그리고 '이름'이 "김지완"과 같다
          또는 '나이'가 둘십팔과 같다)면 
      { 
      	['나이']를 출력. 
      }
    •  
  9.  출력(내장 함수)
    • [내용, 내용, ...] + 을, 를 + 출력 
    • ['이름', '나이']를 출력.

예제 코드

전역 숫자 '나이'는 둘십팔.

함수 '이것저것'(숫자 '임시', 문자열 '임시시')
{
	혹시('임시'가 둘십팔과 같다)면
	{
    		숫자 '저장'은 삼.
		['임시', '임시시']를 '출력'.
	}
}

함수 '본문'()
{
	문자열 '이름'은 "김지완".

    	반복 ('나이'가 오십보다 작다) 동안
	{
    		['나이', '이름']을 '이것저것'.
		'나이' 증가.
		혹시('나이'가 둘십팔과 같거나 '나이'가 오백보다 크다)면
		{
			탈출.
		}
		아니면
		{
			계속.
		}
	}
}

'프로젝트 > 컴파일러 만들기' 카테고리의 다른 글

Scanner  (0) 2024.04.13
컴파일러를 만들어보자.  (0) 2024.03.28