2012-07-17 2 views
5

SQL로 변환 할 수있는 도메인 특정 언어가 있습니다. 필자 자신의 렉서, 파서 및 코드 생성기를 작성해야합니까, 아니면 저를 도울 수있는 도구가 있습니까?DSL을 SQL로 변환하기위한 올바른 도구는 무엇입니까?

+0

SQL에서 도메인 특정 언어 구문을 구문 분석 할 계획입니까? – alexm

+1

다시 말해 보겠습니다. SQL 생성을 수행 할 호스트 언어는 무엇입니까? – alexm

+0

정말 사용하는 언어와 DSL의 복잡성에 달려 있습니다. –

답변

0
당신이 그것에서 통역 사양을 수용하고 생성하기위한 것입니다 엘리 같은 것을 찾고있는 것 같습니다

:

http://eli-project.sourceforge.net/

반면에, 당신은 그냥 행복 할 수있다 파서를 ANTLR과 같은 멋진 생성 도구로 작성하고 AST 및 코드 생성기를 직접 코딩하십시오.

DSL의 번역이 간단하다고 가정 할 때 SQL과 같은 고급 언어를 작성하는 코드 생성은 아마도 구현하기가 어렵지 않습니다.

나인 경우 OCaml에서 ocamllex와 ocamlyacc를 사용하여 작성해야하지만 OCaml을 먼저 알아야합니다.

1

이것은 사용하는 언어에 따라 크게 다르지만 Groovy, Ruby, Scala, F # 및 Haskell은이 작업을 수행하는 데 적합한 언어입니다.

어떤 언어를 사용하면 어떤 도구를 사용해야하는지 영향을줍니다.

예를 들어 C에서이 작업을 수행 할 수 있지만 더 많은 작업이 수행 될 수 있으며 사용자에게는 좋지 않을 수 있습니다.

일부 언어는 파서를 돕기 위해 도구를 사용해야하며 일부 도구는 도구 없이는 더 효과적입니다.

DSL 주제 인 의 DSL 실행 방법에 대해 자세히 알아 보려면이 책을 읽는 것이 좋습니다. 당신의 DSL이 DSL 코더 쉽게 읽을 수 있도록 설계된 경우

http://manning.com/ghosh/

1

는 다음 네, 당신은 렉서, 파서 및 코드 생성기가 필요합니다.

(다른 답변은 "메타 언어"구문에서 DSL을 코딩하면 이러한 mechansims는 필요하지 않지만 사실 일 수는 있지만 메타 데이터에 DSL을 삽입 할 수 있도록 최적화합니다. 최종 사용자에 대한 가독성보다는 언어에 대한 이해가 떨어지는 것으로 나타났습니다.

아니요, 처음부터 다시 작성할 필요는 없습니다.

야생에있는 파서 생성기가 많이 있습니다 (YACC, Bison, ANTLR, JavaCC). DSL에 대한 문법 규칙 만 코딩하는 데 집중할 수 있습니다. 이들은 구문 분석 규칙을 처리 엔진으로 처리/실행하기 위해 많은 저수준 구문 분석 기계를 제공합니다. 아직도 ANALR/Bison/Yacc는 특정 파서 생성기 (LALR (1), LL (k), ...)의 한계에 맞게 개념 문법을 구부리기 위해 노력해야합니다. 이 작업을 수행하려면 명시 적으로 작업해야합니다. 그 후, 당신은 전통적인 파서로 당신 자신의 것입니다. 대부분의 사람들은 일단 거기에 도착하면 놀랄 것입니다. (실제 언어를 구하는 사람들이 예상보다 많은 일을하는 경향이 있습니다.)

Life After Parsing : 심볼 테이블, 코드 분석이 많기 때문입니다. , 코드 생성 DMS Software Reengineering Toolkit은 문법 엔진의 제약 조건을 최소화하면서 구문 분석 규칙을 작성하고 나무를 자동으로 작성 (모양, 손, 손 없음)하고 다양한 방법으로 코드 변환을 지원합니다.또한 DMS는 원본/대상 패턴 쌍을 사용하여 맵핑을 지정하는 방식으로 DSL ("your language") 조각과 대상 간의 변환을 지원하는 원근감 및 도구를 제공합니다. OP의 특정 목적을 위해 DMS는 SQL2011 문법으로 얻을 수 있으며 목표 패턴을 작성하기위한 좋은 기준을 제공합니다.

도구를 사용한 자동 변환에 대한 자세한 내용은 내 SO discussion on translating between languages을 참조하십시오.

0

올바른 메타 언어 (예 : Lisp)를 사용하는 경우 렉서, 파서 및 코드 생성기가 필요하지 않습니다. 모든 것이 이미 포함되어 있습니다 - S- 표현식 위에 DSL을 만들 수 있습니다. Lisp 자체에서 코드의 호스트 부분을 생성 할 수 있습니다.

DSL에 대한 특수 구문을 원한다해도 파서를 메타 언어에 포함시키는 것은 매우 쉽습니다.

2

The Pragmatic Programmers 시리즈의 Terence Parr에 의해 Language Implementation Patterns이 책을 읽을 수 있습니다. 파싱, 번역 및 컴파일에 대한 철저한 소개 예를 들어 ANTLR by Terence Parr에 많이 의존하지만, 다른 언어 및 시스템으로 쉽게 이동할 수 있습니다.

0

나는 당신과 비슷한 프로젝트를 가지고 있습니다. 나는 Eclipse에서 직접 사용할 수 있기 때문에 Xtext와 Xtend를 체크 아웃해야한다고 생각한다. intellisense, grammer, lexer를 쉽게 얻을 수있다. 나는 SQL 코드를 만들려고 노력했으며, 지금까지는 성공적이었습니다.

관련 문제