2014-03-31 2 views
0

내가 원하는 것은 날짜의 세 가지 구성 요소를 구문 분석하고 각각을 고유 한 주석에 저장 한 다음 전체 구조를 나타내는 복잡한 구조를 만드는 것입니다. 나는 다음을 시도했지만 효과가 없었다. 내가 좋아하는 뭔가를 먹이RUTA : 날짜 -MM/dd/yyyy를 구문 분석하고 복잡한 구조로 저장하는 방법?

DECLARE Annotation CommDate (Annotation CMonth, Annotation CDate, Annotation CYear);  
DECLARE Annotation CommenceMonth; 
DECLARE Annotation CommenceYear; 
DECLARE Annotation CommenceDate; 

    NUM{REGEXP("[0-3]?[0-9]?") -> MARK(CommenceMonth)}; 
    CommenceMonth SPECIAL NUM{REGEXP("[0-3]?[0-9]?") -> MARK(CommenceDate)}; 
    CommenceDate SPECIAL NUM{REGEXP("19..|20..") -> MARK(CommenceYear)}; 

    CommenceMonth CommenceDate CommenceYear {-> CREATE(CommDate, 1,2,3, "CMonth" = 1, "CDate" = 2, "CYear" = 3) }; 

: 세 CommenceXXX 주석 값을 할당하고 있지만, "2014년 12월 31일는"복잡한 구조 CommDate 아니다.

답변

1

첫 번째 문제는 복잡한 주석을 만들기위한 마지막 규칙이 슬래시 (SPECIAL)를 놓쳤다는 것입니다. 슬래시는 다른 주석의 일부가 아니므로 마지막 규칙은 아직 없지만 슬래시가 있기 때문에 후속 CommenceDate에서 일치 할 수 없습니다. 룰은 CommenceDate와 CommenceYear 어노테이션에 슬래시가 포함되어 있거나 마지막 룰에 순차 패턴 슬래시가 포함되어있는 경우 작동합니다 (CommenceMonth SPECIAL CommenceDate SPECIAL CommenceYear...).

두 번째 문제는 CREATE 동작의 잘못된 사용법입니다. 지형지 물의 주석 값은 일치 작업 내에서 어노테이션을 찾기 위해 유형을 사용하여 CREATE 작업에 할당됩니다. 규칙 요소의 인덱스는 규칙 요소의 일치 컨텍스트 외부에 주석을 할당하기 위해 GATHER 작업에 사용됩니다.

당신은 당신의 문제를 해결하기 위해 이러한 방법으로, 예를 들어, 마지막 규칙을 다시 작성할 수

: 액션을 사용

수집 : 액션을 사용

CommenceMonth SPECIAL CommenceDate SPECIAL CommenceYear 
    {-> GATHER(CommDate, 1, 5, "CMonth" = 1, "CDate" = 3, "CYear" = 5) }; 

가 CREATE :

CommenceMonth SPECIAL CommenceDate SPECIAL CommenceYear 
    {-> CREATE(CommDate, 1, 5, "CMonth" = CommenceMonth, "CDate" = CommenceDate, "CYear" = CommenceYear) }; 

예제를 좀 더 간결하게 표현하면 (약간 다른 코드 스타일을 사용하지만 같은 패턴이 될 수 있습니다.)

DECLARE Month, Day, Year; 
DECLARE Annotation Date (Month month, Day day, Year year);  
(NUM{REGEXP("[0-3]?[0-9]?") -> Month} SPECIAL NUM{REGEXP("[0-3]?[0-9]?")-> Day} 
    SPECIAL NUM{REGEXP("19..|20..") -> Year}){-> CREATE(Date, "month" = Month, "day" = Day, "year" = Year)}; 
+0

안녕하세요 Peter, 두 번째 접근 방식을 시도하고 잘 작동합니다. 더 간단한 방법의 예가 있습니까? 고맙습니다. – user3471682

+0

답변에 전체 예제를 추가했습니다. –