2016-10-21 6 views
2

nattys와 비슷한 새로운 antlr 문법을 연구 중이며 날짜 표현을 인식해야하지만 건너 뛰기 규칙에 문제가 있습니다. 좀 더 자세하게 예를 들어 쓸데없는 "및"을 무시하고 싶습니다."및"건너 뛰기 규칙을 건너 뛰는 방법?

Sam, John, Adam에게 전화를 걸어 월요일과 금요일에 재정에 관한 Sarah와의 회의를 고쳐주십시오.

처음 두 개의 "와"는 쓸모가 없습니다. 이 문제를 해결하기 위해 규칙을 작성했지만 제대로 작동하지 않았습니다. 이유가 무엇입니까? 나는 어떻게해야합니까?

NW : [~WeekDay]; 
    UselessAnd : AND NW -> skip; 
+0

그런 조각화되지 않은 렉서 규칙을 작성할 수 있다고 생각하지 않습니다. – Mephy

+0

@Mphy 그래서 어떻게해야합니까? 쓸데없는 식으로 구문을 분석하기 때문에이 문제를 해결해야합니다. 코드 블록으로이 문제를 해결할 수 있습니까? –

+0

ANTLR의 렉서에서 한 단어 만 부정 할 수 없습니다. 단 하나의 문자 만 사용할 수 있습니다. '[~ WeekDay]'는'~','W','e','k','D','a' 또는'y' 중 하나와 일치합니다. 'W','e','k','D','a' 및'y' 제외). 그러나 ANTLR은 자연어를 구문 분석하는 데 적합하지 않습니다. 나는 당신이 "자연 언어 처리"에 대한 검색을 제안합니다. Natty는 게시 한 문장 전체를 구문 분석하지 않습니다. –

답변

4

"쓸모없는 AND"는 의미 개념입니다.

문법은 구문에 관한 것이므로 의미 문제를 제대로 처리하지 못합니다. 이 두 개를 함께 사용하지 마십시오.

제안 : 언어에 대한 문법을 ​​작성할 때 파서가 해당 언어를 그대로 수락하도록하십시오. 귀하의 경우에는 쓸모없는 AND를 "수집"하는 것이 좋습니다. 그렇게하면 문법을 유지해야하는 다음 코더에게 문법을 "쉽게"더 쉽고 투명하게 얻을 수 있습니다.

일단 AST를 사용하면 의미 상으로 쓸모없는 것들을 무시하기가 쉽습니다. 다른 것이 없다면 AST를 후 처리하고 쓸모없는 AND 노드를 제거 할 수 있습니다.

+2

내 단어가 정확하게. 구문 도구 (파서)가 의미 작업을 수행하도록하지 마십시오. 그것은 그것을 위해 만들어지지 않았습니다. –