我已经写了一小部分ANTLR4语法:
grammar TestCombined;
NL
: [\r\n]
;
SUBHEADLINE
: '##' .*? '##'
;
HEADLINE
: '#' .*? '#'
;
LEAD
: '###' .*? '###'
;
SUBHEADING
: '####' .*? '####'
;
TEXT
: .+?
;
/* ---- */
dnpMD
: subheadline headline lead bodyElements*
;
subheadline
: SUBHEADLINE NL NL
;
headline
: HEADLINE NL NL
;
lead
: LEAD NL NL
;
subheading
: SUBHEADING
;
bodyElements
: TEXT
| subheading
;
前三种标题类型的效果非常好。感谢另一个问题(和答案),这对我来说比以前更清楚。
但是我理解了问题,为什么TEXT规则/令牌没有得到正确匹配。我是ANTLR4的新手,我想我错过了一些非常重要的东西,阻碍了我理解潜在的问题。
这是一个示例输入:
## Test ##
# Test123 #
### Test1234 ###
#### Another Test ####
this is not getting recognized.
我错过了什么?用ANTLR4写这些东西是不可能的吗?该文本可能包含更多语法元素,如 italic 和类似的东西。
答案 0 :(得分:0)
当前的解决方案看起来像这个词法分析器和语法规则:
lexer grammar dnpMDAuslagernLexer;
/*@members {
public static final int COMMENTS = 1;
}*/
NL
: [\r\n]
;
SUBHEADLINE
: '##' (~[\r\n])+? '##'
;
HEADLINE
: '#' ('\\#'|~[\r\n])+? '#'
;
LEAD
: '###' (~[\r\n])+? '###'
;
SUBHEADING
: '####' (~[\r\n])+? '####'
;
CAPTION
: '#####' (~[\r\n])+? '#####'
;
LISTING
: '~~~~~' .+? '~~~~~'
;
ELEMENTPATH
: '[[[[[' (~[\r\n])+? ']]]]]'
;
LABELREF
: '{##' (~[\r\n])+? '##}'
;
LABEL
: '{#' (~[\r\n])+? '#}'
;
ITALIC
: '*' (~[\r\n])+? '*'
;
SINGLE_COMMENT
: '//' (~[\r\n])+ -> channel(1)
;
MULTI_COMMENT
: '/*' .*? '*/' -> channel(1)
;
STAR
: '*'
;
BRACE_OPEN
: '{'
;
TEXT
: (~[\r\n*{])+
;
parser grammar dnpMDAuslagernParser;
options { tokenVocab=dnpMDAuslagernLexer; }
dnpMD
: head body
;
head
: subheadline headline lead
;
subheadline
: SUBHEADLINE NL+
;
headline
: HEADLINE NL+
;
lead
: LEAD
;
subheading
: SUBHEADING
;
caption
: CAPTION
;
listing
: LISTING (NL listingPath)? (NL label)? NL caption
;
image
: caption (NL label)? (NL imagePath)?
;
listingPath
: ELEMENTPATH
;
imagePath
: ELEMENTPATH
;
labelRef
: LABELREF
;
label
: LABEL
;
italic
: ITALIC
;
singleComment
: SINGLE_COMMENT
;
multiComment
: MULTI_COMMENT
;
paragraph
: TEXT? italic TEXT?
| TEXT? STAR TEXT?
| TEXT? labelRef TEXT?
| TEXT? BRACE_OPEN TEXT?
| TEXT? LABEL TEXT?
| ELEMENTPATH
| TEXT
;
newlines
: NL+
;
body
: bodyElements+
;
bodyElements
: singleComment
| multiComment
| paragraph
| subheading
| listing
| image
| newlines
;
这种语言工作正常,也许有人可以从中受益。
感谢所有帮助过的人! 费边