Sprache: C# 언어로 만드는 문법 파서 지원 라이브러리

Terraform HCL Parser를 C#으로 만든 것도 있을까하여 찾아보니 아래와 같은 nuget 패키지가 있었습니다.

그런데 어떻게 만들어진 라이브러리인가 살펴보니 Sprache라는 흥미로운 라이브러리가 눈에 띄어서 조금 찾아봤습니다.

​Sprache는 C# 언어에서 파서를 쉽게 작성할 수 있도록 도와주는 경량의 라이브러리입니다. 이 라이브러리를 사용하면 복잡한 텍스트나 데이터를 처리하는 데 필요한 구문 분석기를 간단하게 구현할 수 있습니다.

예를 들어, 텍스트 파일에서 특정 형식의 데이터를 추출하거나, 간단한 도메인 특화 언어(DSL)를 해석하는 작업을 수행할 수 있습니다. Sprache는 정규 표현식보다 강력하면서도 ANTLR과 같은 복잡한 도구보다 사용이 쉬우니 활용 폭이 넓을 것 같습니다.

이 주제로 구현 방법을 고민 중이시거나, DSL을 간단히 만들어야 하는 경우 한 번 테스트해보시면 좋을 듯 합니다. :smiley:

7개의 좋아요

참고로, Octopus HCL Parser는 문서화가 되어있지 않아, 유닛 테스트 코드를 통해 사용법을 유추해야 했습니다 :sob:

기본 사용법은 다음과 같으니 참고하시면 좋겠습니다.!

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"
  ]
}
""");