这已经东西是一直困扰着我一会儿。一个人如何去解析以下文本使用下面的ANTLR HTML?我似乎无法在所有的包裹我解决此头。

任何想法?

降价:

> first line
> second line
> > nested quote

输出HTML:

<blockquote>
  <p>first line
  second line</p>
  <blockquote>
    <p>nested quote</p>
  </blockquote>
</blockquote>
有帮助吗?

解决方案

滑稽你提到,因为我是上周刚刚解决这个问题。请参见 JMD,降价和解析的简要概述,并编译器的。我工作的一个真正的降价解析器和我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