com.puppycrawl.tools.checkstyle.grammar.javadoc.JavadocLexer.g4 Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of checkstyle Show documentation
Show all versions of checkstyle Show documentation
Checkstyle is a development tool to help programmers write Java code
that adheres to a coding standard
lexer grammar JavadocLexer;
//Please add new tokens only in the end of list! Otherwise you break compatibility!
tokens {
LEADING_ASTERISK, HTML_COMMENT_START,
// Deprecated since https://github.com/checkstyle/checkstyle/issues/4937
DEPRECATED_CDATA_DO_NOT_USE,
WS, START, NEWLINE, AUTHOR_LITERAL, DEPRECATED_LITERAL, EXCEPTION_LITERAL,
PARAM_LITERAL, RETURN_LITERAL, SEE_LITERAL, SERIAL_LITERAL,
SERIAL_FIELD_LITERAL, SERIAL_DATA_LITERAL, SINCE_LITERAL, THROWS_LITERAL,
VERSION_LITERAL, JAVADOC_INLINE_TAG_START, JAVADOC_INLINE_TAG_END,
CUSTOM_NAME, LITERAL_INCLUDE, LITERAL_EXCLUDE, CHAR, PARAMETER_NAME, Char1,
STRING, PACKAGE_CLASS, DOT, HASH, CLASS, Char2, MEMBER,
LEFT_BRACE, RIGHT_BRACE, ARGUMENT, COMMA, Char20, FIELD_NAME,
Char3, FIELD_TYPE, Char4, CLASS_NAME, Char5, CODE_LITERAL,
DOC_ROOT_LITERAL, INHERIT_DOC_LITERAL, LINK_LITERAL, LINKPLAIN_LITERAL,
LITERAL_LITERAL, VALUE_LITERAL, Char7, Char8,
Char10, END, SLASH_END, SLASH, EQUALS, P_HTML_TAG_NAME,
LI_HTML_TAG_NAME, TR_HTML_TAG_NAME, TD_HTML_TAG_NAME, TH_HTML_TAG_NAME,
BODY_HTML_TAG_NAME, COLGROUP_HTML_TAG_NAME, DD_HTML_TAG_NAME,
DT_HTML_TAG_NAME, HEAD_HTML_TAG_NAME, HTML_HTML_TAG_NAME, OPTION_HTML_TAG_NAME,
TBODY_HTML_TAG_NAME, TFOOT_HTML_TAG_NAME, THEAD_HTML_TAG_NAME,
AREA_HTML_TAG_NAME, BASE_HTML_TAG_NAME, BASEFONT_HTML_TAG_NAME,
BR_HTML_TAG_NAME, COL_HTML_TAG_NAME, FRAME_HTML_TAG_NAME, HR_HTML_TAG_NAME,
IMG_HTML_TAG_NAME, INPUT_HTML_TAG_NAME, ISINDEX_HTML_TAG_NAME,
LINK_HTML_TAG_NAME, META_HTML_TAG_NAME, PARAM_HTML_TAG_NAME,
EMBED_HTML_TAG_NAME, KEYGEN_HTML_TAG_NAME, ATTR_VALUE, Char12,
HTML_COMMENT_END, SOURCE_HTML_TAG_NAME, TRACK_HTML_TAG_NAME,
WBR_HTML_TAG_NAME, OPTGROUP_HTML_TAG_NAME, RB_HTML_TAG_NAME,
RT_HTML_TAG_NAME, RTC_HTML_TAG_NAME, RP_HTML_TAG_NAME, HTML_TAG_NAME, Char11
}
@lexer::header {
import java.util.*;
import com.puppycrawl.tools.checkstyle.grammar.CrAwareLexerSimulator;
}
@lexer::members {
boolean recognizeXmlTags = true;
boolean isJavadocTagAvailable = true;
int insideJavadocInlineTag = 0;
boolean insidePreTag = false;
boolean referenceCatched = false;
boolean insideReferenceArguments = false;
boolean htmlTagNameCatched = false;
boolean attributeCatched = false;
int previousTokenType = 0;
int previousToPreviousTokenType = 0;
public void emit(Token token) {
super.emit(token);
previousToPreviousTokenType = previousTokenType;
previousTokenType = token.getType();
if (previousTokenType == NEWLINE) {
isJavadocTagAvailable = true;
} else if (previousTokenType != WS && previousTokenType != LEADING_ASTERISK) {
isJavadocTagAvailable = false;
}
}
public void skipCurrentTokenConsuming() {
_input.seek(_input.index() - 1);
}
/**
* We need to create a different constructor in order to use our
* own implementation of the LexerATNSimulator. This is the
* reason for the unused 'crAwareConstructor' argument.
*
* @param input the character stream to tokenize
* @param crAwareConstructor dummy parameter
*/
public JavadocLexer(CharStream input, boolean crAwareConstructor) {
super(input);
_interp = new CrAwareLexerSimulator(this, _ATN, _decisionToDFA, _sharedContextCache);
}
}
LEADING_ASTERISK : ( (' '|'\t') {_tokenStartCharPositionInLine == 0
|| previousTokenType == NEWLINE}? ) (' '|'\t')* '*'
| '*' {_tokenStartCharPositionInLine == 0 || previousTokenType == NEWLINE}?
;
HTML_COMMENT_START : '' -> mode(DEFAULT_MODE);
LeadingAst: LEADING_ASTERISK -> type(LEADING_ASTERISK);
Newline6: NEWLINE -> type(NEWLINE);
WhiteSpace: WS -> type(WS);
CommentChar: . -> type(CHAR);
mode xmlTagDefinition;
SOURCE_HTML_TAG_NAME: S O U R C E {!htmlTagNameCatched}? {htmlTagNameCatched=true;};
TRACK_HTML_TAG_NAME: T R A C K {!htmlTagNameCatched}? {htmlTagNameCatched=true;};
WBR_HTML_TAG_NAME: W B R {!htmlTagNameCatched}? {htmlTagNameCatched=true;};
OPTGROUP_HTML_TAG_NAME: O P T G R O U P {!htmlTagNameCatched}? {htmlTagNameCatched=true;};
RB_HTML_TAG_NAME: R B {!htmlTagNameCatched}? {htmlTagNameCatched=true;};
RT_HTML_TAG_NAME: R T {!htmlTagNameCatched}? {htmlTagNameCatched=true;};
RTC_HTML_TAG_NAME: R T C {!htmlTagNameCatched}? {htmlTagNameCatched=true;};
RP_HTML_TAG_NAME: R P {!htmlTagNameCatched}? {htmlTagNameCatched=true;};
// other tag names and attribute names
HTML_TAG_NAME: NAME_START_CHAR NAME_CHAR* {htmlTagNameCatched=true;};
LeadingLEADING_ASTERISK1: LEADING_ASTERISK -> type(LEADING_ASTERISK);
Newline1: NEWLINE -> type(NEWLINE);
WhiteSpace3: WS -> type(WS);
Char11: .
{
skipCurrentTokenConsuming();
htmlTagNameCatched = false;
} -> skip, mode(DEFAULT_MODE);