SQL로 변환 할 수있는 도메인 특정 언어가 있습니다. 필자 자신의 렉서, 파서 및 코드 생성기를 작성해야합니까, 아니면 저를 도울 수있는 도구가 있습니까?DSL을 SQL로 변환하기위한 올바른 도구는 무엇입니까?
는답변
:
http://eli-project.sourceforge.net/
반면에, 당신은 그냥 행복 할 수있다 파서를 ANTLR과 같은 멋진 생성 도구로 작성하고 AST 및 코드 생성기를 직접 코딩하십시오.
DSL의 번역이 간단하다고 가정 할 때 SQL과 같은 고급 언어를 작성하는 코드 생성은 아마도 구현하기가 어렵지 않습니다.
나인 경우 OCaml에서 ocamllex와 ocamlyacc를 사용하여 작성해야하지만 OCaml을 먼저 알아야합니다.
이것은 사용하는 언어에 따라 크게 다르지만 Groovy, Ruby, Scala, F # 및 Haskell은이 작업을 수행하는 데 적합한 언어입니다.
어떤 언어를 사용하면 어떤 도구를 사용해야하는지 영향을줍니다.
예를 들어 C에서이 작업을 수행 할 수 있지만 더 많은 작업이 수행 될 수 있으며 사용자에게는 좋지 않을 수 있습니다.
일부 언어는 파서를 돕기 위해 도구를 사용해야하며 일부 도구는 도구 없이는 더 효과적입니다.
DSL 주제 인 의 DSL 실행 방법에 대해 자세히 알아 보려면이 책을 읽는 것이 좋습니다. 당신의 DSL이 DSL 코더 쉽게 읽을 수 있도록 설계된 경우
는 다음 네, 당신은 렉서, 파서 및 코드 생성기가 필요합니다.
(다른 답변은 "메타 언어"구문에서 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을 참조하십시오.
올바른 메타 언어 (예 : Lisp)를 사용하는 경우 렉서, 파서 및 코드 생성기가 필요하지 않습니다. 모든 것이 이미 포함되어 있습니다 - S- 표현식 위에 DSL을 만들 수 있습니다. Lisp 자체에서 코드의 호스트 부분을 생성 할 수 있습니다.
DSL에 대한 특수 구문을 원한다해도 파서를 메타 언어에 포함시키는 것은 매우 쉽습니다.
The Pragmatic Programmers 시리즈의 Terence Parr에 의해 Language Implementation Patterns이 책을 읽을 수 있습니다. 파싱, 번역 및 컴파일에 대한 철저한 소개 예를 들어 ANTLR by Terence Parr에 많이 의존하지만, 다른 언어 및 시스템으로 쉽게 이동할 수 있습니다.
나는 당신과 비슷한 프로젝트를 가지고 있습니다. 나는 Eclipse에서 직접 사용할 수 있기 때문에 Xtext와 Xtend를 체크 아웃해야한다고 생각한다. intellisense, grammer, lexer를 쉽게 얻을 수있다. 나는 SQL 코드를 만들려고 노력했으며, 지금까지는 성공적이었습니다.
- 1. SAS를 SQL로 변환하기위한 도구가 있습니까?
- 2. Java에서 자연 DSL을 만드는 가장 좋은 도구는 무엇입니까?
- 3. C로 문자열 파싱 - 올바른 도구는 무엇입니까?
- 4. .NET에서 DSL을 구현하는 도구
- 5. Ruby에서 클래스리스 DSL을 만드는 방법은 무엇입니까?
- 6. 어떻게 통역사가 DSL을 사용합니까?
- 7. 문자열을 바이트 배열로 변환하기위한 적절한 인코딩은 무엇입니까
- 8. SQL로 select 문
- 9. linq에서 sql로 SQL 매개 변수에 올바른 데이터 형식을 사용하려면 어떻게해야합니까?
- 10. APEX에서 사용할보고 도구는 무엇입니까?
- 11. XAML을 최적화하는 도구는 무엇입니까?
- 12. 구문 검사를위한 도구는 무엇입니까?
- 13. 가르치는 빌드 도구는 무엇입니까?
- 14. 온라인 SVN 도구는 무엇입니까?
- 15. 애니메이션에 사용할 도구는 무엇입니까?
- 16. JavaScript를 생성하는 도구는 무엇입니까?
- 17. 선언 DSL을 중첩 함수 호출로 변환
- 18. 데이터베이스 정보와 시각 DSL을 채우기
- 19. DSL을 사용하여 C# 코드 생성
- 20. 요일을 주 단위로 변환하기위한 수학 공식은 무엇입니까
- 21. ppt에서 jpg로 변환하기위한 자바 라이브러리는 무엇입니까?
- 22. SQL로 시작
- 23. SQL로 가능합니까?
- 24. 주조는 SQL로
- 25. SQL로 가능합니까?
- 26. Autotools를 CMake로 변환하기위한 튜토리얼
- 27. 추적을 예외로 변환하기위한 라이브러리?
- 28. VB에서 단위 테스트를위한 가장 좋은 도구는 무엇입니까?
- 29. .net 프로그래머를위한 필수 도구는 무엇입니까?
- 30. 메모리 사용을 디버깅하는 도구는 무엇입니까?
SQL에서 도메인 특정 언어 구문을 구문 분석 할 계획입니까? – alexm
다시 말해 보겠습니다. SQL 생성을 수행 할 호스트 언어는 무엇입니까? – alexm
정말 사용하는 언어와 DSL의 복잡성에 달려 있습니다. –