며칠 전, 저자가 .NET을 사용하는 일반적인 자연 언어 DSL 파서에 대한 아이디어를 토론하는 블로그 항목 (http://ayende.com/Blog/archive/2008/09/08/Implementing-generic-natural-language-DSL.aspx)을 읽었습니다.Java에서 자연 DSL을 만드는 가장 좋은 도구는 무엇입니까?
필자 생각으로는 텍스트가 구문 분석되고 문장과 동일한 이름을 사용하는 클래스와 일치한다는 것이 그의 아이디어의 가장 훌륭한 부분입니다.
다음 줄, 예를 들어 촬영 :
Create user user1 with email [email protected] and password test Log user1 in Take user1 to category t-shirts Make user1 add item Flower T-Shirt to cart Take user1 to checkout
구문 분석의 결과를한다 "알려진"개체의 컬렉션을 사용하여 변환 얻을 것입니다. 일부 예를 들어 객체는 (내 예를 들어 자바를 사용) 것입니다 : 첫 번째 문장을 처리 할 때
public class CreateUser {
private final String user;
private String email;
private String password;
public CreateUser(String user) {
this.user = user;
}
public void withEmail(String email) {
this.email = email;
}
public String andPassword(String password) {
this.password = password;
}
}
그래서, createuser가 클래스가 있기 때문에, (이 "사용자를 만듭니다"의 연결이야 분명하기 때문에) 일치하고 것 생성자에서 매개 변수를 사용하면 파서는 "user1"을 user 매개 변수로 사용합니다.
그 후 파서는 다음 부분 인 "with email"도 메소드 이름과 일치한다는 것을 식별하고 해당 메소드가 매개 변수를 취하므로 "[email protected]"을 email 매개 변수로 구문 분석합니다.
지금 생각해보십시오. 최소한 저에게는 분명히 응용 프로그램 테스터가 자연어로 "테스트 스크립트"를 만든 다음 JUnit을 사용하여 응용 프로그램 동작을 확인하는 클래스로 문장을 구문 분석 할 수 있습니다.
Java를 사용하여 파서를 코딩 할 수있는 도구 또는 리소스에 대한 아이디어, 팁 및 의견을 듣고 싶습니다. 우리가 복잡한 lexer 나 ANTLR과 같은 프레임 워크를 사용하는 것을 피할 수 있다면, 아마도 나는 파리를 죽이기 위해 망치를 사용할 것입니다.
누군가가 오픈 소스 프로젝트를 시작한다면, 나는 분명히 관심을 가질 것이다.
Glurk의 대답과 비슷합니다. 따라서 주석으로 : 실행 가능한 "자연스러운"언어 사양을 찾으려면 Cucumber (http://cukes.info/)를 시도해야합니다. JRuby (및 RSpec)와 함께 Java 기반 BDD (http://behaviour-driven.org/)에 사용할 수 있습니다. 대안으로는 EasyB 및 JBehave가 있습니다. –
DSL이란 무엇입니까? 비슷한 언어의 모호성 제거입니까? corporavm.uni-koeln.de/vardial/sharedtask.html을 참조하십시오. – alvas