MarkDown文件中的解析列表格式使用Antlr4

时间:2013-12-19 04:21:44

标签: markdown antlr4

我尝试用Antlr4解析MarkDown文本。为了方便我首先解析list视图。 我找到了一个关于它的网页。  http://www.cforcoding.com/2010/01/markdown-and-introduction-to-parsing.html

该网页中的语法对我来说似乎没问题,我将其更改为符合Antlr4格式:

grammar MarkDown;

listItem    : ORDERED inline NEWLINE
        | UNORDERED inline NEWLINE
        ;
inline      : (~ NEWLINE)+ ;
ORDERED     : DIGIT+ '.' (' ' | '\t')+ ;
UNORDERED   : ('*' | '-' | '+') (' ' | '\t')+ ;
DIGIT       : [0-9]+ ;

NEWLINE     : '\r'? '\n' ;

示例文件

1. abc
2. kljjkj
3. tree4545

但它不起作用,下面的错误信息

line 1:3 token recognition error at: 'a'
line 1:4 token recognition error at: 'b'
line 1:5 token recognition error at: 'c'
line 1:6 extraneous input '\r\n' expecting {ORDERED, UNORDERED, DIGIT}
line 2:3 token recognition error at: 'k'
line 2:4 token recognition error at: 'l'
line 2:5 token recognition error at: 'j'
line 2:6 token recognition error at: 'j'
line 2:7 token recognition error at: 'k'
line 2:8 token recognition error at: 'j'
(listItem 1.  (inline \r\n 2. ) \r\n)

你可以帮我解决这个问题吗?

1 个答案:

答案 0 :(得分:0)

在解析器规则中,~否定令牌,而不是字符。因此,inline会尝试匹配NEWLINE以外的任何令牌,ORDEREDUNORDEREDDIGIT

ANTLR抱怨输入"abc""kljjkj",...因为没有词法分析器规则与这些字符匹配。

虽然以下Q& A是关于ANTLR3的,但同样的规则适用于ANTLR4:Negating inside lexer- and parser rules