분류 전체보기(16)
-
컴파일러 구현에 대한 이야기
개인적으로 2019년부터 현재까지 AJ 언어와 그 문법을 지원하는 컴파일러를 구현해왔고 앞으로도 구현해 나갈 것인데, 컴파일러 구현 시 필요한 이론이라든지 사용된 기법 관련된 내용에 대해 얘기를 하고자 한다. 어........................... 솔직히 뭔 얘기부터 해야할지 감이 안오지만 차근차근 하나씩 하나씩 내가 이제까지 구현해 온 방향대로 되짚어서 일기쓰듯이 써볼까 한다. (아 물론 누군가에게 설명하듯이 친절하게) 음.................... 뭐 일단 해보자 지금까지 구현된 컴파일러 github 링크는 아래와 같다. https://github.com/AJ-comp/Compiler GitHub - AJ-comp/Compiler Contribute to AJ-comp/Compi..
2022.12.30 -
[C#] 디버깅 시 데이터의 조사식 포맷을 변경해보자
DebuggerDisplay * 왜 필요함? 아래와 같이 냉장고를 추상화한 클래스가 있다. public class Refrigerator { /// /// 설정 온도 (도달해야 할 온도) /// public float SetPoint { get; } = 3.0f; /// /// 공급 온도 (설정 온도에 도달하기 위해 공급되는 바람의 온도) /// public float SupplyTemp { get; } = 2.0f; /// /// 순환 온도 (냉장고를 한 바퀴 순환하고 되돌아오는 바람의 온도) /// public float ReturnTemp { get; } = 3.2f; /// /// 냉장고 내부의 습도 /// public float Humid { get; } = 72.5f; public Refrig..
2022.12.30 -
[C#] 열거형 값을 문자열로 사용해보자
Description * 왜 필요함? 코드를 작성하다보면 열거형을 문자열처럼 사용하고 싶을 때가 있다. 예를들어 아래와 같은 열거형이 있다고 보자 public enum PLang { C, Cpp, CSharp, Go, Rust, AJ, } 그리고 이제 아래처럼 출력을 해보면 Console.WriteLine(PLang.Cpp); Console.WriteLine(PLang.CSharp); 문자열로 잘 나온다. 그럼 끝일까? 생각해보면 열거형 목록명은 특수문자나 띄워쓰기 같은게 불가하다. 예를 들어 C++, C# 이런 형태로 쓰는게 불가하다는 뜻 그런데 열거형으로 C++, C# 같은 특수문자가 나오게 하거나 띄워쓰기가 되게 하고 싶다 하면 구현 방법도, 사용방법도 상당히 불편해진다. 불편해지는만큼 코드 유지보..
2022.12.30 -
[C#] 외부함수를 멤버함수처럼 사용하기
확장 메서드 (Extension Methods) 개인적으로 아주 훌륭한 기능이라고 생각하는 확장 메서드... static 메서드로서 특정 클래스나 구조체 심지어 인터페이스까지 메서드를 확장가능하게 한다. 그리고 이렇게 확장된 메서드는 마치 멤버함수마냥 사용이 가능하다. 한번 아주 간단한 예제를 보도록 하자. 아래의 코드는 List 클래스를 확장한 AddRangeExceptNull 메서드 이다. public static class ListExtensionMethods { public static void AddRangeExceptNull(this List obj, IEnumerable collection) { if (collection == null) return; obj.AddRange(collectio..
2022.12.26