Markdown Blockquote antlr을 사용한 파싱
-
20-09-2019 - |
문제
이것은 한동안 나를 괴롭히고있는 것이 었습니다. 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을 버렸다. 내 자신의 손으로 코딩 된 솔루션은 다음 주 또는 두 주 안에 희망적으로 나타나야합니다.