/*
* Javadoc.g
* Copyright (c) 2007 David Holroyd
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
grammar JavaDoc;
options {
k=3;
output=AST;
language=Python;
ASTLabelType=CommonTree;
}
tokens {
JAVADOC;
INLINE_TAG;
DESCRIPTION;
PARA_TAG;
TEXT_LINE;
}
commentBody
: d=description paragraphTag* EOF
-> ^(JAVADOC description paragraphTag*)
;
description
: textLine*
-> ^(DESCRIPTION textLine*)
;
textLine
: textLineStart textLineContent* (NL | EOF!)
| NL
;
textLineStart
: (LBRACE ATWORD)=> inlineTag
| WORD | STARS | WS | LBRACE | RBRACE | AT
;
textLineContent
: (LBRACE ATWORD)=> inlineTag
| WORD | STARS | WS | LBRACE | RBRACE | AT | ATWORD
;
inlineTag
: LBRACE ATWORD inlineTagContent* RBRACE
-> ^(INLINE_TAG ATWORD inlineTagContent*)
;
inlineTagContent
: WORD | STARS | WS | AT | NL
;
paragraphTag
: ATWORD paragraphTagTail
-> ^(PARA_TAG ATWORD paragraphTagTail)
;
paragraphTagTail
: textLineContent* (NL textLine* | EOF)
-> textLineContent* NL? textLine*
;
STARS
: '*'+
;
LBRACE
: '{'
;
RBRACE
: '}'
;
AT
: '@'
;
WS
: (' ' | '\t')+
;
NL options {k=*;}
: ('\r\n' | '\r' | '\n') WS? (STARS WS?)?
;
ATWORD
: '@' WORD WORD_TAIL
;
WORD
: ~('\n' | ' ' | '\r' | '\t' | '{' | '}' | '@') WORD_TAIL
;
fragment WORD_TAIL
: (~('\n' | ' ' | '\r' | '\t' | '{' | '}'))*
;