我尝试用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)
你可以帮我解决这个问题吗?
答案 0 :(得分:0)
在解析器规则中,~
否定令牌,而不是字符。因此,inline
会尝试匹配NEWLINE
以外的任何令牌,ORDERED
,UNORDERED
或DIGIT
。
ANTLR抱怨输入"abc"
,"kljjkj"
,...因为没有词法分析器规则与这些字符匹配。
虽然以下Q& A是关于ANTLR3的,但同样的规则适用于ANTLR4:Negating inside lexer- and parser rules