2011-12-15 7 views
2

누군가 언어 구현을 위해 모두 사용했으며 은 그것들을 비교할 수 있으며 약점과 을 지적 할 수 있습니까? AST 워커 코드 생성을 지원하는 RAD 도구를 찾습니다. SableCC는 LALR이므로 은 '왼쪽 재귀'를 지원하는 반면 ANTLR은 LL (*)을 지원합니다. 일반적인 문법이나 DSL에서는 이것이 중요한가? 일부 도메인 관련 분석을 수행하려면 이 필요합니다. (내 컴파일러의 목표는 OpenCL C가 될 것입니다). 학생 프로젝트에 대해서는 이 될 것이므로 지루한 측면에서 많은 시간을 낭비하지 않아야합니다. 즉, 언어의 프런트 엔드 을 구현하고 있습니다.DSL 구현을위한 ANTLR 또는 SableCC?

+0

OpenCL을 타겟팅하는 경우 DSL의 피연산자 데이터 유형에 대해 많이 알 필요가 없습니까? 이는 ANTLR이나 SableCC가 특정 지원을 제공하지 않는 기호 테이블과 형식 유추를 의미합니다. 난 단지 당신이 당신의 DSL 툴을 선택해야한다는 것을 관찰하고 있습니다. * 필요한 모든 * 구문 분석 (어떻게 알 수 있습니까 ??) 다음 중 하나가 좋은 선택이 될 것입니다. –

+0

지원되는 유일한 데이터 유형은 정수 연산이 대부분의 GPU 아키텍처에서 거의 빠르지 않기 때문에 단 정밀도 부동 소수점 숫자입니다. 나는 여전히 도메인 (Neuron 모델)에서 약간의 독서 작업을해야하지만 주로 나무를 걸어야 할 것이라고 생각합니다. SableCC가 방문자 디자인 패턴을 구현하는 클래스를 생성한다고 들었습니다. 반면 ANTLR에는 >>> 사용자 커뮤니티가 있으며 더 나은 자습서, 서적 및 문서를 얻을 수 있습니다. –

+1

GPU 인 경우, 지원하고 있다고 생각하는 데이터 유형을 암시 적 또는 명시 적으로 배열해야합니다. 그렇지 않으면 계산 능력을 얻을 수 없습니다. 좋은 DSL이라면, 구현의 단 정밀도 부동 소수점에 대한 독주에 독이되지 않을 것입니다. 그래서 여러분은 int, 그리고 GPU가 아닌 * 문제 *에 적합한 다양한 정밀도 부동 수를 기대합니다. 당신이 학생이라면 무엇이든 할 수 있습니다. –

답변

1

ANTLR에 대해서는 많이 말할 수 없지만 SableCC에 대한 정보는 충분합니다.

그것은 코드와 손으로 작성한 코드가 깨끗한 생성 된 파서를 생성

디자인은 방문자 패턴을 사용하여 분리하고, 추상 구문 트리에 콘크리트 구문 트리에서 변환 통합합니다. 결과적으로 파서가 입력을 성공적으로 파싱 한 후 설계자는 AST를 얻을 수 있고 트리를 거쳐 해당 노드에서 조치를 취할 수 있습니다.

디자이너는 먼저 문법을 작성하고 디버그하고 구체 구문 트리에서 추상 구문 트리로 변환을 최적화하려고합니다. 그는 확실한 AST를 가졌지 만 분리 된 클래스에 액션 코드를 작성할 수 있습니다. 따라서 설계자는 문법을 한 번만 작성하고 문법에 대한 더 많은 유형의 작업을 작성할 수 있습니다. 예를 들어 구문 강조, 구문 분석 및 코드 생성기에 한 번 사용할 수 있습니다. 나는 그것을 생산적인 시스템에서 해냈다. 그것은 아주 잘 작동합니다.

ANTLR을 사용하면 설계자는 AST를 생성 한 문법에 작업 코드를 추가하여 AST 트리를 구성한 다음 다른 방식으로 재사용 할 수 있습니다. 그러나 생성 된 코드와 직접 작성한 코드를 명확하게 구분할 수는 없습니다.

다른 측면은 IDE를 지원할 수도 있습니다. SableCC를 사용하면 코드를 분리 할 수 ​​있으므로 IDE의 자동 완성 기능을 쉽게 사용할 수 있습니다. (트릭)없이 LL (K) 파서 생성기이다 ANTLR에 대한 문법을 ​​작성 IMO 용이하므로

문법

SableCC는 LR (1) 파서 생성기이다. 나는 생각한다. (확실하지 않다) SableCC는 매우 인기있는 유일한 하나의 LR (1) 자바 파서 생성기이다. SableCC는 자바 (주류)에 파서를 생성 할 수 있습니다 동안

출력 파서

ANTLR은 다양한 언어로 파서를 생성 할 수 있습니다. 일부 플러그인/어댑터는 다른 언어로 파서를 생성하지만 저자 (http://www.mare.ee/indrek/sablecc/)에 따르면 너무 오래되었습니다. SableCC 4는 더 많이 생성 할 수 있지만 베타 버전이므로 심각한 프로젝트에는 권장되지 않습니다.

개발 지원

ANTLR의 모자 IDE는 문법을 작성합니다. 시각적 문법을 할 수있는 ANTLRWorks입니다 (토큰 또는 프로덕션의 정의로 이동). SableCC에는 그러한 도구가 없습니다. VIM 용 원시 구문 강조 스크립트와 Netbeans 용 불량 기능 플러그인이 있습니다.

결론 IMO 내가 큰 프로젝트에 대한 생각, 필요한 장기 유지 보수 SableCC은 ANTLR보다 더 적합합니다.

마틴 파울러 (Martin Fowler)는 SableCC에 대한 정보를 제공합니다. 여기에서 찾을 수 있습니다. http://martinfowler.com/bliki/HelloSablecc.html

+0

그 대답은 "파서 생성기가 아닙니다"라고 생각합니다. 파싱을 심각하게 생각하고 * DSL 코드를 분석하는 경우, "단순한 구문 분석"엔진을 선택하는 것이 도움이되지 않는다는 것을 알게 될 것입니다. 파서 생성기와 마찬가지로 훨씬 더 많은 메커니즘이 필요합니다. 실제로 모든 메커니즘을 직접 구축하고 싶지는 않습니다. 파싱 ​​후 생활에 대한 저의 에세이를보십시오 : http://www.semanticdesigns.com/Products/DMS/LifeAfterParsing.html –

+0

예, 동의합니다. 파싱은 시작일뿐입니다. 한 번 대서양 표준시가 있으면 너무 많이 할 수 있습니다. 그래서 자동으로 생성 된 AST를 직접 작성하는 것보다 싶습니다. 나도 그렇게 생각해. 저는 파서와 컴파일러 전문가가 아니라 아마추어입니다. – lazyboy

+0

SABLE도 ANTLR도 내 이해에 자동으로 AST를 생성하지 않습니다. SABLE이 다소 도움이된다고 암시하는 것 같습니다. Google의 DMS는 AST를 자동으로 생성합니다. 문법 파서 + AST 아웃. –