我喜欢解析的一个示例文本是这样的 -
@comment {
{ something }
{ something else }
}
基本上“@comment”是搜索的关键,之后是一对匹配的大括号。我不需要解析大括号之间的内容。由于这类似于 C' 多行注释,因此我的语法基于此:
grammar tryit;
tryit : top_cmd
;
WS : ('\t' | ' ')+ {$channel = HIDDEN;};
New_Line : ('\r' | '\n')+ {$channel = HIDDEN;};
top_cmd :cmds
;
cmds
: cmd+
;
cmd
: Comment
;
Comment
: AtComment Open_Brace ( options {greedy = false; }: . )+ Close_Brace
;
AtComment
: '@comment'
;
Open_Brace
: '{'
;
Close_Brace
: '}'
;
但是在 ANTLRWORKS 中进行测试时,我立即得到了 EarlyExitException。
你看出什么问题了吗?