ANTLR4

2016-07-26 4 views
0

이에 TreeListener 내에서 처리를 단순화하기 위해 다른 파서 규칙을 결합하면 내 문법 파일의 일부입니다 :ANTLR4

paragraph 
    : TEXT? italic TEXT? 
    | TEXT? STAR TEXT? 
    | TEXT? labelRef TEXT? 
    | TEXT? BRACE_OPEN TEXT? 
    | TEXT? LABEL TEXT? 
    | ELEMENTPATH 
    | TEXT 
    ; 

단락 규칙해야한다 "표시"내 섬 문법 내의 모든 단락 내가 p 개의 블록을 생성하기 원하기 때문에 생성 된 단락 요소를 중심으로 기술적으로 모든 다른 단락 요소가 인식됩니다.

다른 규칙으로 인해 청취자 내에서 다른 단락 호출이 발생한다는 것은 문제입니다. 이것은 다른 규칙들 때문에 완전히 논리 적이지만 청취자 내에서 트리를 매우 어렵게 처리합니다. 같은 단락에 대한 (예를 들어) 두 가지 항목이 이미지에서 찾을 수 있습니다 1.

enter image description here

입력 텍스트는 다음과 같습니다

Text text paragraph 1 text *italic* text and here the same paragraph with a * but a different entry in the tree.

그냥 한 단락 그러나 나는 나무를 처리하는 경우 출력 HTML에는 두 개의 단락이 포함됩니다.

다른 규칙 부분을 하나의 단락 호출에 결합하는 방법이 있습니까? 단 하나의 단락을 의미하는 경우 구문 분석 트리 내에 두 개의 다른 단락이 없어야합니다.

답변

1

paragraph 규칙은 한 번에 정의 된 하나의 문자열 만 인식하도록 설정됩니다. 첫 번째 문단은 TEXT italic TEXT이고 두 번째 문단은 STAR TEXT입니다.

물론

paragraph 
    : (TEXT? italic TEXT? 
     | TEXT? STAR TEXT? 
     | TEXT? labelRef TEXT? 
     | TEXT? BRACE_OPEN TEXT? 
     | TEXT? LABEL TEXT? 
     | ELEMENTPATH 
     | TEXT 
    )+ 
    ; 
+0

오보십시오! 이것에 대해 생각해 보지 않았습니다. 완벽하게 잘 작동합니다. 고마워요! – FDeitelhoff