All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.puppycrawl.tools.checkstyle.grammar.javadoc.JavadocLexer.g4 Maven / Gradle / Ivy

Go to download

Checkstyle is a development tool to help programmers write Java code that adheres to a coding standard

There is a newer version: 10.17.0
Show newest version
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);




© 2015 - 2024 Weber Informatics LLC | Privacy Policy