
XLParser
오픈 소스 C# Excel 수식 파서
오픈 소스 C# 라이브러리를 통해 컴팩트한 파스 트리를 사용하여 높은 정확도로 Excel 수식을 파싱, 분석 및 탐색합니다.
XLParser란 무엇인가요?
XLParser는 Irony 파서 프레임워크를 기반으로 구축된 Microsoft Excel 수식을 파싱하기 위한 고정밀 C# 라이브러리입니다. 실제 세계의 수식 백만 개 이상에서 99.9%의 성공률을 제공하며, 스프레드시트 분석 및 리팩토링을 위해 특별히 설계되었습니다. 100개 미만의 토큰과 생산 규칙으로 구성된 컴팩트한 문법은 이해, 유지보수 또는 다른 언어로의 포팅을 쉽게 합니다. XLParser는 논문 “A Grammar for Spreadsheet Formulas Evaluated on Two Large Datasets”에 발표된 Excel 문법의 레퍼런스 구현이며, Enron 및 EUSES 벤치마크 데이터셋을 지원합니다.
XLParser는 컴팩트한 파스 트리를 생성하여 수식의 효율적인 순회, 분석 및 변환을 가능하게 합니다. 개발자는 `ExcelFormulaParser` 클래스를 사용하여 수식을 파싱하고 함수 이름, 참조 및 하위 표현식을 추출할 수 있습니다. `FormulaAnalyzer` 클래스는 `ParserReferences()`와 같은 고급 작업을 지원하여 모든 셀, 범위 및 이름이 지정된 참조를 가져올 수 있습니다. 연구 및 도구에 중점을 둔 XLParser는 스프레드시트 품질 보증, 수식 리팩토링 및 교육 도구에 이상적입니다. 온라인 데모를 사용해 보거나 NuGet을 통해 설치하거나 [XLParser GitHub](https://github.com/spreadsheetlab/XLParser)에서 소스 코드를 빌드할 수 있습니다.
XLParser 시작하기
XLParser는 NuGet을 통해 제공되며 패키지 관리자 콘솔 또는 Visual Studio의 NuGet UI를 사용하여 설치할 수 있습니다. 가장 간단한 방법은 패키지 관리자 콘솔에서 `Install-Package XLParser`를 실행하는 것입니다. 또는 [XLParser GitHub](https://github.com/spreadsheetlab/XLParser)에서 최신 릴리스를 다운로드하고 솔루션을 빌드한 뒤 DLL을 직접 참조할 수 있습니다. 이 라이브러리는 Irony 파서 프레임워크를 기반으로 하며 추가 종속성이 필요하지 않습니다. 설치가 완료되면 `ExcelFormulaParser` 클래스를 사용하여 Excel 수식을 파싱할 수 있습니다. 해당 클래스의 `Parse()` 메서드는 수식 문자열을 받아 파싱 트리를 반환하며, 이를 통해 추가 분석이나 변환을 수행할 수 있습니다.
NuGet을 통해 XLParser 설치
Install-Package XLParser높은 호환성을 갖춘 Excel 수식 파싱
XLParser는 백만 개가 넘는 실제 Excel 수식에서 99.9%의 성공적인 파싱 비율을 제공하여 가장 신뢰할 수 있는 C# 수식 파서 중 하나입니다. 널리 사용되는 Enron 및 EUSES 벤치마크 데이터셋을 통해 검증되었으며 복잡하고 중첩된 실제 수식을 처리하도록 설계되었습니다—배열 표현식, 참조 및 함수 등을 포함합니다. XLParser는 과도하게 제한적이지 않으며(Excel이 거부할 수 있는 일부 수식도 파싱할 수 있음) 이러한 관용은 연구 및 분석 용도에 의도된 것입니다. 개발자는 XLParser를 신뢰하여 프로덕션 스프레드시트에서 마주치는 대부분의 수식을 파싱할 수 있으며, 견고한 수식 분석, 리팩토링 및 품질 보증 워크플로를 가능하게 합니다. 컴팩트한 문법은 파서 프레임워크 전반에 걸쳐 유지 관리와 이식성을 보장합니다.
Excel 수식을 파싱하고 구문 트리를 검사하기
using XLParser;
var parser = new ExcelFormulaParser();
var tree = parser.Parse("SUM(A1:B10, C12)");
Console.WriteLine(tree.Print());Excel 수식에서 모든 참조 추출
XLParser는 `FormulaAnalyzer` 클래스를 포함하고 있으며, 파싱된 수식을 분석하기 위한 강력한 메서드를 제공합니다. 주요 기능 중 하나는 `ParserReferences()`로, 수식에서 사용된 모든 셀, 범위, 이름이 정의된 범위 및 가로/세로 참조를 반환합니다. 이는 의존성 추적, 영향 분석 및 리팩터링 도구에 매우 유용합니다. 예를 들어 `SUM(A1:B10, C12, NamedRange)`와 같은 수식이 주어지면, `ParserReferences()`는 `A1:B10`, `C12`, `NamedRange` 목록을 반환합니다. 이를 통해 개발자는 스프레드시트 감사 도구를 구축하고, 데이터 흐름을 시각화하거나 순환 의존성을 감지할 수 있습니다. 이 메서드는 컴팩트 파스 트리 구조와 원활하게 작동하여 대형 수식에서도 빠르고 정확한 추출을 보장합니다.
FormulaAnalyzer를 사용하여 모든 참조 추출
using XLParser;
var parser = new ExcelFormulaParser();
var tree = parser.Parse("SUM(A1:B10, C12, NamedRange)");
var analyzer = new FormulaAnalyzer(tree);
var references = analyzer.ParserReferences();
foreach (var refNode in references)
{
Console.WriteLine(refNode.Print());
}구문 트리를 순회하고 분석하기
XLParser의 파스 트리는 효율적인 순회와 분석을 위해 설계되었습니다. `ExcelFormulaParser` 클래스는 트리의 모든 노드를 순회할 수 있는 `AllNodes`와 같은 메서드를 제공하여 사용자 정의 분석, 변환 또는 검증 로직을 가능하게 합니다. 개발자는 노드 유형(예: 함수, 참조, 연산자)별로 필터링하고 함수 발생 횟수 계산, 사용되지 않은 이름 정의 범위 감지, 잠재적 오류 식별과 같은 작업을 수행할 수 있습니다. `GetFunction()` 메서드는 함수 호출 노드에서 함수 이름을 추출하는 작업을 단순화하고, `Print()`는 노드 구조를 빠르게 디버깅하거나 로그에 기록할 수 있게 합니다. 이러한 기능 덕분에 XLParser는 스프레드시트 품질 도구, 리팩토링 도우미 및 교육용 시각화 구축에 이상적입니다.
모든 노드를 순회하고 함수 이름 추출
using XLParser;
var parser = new ExcelFormulaParser();
var tree = parser.Parse("SUM(A1, A2) + AVERAGE(B1:B5)");
var functions = tree.AllNodes.Where(n => n.IsFunction());
foreach (var func in functions)
{
Console.WriteLine($"Function: {func.GetFunction()}");
}구문 트리를 디버그하고 시각화하기
XLParser는 대화형 디버깅 및 트리 시각화를 위해 Irony의 GrammarExplorer 도구와 긴밀하게 통합됩니다. XLParser와 GrammarExplorer 솔루션을 빌드한 후, `XLParser.dll`을 문법으로 로드하고 실시간으로 수식을 테스트할 수 있습니다. 개발 중에는 Visual Studio 디버거가 `yournode.Print(),ac`를 사용하여 감시 창을 통해 파스 트리 노드를 검사하는 것을 지원합니다. 이 기능은 복잡한 수식을 이해하고, 경계 사례를 테스트하며, 문법 규칙을 검증하는 속도를 높여줍니다. 컴팩트한 트리 구조는 깊게 중첩된 수식도 읽기 쉽고 관리하기 쉽게 보장합니다. 스프레드시트 분석 도구를 구축하든 Excel 수식 동작을 연구하든, XLParser의 디버깅 지원은 개발 및 문제 해결을 단순화합니다.
Visual Studio 감시 창에서 구문 트리 노드 디버깅
var tree = parser.Parse("IF(A1>0, A1*2, 0)");
// In Watch window: tree.Print(),ac