diff --git a/README.md b/README.md index 6864254..3268ec5 100644 --- a/README.md +++ b/README.md @@ -18,38 +18,50 @@ LLVM을 기반으로 동작해 LLVM Infrastructure의 강력한 도구들을 활 ## 목차 1. [시작하기](#시작하기) -2. [줄랭의 문법](#줄랭의-문법) -3. [코드 예시](#코드-예시) -4. [알려진 문제](#알려진-문제) -5. [줄랭 컴파일러](#줄랭-컴파일러) -6. [문법 지원 현황](#문법-지원-현황) -7. [참고 자료](#참고-자료) +2. [코드 예시](#코드-예시) +3. [알려진 문제](#알려진-문제) +4. [줄랭 컴파일러](#줄랭-컴파일러) +5. [문법 지원 현황](#문법-지원-현황) +6. [참고 자료](#참고-자료) ## 시작하기 빌드된 줄랭 컴파일러는 [다운로드 페이지](https://github.com/zihasoo/Zul-lang/releases) 를 참고하세요. -- 윈도우에서 줄랭 컴파일러를 실행했을 때 `msvcp140.dll이 없어 코드 실행을 진행할 수 없습니다` -와 같은 오류가 발생한다면 `microsoft visual c++ 2015-2019 redistributable`가 없는 것입니다. -대부분의 윈도우 프로그램이 해당 패키지를 요구하기 때문에 설치하는 것이 좋습니다. -[Microsoft Visual C++ 재배포 가능 패키지 다운로드](https://learn.microsoft.com/ko-kr/cpp/windows/latest-supported-vc-redist?view=msvc-170) -에서 설치 가능합니다. - -줄랭 컴파일러의 코드를 수정하고, 빌드하고 싶다면 LLVM을 설치해야 합니다. 또한 cmake, C++ 빌드 시스템, C/C++ 컴파일러가 필요합니다. +줄랭 컴파일러의 코드를 수정하고, 직접 빌드하고 싶다면 LLVM을 설치해야 합니다. 또한 cmake, C/C++ 빌드 시스템, C/C++ 컴파일러가 필요합니다. 자세한 내용은 [줄랭 세팅 방법](./zullang_TMI.md#줄랭-세팅-방법)을 참고하세요. -## 줄랭의 문법 줄랭의 문법에 대한 설명은 [줄랭 Documentation](./zullang_documentation.md) 에서 확인하실 수 있습니다. ## 코드 예시: +"안녕 세상!"을 출력하는 가장 기본적인 줄랭의 코드 형태입니다. `시작` 함수가 프로그램 진입점이 됩니다. + +``` +ㅎㅇ 시작() 수: + 출("안녕 세상!") +``` + +입력받은 숫자 번째의 피보나치 수를 출력하는 줄랭 코드입니다. + +``` +ㅎㅇ 피보나치(숫자: 수) 수: + ㅇㅈ? 숫자 <= 1: + ㅈㅈ 숫자 + ㅈㅈ 피보나치(숫자 - 1) + 피보나치(숫자 - 2) + +ㅎㅇ 시작() 수: + 숫자: 수 + 입(숫자) + 출(피보나치(숫자)) +``` + 줄랭으로 구현한 퀵 정렬 알고리즘입니다. 기본적으로 C라이브러리와 링킹이 되기 때문에, 아래의 clock과 rand처럼 선언만 해준다면 C언어의 함수를 쉽게 사용할 수 있습니다. 줄랭의 주석은 //를 사용합니다. 다른 언어와 비슷한 줄 주석으로, //부터 줄 끝까지가 무시됩니다. ``` - ㅎㅇ clock() 수 ㅎㅇ rand() 수 diff --git a/zullang_TMI.md b/zullang_TMI.md index 7f7627a..7f834b2 100644 --- a/zullang_TMI.md +++ b/zullang_TMI.md @@ -64,6 +64,9 @@ -DLLVM_DIR을 꼭 넣어주어야 합니다. 만약 릴리즈와 디버그 두 개의 빌드를 하려고 한다면, 릴리즈로 빌드할 때는 DLLVM_DIR에 릴리즈로 빌드한 LLVM의 경로를, 디버그로 빌드할때는 디버그로 빌드한 LLVM의 경로를 넣어주면 됩니다. +가끔 "Undefined symbols for architecture ~~" 로 시작하는 링커 에러가 뜨는 경우가 있는데, +이는 `-fno-rtti` 컴파일 옵션을 넣어주면 해결됩니다. cmake 옵션으로 넣어줘야 하므로 위의 명령에 `-DCMAKE_CXX_FLAGS=-fno-rtti`를 추가하면 됩니다. + 이렇게 하면 모든 세팅이 끝나게 됩니다. LLVM을 빌드하는 것은 직접 명령어를 실행해서 진행하고, 줄랭 자체는 CLion같은 IDE를 통해 빌드 설정을 하는 것을 추천드립니다. diff --git a/zullang_documentation.md b/zullang_documentation.md index 99ae03c..3e6a603 100644 --- a/zullang_documentation.md +++ b/zullang_documentation.md @@ -40,7 +40,8 @@ ## ㅎㅇ 키워드: (하이) 함수 또는 구조체를 정의할 때 사용하는 키워드입니다. -아래처럼 ()를 사용하면 함수, 그렇지 않으면 클래스입니다. +아래처럼 ()를 사용하면 함수, 그렇지 않으면 클래스입니다. +(클래스는 아직 지원되진 않지만, 미래의 사용을 위해 문법이 예약되어 있습니다.) - `ㅎㅇ 함수이름():` - `ㅎㅇ 클래스이름:` @@ -101,7 +102,7 @@ c = 'a' (글자) 입 함수는 `입(a,b,c)` 과 같은 형식으로 사용하고, 이는 `scanf("%lld %lf %c", &a, &b, &c)` 와 똑같이 작동합니다. 줄랭 컴파일러가 정적 타입 추론 기능으로 포멧 문자열을 자동 생성하고, 실제 코드를 scanf 호출 구문으로 치환합니다. -따라서 `입(a)`도 가능하고, `입(a,b,c,d,e, .....)` 처럼 인자를 계속 넣을 수 있습니다. +따라서 `입(a)`도 가능하고, `입(a,b,c,d,e, .....)` 처럼 인자를 계속 넣을 수도 있습니다. 출 함수도 비슷합니다. `출(a,b,c)` 을 사용하면, `printf("%lld %lf %c\n", a, b, c)` 로 변환됩니다. `출()`처럼 아무것도 넣지 않으면 `printf("\n")`로 추론되기 때문에, 빈 줄만 출력됩니다. @@ -113,6 +114,8 @@ c = 'a' (글자) 배열은 기본적으로 %p로 추론되고, '글자' 배열만 예외적으로 %s로 지정되어 있습니다. +'논리' 자료형은 %u로 추론되긴 하나, C언어에는 1비트 자료형이 없기 때문에 printf와 scanf가 정상 작동하지 않습니다. 사용하지 않는 것을 권장합니다. + ## 변수 생성: 변수 생성은 3가지 방법으로 할 수 있습니다.