rkttu
1
Terraform HCL Parser를 C#으로 만든 것도 있을까하여 찾아보니 아래와 같은 nuget 패키지가 있었습니다.
그런데 어떻게 만들어진 라이브러리인가 살펴보니 Sprache라는 흥미로운 라이브러리가 눈에 띄어서 조금 찾아봤습니다.
Sprache는 C# 언어에서 파서를 쉽게 작성할 수 있도록 도와주는 경량의 라이브러리입니다. 이 라이브러리를 사용하면 복잡한 텍스트나 데이터를 처리하는 데 필요한 구문 분석기를 간단하게 구현할 수 있습니다.
예를 들어, 텍스트 파일에서 특정 형식의 데이터를 추출하거나, 간단한 도메인 특화 언어(DSL)를 해석하는 작업을 수행할 수 있습니다. Sprache는 정규 표현식보다 강력하면서도 ANTLR과 같은 복잡한 도구보다 사용이 쉬우니 활용 폭이 넓을 것 같습니다.
이 주제로 구현 방법을 고민 중이시거나, DSL을 간단히 만들어야 하는 경우 한 번 테스트해보시면 좋을 듯 합니다. 
7개의 좋아요
rkttu
2
참고로, Octopus HCL Parser는 문서화가 되어있지 않아, 유닛 테스트 코드를 통해 사용법을 유추해야 했습니다 
기본 사용법은 다음과 같으니 참고하시면 좋겠습니다.!
using Sprache;
using Octopus.CoreParsers.Hcl.HclParser;
...
var hclTree = HclTemplate.Parse(
"""
packer {
required_plugins {
amazon = {
version = ">= 1.2.8"
source = "github.com/hashicorp/amazon"
}
}
}
source "amazon-ebs" "ubuntu" {
ami_name = "learn-packer-linux-aws"
instance_type = "t2.micro"
region = "us-west-2"
source_ami_filter {
filters = {
name = "ubuntu/images/*ubuntu-jammy-22.04-amd64-server-*"
root-device-type = "ebs"
virtualization-type = "hvm"
}
most_recent = true
owners = ["099720109477"]
}
ssh_username = "ubuntu"
}
build {
name = "learn-packer"
sources = [
"source.amazon-ebs.ubuntu"
]
}
""");