2014-06-10 3 views
0

Rascal을 사용하여 VS COBOL II의 사양을 시도하고 있습니다. COBOL에는 순열 구문 (permutation phrase)이 많은 구문이 있는데, 이는 순열 구문 구문 < < ..으로 직접 SDF에서 처리됩니다. 나는 이것이 Rascal을 사용하여 어떻게 이루어 졌는지를 알 수 없었다. 나는 확실히 초보자이지만 나는 이것에 대한 답을 찾을 수 없었다.Rascal 구문 사양에서 SDF2 순열 구문 (<<..>>)을 표현하는 방법

+0

멋진 생각. 완료되면 문법을 공유 할 수 있기를 바랍니다. Rascal의 우선 순위 메커니즘이 SDF2와 다르기 때문에 연락을 유지하십시오. 우리는 매달린 구성에 대한 자동화 된 명확성을 추가 할 계획입니다. 지금 당장은 가장 긴 일치를 얻기 위해'! >>'메커니즘을 사용하는 것이 가장 좋습니다. – jurgenv

답변

0

SDF2에있는 것처럼 존재하지 않는다고 생각합니다. 내가 :-)

어쨌든 약 8 년 전에이 기능을 제거 기억 때문하지만 SDF2의 아주 오래된 버전이어야합니다, 우리는과 같이 비열한에서 매개 변수가 아닌 단말기의 몇 가지를 사용하여 시뮬레이션 할 수 있습니다 :

syntax Perm2[&T, &U] 
    = &T &U 
    | &U &T 
    ; 

syntax Perm3[&T, &U, &V] 
    = &T &U &V 
    | &T &V &U 
    | &U &T &V 
    | &U &V &T 
    | &V &T &U 
    | &V &U &T 
    ; 

멋진 기능 요청일까요? 또는 끌어 오기 요청 ;-)

+0

거의 완벽합니다. permutations() 함수와 함께이 타입을 생성 할 수있었습니다 ... 최대 Perm6 (720 개 선택)까지. 7에서 5000 개가 넘는 선택을하면 시스템이 질식을합니다 .-(그러나 분석/변형을 구문 분석하는 제 시나리오를 생각해 보면,이 모든 것을 피하고 사용하는 것 (choice1 | choice2 | ... choicen) * 주어진 선택의 중복 된 사용을 표시하려고하지 않습니다 ... – user3727131

+0

사실 대개 aproximation에 대한 구문은 이러한 경우에 충분히 좋으며 약간의 좋지 않은 오류 메시지도 허용합니다 :-) 트리거 할 "action"함수를 작성할 수 있습니다 중복을 테스트하고 의미있는 예외를 throw하도록 파싱 한 후 – jurgenv