누군가 언어 구현을 위해 모두 사용했으며 은 그것들을 비교할 수 있으며 약점과 을 지적 할 수 있습니까? AST 워커 코드 생성을 지원하는 RAD 도구를 찾습니다. SableCC는 LALR이므로 은 '왼쪽 재귀'를 지원하는 반면 ANTLR은 LL (*)을 지원합니다. 일반적인 문법이나 DSL에서는 이것이 중요한가? 일부 도메인 관련 분석을 수행하려면 이 필요합니다. (내 컴파일러의 목표는 OpenCL C가 될 것입니다). 학생 프로젝트에 대해서는 이 될 것이므로 지루한 측면에서 많은 시간을 낭비하지 않아야합니다. 즉, 언어의 프런트 엔드 을 구현하고 있습니다.DSL 구현을위한 ANTLR 또는 SableCC?
답변
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
그 대답은 "파서 생성기가 아닙니다"라고 생각합니다. 파싱을 심각하게 생각하고 * DSL 코드를 분석하는 경우, "단순한 구문 분석"엔진을 선택하는 것이 도움이되지 않는다는 것을 알게 될 것입니다. 파서 생성기와 마찬가지로 훨씬 더 많은 메커니즘이 필요합니다. 실제로 모든 메커니즘을 직접 구축하고 싶지는 않습니다. 파싱 후 생활에 대한 저의 에세이를보십시오 : http://www.semanticdesigns.com/Products/DMS/LifeAfterParsing.html –
예, 동의합니다. 파싱은 시작일뿐입니다. 한 번 대서양 표준시가 있으면 너무 많이 할 수 있습니다. 그래서 자동으로 생성 된 AST를 직접 작성하는 것보다 싶습니다. 나도 그렇게 생각해. 저는 파서와 컴파일러 전문가가 아니라 아마추어입니다. – lazyboy
SABLE도 ANTLR도 내 이해에 자동으로 AST를 생성하지 않습니다. SABLE이 다소 도움이된다고 암시하는 것 같습니다. Google의 DMS는 AST를 자동으로 생성합니다. 문법 파서 + AST 아웃. –
OpenCL을 타겟팅하는 경우 DSL의 피연산자 데이터 유형에 대해 많이 알 필요가 없습니까? 이는 ANTLR이나 SableCC가 특정 지원을 제공하지 않는 기호 테이블과 형식 유추를 의미합니다. 난 단지 당신이 당신의 DSL 툴을 선택해야한다는 것을 관찰하고 있습니다. * 필요한 모든 * 구문 분석 (어떻게 알 수 있습니까 ??) 다음 중 하나가 좋은 선택이 될 것입니다. –
지원되는 유일한 데이터 유형은 정수 연산이 대부분의 GPU 아키텍처에서 거의 빠르지 않기 때문에 단 정밀도 부동 소수점 숫자입니다. 나는 여전히 도메인 (Neuron 모델)에서 약간의 독서 작업을해야하지만 주로 나무를 걸어야 할 것이라고 생각합니다. SableCC가 방문자 디자인 패턴을 구현하는 클래스를 생성한다고 들었습니다. 반면 ANTLR에는 >>> 사용자 커뮤니티가 있으며 더 나은 자습서, 서적 및 문서를 얻을 수 있습니다. –
GPU 인 경우, 지원하고 있다고 생각하는 데이터 유형을 암시 적 또는 명시 적으로 배열해야합니다. 그렇지 않으면 계산 능력을 얻을 수 없습니다. 좋은 DSL이라면, 구현의 단 정밀도 부동 소수점에 대한 독주에 독이되지 않을 것입니다. 그래서 여러분은 int, 그리고 GPU가 아닌 * 문제 *에 적합한 다양한 정밀도 부동 수를 기대합니다. 당신이 학생이라면 무엇이든 할 수 있습니다. –