input:
= ab zx =
abc inline
XXX
== cd ==
zef
antlr syntax:
grammar bestpaper;
options {
output=AST;
ASTLabelType=CommonTree;
}
chapter
: (paragraph NEWLINE+)+;
paragraph
: heading NEWLINE+ content | heading;
heading
: SPACE? (heading1 | heading2 | heading3 | heading4 | heading5 | heading6) SPACE?;
heading1
: H1 SPACE title SPACE H1;
heading2
: H2 SPACE title SPACE H2;
heading3
: H3 SPACE title SPACE H3;
heading4
: H4 SPACE title SPACE H4;
heading5
: H5 SPACE title SPACE H5;
heading6
: H6 SPACE title SPACE H6;
title
: (WORD SPACE)* WORD;
content
: (line NEWLINE)* line;
line
: SPACE? (WORD SPACE)* WORD SPACE? | SPACE;
H1
: '=';
H2
: '==';
H3
: '===';
H4
: '====';
H5
: '=====';
H6
: '======';
INT
: ('1'..'9')('0'..'9')* | '0';
NEWLINE
: '\r'? '\n' ;
SPACE
: (' ' | '\t')+;
WORD
: (~('\r' | '\n' | ' ' | '\t'))+;
parse tree:

本文介绍了一个使用ANTLR进行语法解析的具体示例,展示了如何定义语法规则、生成解析器及语法树的过程。通过ANTLR的语法文件定义了不同层级的标题结构,并解析了一段包含标题和内容的示例文本。
2715

被折叠的 条评论
为什么被折叠?



