문제

이것은 한동안 나를 괴롭히고있는 것이 었습니다. Antlr을 사용하여 다음 텍스트를 아래의 HTML에 구문 분석하는 방법은 무엇입니까? 나는 이것에 전혀 머리를 감싸지 않는 것 같다.

어떤 아이디어?

가격 인하:

> first line
> second line
> > nested quote

출력 HTML :

<blockquote>
  <p>first line
  second line</p>
  <blockquote>
    <p>nested quote</p>
  </blockquote>
</blockquote>
도움이 되었습니까?

해결책

지난주 에이 문제를 해결하고 있었기 때문에 언급 한 것이 재밌습니다. 보다 JMD, Markdown 및 구문 분석 및 컴파일러에 대한 간단한 개요. 나는 진정한 마크 다운 파서를 작업하고 있으며 antlr로 그것을 시도했습니다.

이것을 다룰 수있는 몇 가지 방법이 있습니다.

먼저 당신은 단지 구문 분석 할 수 있습니다 :

BLOCK_QUOTE : '>' (' ' | '\t')? ;

그리고 구문 분석 단계에서, 아마도 다시 쓰기 규칙으로 해결하십시오.

이들은 줄의 시작 부분에 나타날 때만 중요하다는 것입니다. 여기에 또 다른 접근법이 있습니다.

@members {
  int quoteDepth = 0;
}

BLOCK_QUOTE : '\n' (q+='>' (' ' | '\t')?)+
  { if ($q.size() > quoteDepth) /* emit one or more START_QUOTE tokens */
    else if ($q.size() < quoteDepth /* emit one or more END_QUOTE tokens */
    quoteDepth = $q.size(); }

위는 어휘 규칙이 아닌 파서 규칙이어야 할 수도 있습니다. 잊었다.

그러나 마크 다운 소스를 일련의 선으로 취급해야하기 때문에 이것은 불만족 스럽습니다. 이는 실제로 다른 부분에서 원하는 것이 아닙니다.

또한 일반적으로 각 어휘 규칙은 하나의 토큰 만 발생할 수 있으므로 여러 개의 토큰을 방출 할 수 있도록 저를 탈출하는 다른 클래스를 덮어 써야합니다. (우수하고 거의 필요)에 이것의 예가 있습니다. 결정적인 Antlr 참조 : 구축 도메인 별 언어.

궁극적으로 나는 이것을 선택하는 도구로서 Antlr을 버렸다. 내 자신의 손으로 코딩 된 솔루션은 다음 주 또는 두 주 안에 희망적으로 나타나야합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top