/* The following code was generated by JFlex 1.7.0 tweaked for IntelliJ platform */

package com.tang.intellij.lua.comment.lexer;

import com.intellij.lexer.FlexLexer;
import com.intellij.psi.tree.IElementType;
import com.tang.intellij.lua.comment.psi.LuaDocTypes;
import java.util.Stack;

/**
 * This class is a scanner generated by 
 * <a href="http://www.jflex.de/">JFlex</a> 1.7.0
 * from the specification file <tt>doc.flex</tt>
 */
public class _LuaDocLexer implements FlexLexer, LuaDocTypes {

  /** This character denotes the end of file */
  public static final int YYEOF = -1;

  /** initial size of the lookahead buffer */
  private static final int ZZ_BUFFERSIZE = 16384;

  /** lexical states */
  public static final int YYINITIAL = 0;
  public static final int xTAG = 2;
  public static final int xTAG_WITH_ID = 4;
  public static final int xTAG_NAME = 6;
  public static final int xCOMMENT_STRING = 8;
  public static final int xPARAM = 10;
  public static final int xTYPE_REF = 12;
  public static final int xCLASS = 14;
  public static final int xCLASS_EXTEND = 16;
  public static final int xFIELD = 18;
  public static final int xFIELD_ID = 20;
  public static final int xGENERIC = 22;
  public static final int xALIAS = 24;
  public static final int xSUPPRESS = 26;
  public static final int xDOUBLE_QUOTED_STRING = 28;
  public static final int xSINGLE_QUOTED_STRING = 30;

  /**
   * ZZ_LEXSTATE[l] is the state in the DFA for the lexical state l
   * ZZ_LEXSTATE[l+1] is the state in the DFA for the lexical state l
   *                  at the beginning of a line
   * l is of the form l = 2*k, k a non negative integer
   */
  private static final int ZZ_LEXSTATE[] = { 
     0,  0,  1,  1,  2,  2,  3,  3,  4,  4,  5,  5,  6,  6,  7,  7, 
     8,  8,  9,  9, 10, 10, 11, 11, 12, 12, 13, 13, 14, 14, 15, 15
  };

  /** 
   * Translates characters to character classes
   * Chosen bits are [12, 6, 3]
   * Total runtime size is 18512 bytes
   */
  public static int ZZ_CMAP(int ch) {
    return ZZ_CMAP_A[(ZZ_CMAP_Y[(ZZ_CMAP_Z[ch>>9]<<6)|((ch>>3)&0x3f)]<<3)|(ch&0x7)];
  }

  /* The ZZ_CMAP_Z table has 2176 entries */
  static final char ZZ_CMAP_Z[] = zzUnpackCMap(
    "\1\0\1\1\1\2\1\3\1\4\1\5\1\6\1\7\1\10\1\11\1\12\1\13\1\14\1\15\1\16\1\17\1"+
    "\20\5\21\1\22\1\23\1\24\1\21\14\25\1\26\50\25\1\27\2\25\1\30\1\31\1\32\1\33"+
    "\25\25\1\34\20\21\1\35\1\36\1\37\1\40\1\41\1\42\1\43\1\44\1\45\1\46\1\47\1"+
    "\50\1\51\1\52\1\53\1\54\1\55\1\56\1\57\1\60\1\25\1\61\1\62\5\21\2\25\1\63"+
    "\7\21\1\25\1\64\20\21\1\25\1\65\1\21\1\66\13\25\1\67\2\25\1\70\21\21\1\71"+
    "\1\72\4\21\1\73\11\21\1\74\1\75\1\76\1\77\1\21\1\100\2\21\1\101\1\102\2\21"+
    "\1\103\1\21\1\104\1\105\5\21\1\106\2\21\123\25\1\107\7\25\1\110\1\111\12\25"+
    "\1\112\15\25\1\113\6\21\1\25\1\114\2\21\11\25\1\115\u0576\21\1\116\u017f\21");

  /* The ZZ_CMAP_Y table has 5056 entries */
  static final char ZZ_CMAP_Y[] = zzUnpackCMap(
    "\1\0\1\1\1\0\1\2\1\3\1\4\1\0\1\5\1\6\2\7\1\10\1\11\1\12\1\13\1\14\1\15\3\0"+
    "\1\16\1\17\1\20\1\21\2\7\1\22\3\7\1\22\71\7\1\23\1\7\1\24\1\25\1\26\1\27\2"+
    "\25\16\0\1\30\1\31\1\32\1\33\2\7\1\34\11\7\1\35\21\7\1\36\1\37\24\7\1\40\3"+
    "\7\1\22\1\41\5\7\1\42\1\43\4\0\1\44\1\45\1\25\3\7\1\46\1\47\1\25\1\50\1\51"+
    "\1\0\1\52\5\7\1\53\3\0\1\54\1\55\13\7\1\56\1\44\1\57\1\60\1\0\1\61\1\25\1"+
    "\62\1\63\3\7\3\0\1\64\12\7\1\65\1\0\1\66\1\25\1\0\1\67\3\7\1\53\1\70\1\71"+
    "\2\7\1\65\1\72\1\73\1\74\2\25\3\7\1\75\1\7\1\47\6\25\2\7\1\30\2\7\1\25\1\76"+
    "\5\0\1\77\6\7\1\100\2\0\1\101\1\7\1\102\1\0\1\40\1\7\1\103\1\104\1\105\2\7"+
    "\1\106\1\107\1\110\1\111\1\112\1\62\1\113\1\102\1\0\1\114\1\115\1\116\1\46"+
    "\1\105\2\7\1\106\1\117\1\120\1\121\1\122\1\123\1\124\1\125\1\0\1\126\1\25"+
    "\1\116\1\35\1\34\2\7\1\106\1\127\1\110\1\44\1\130\1\131\1\25\1\102\1\0\1\41"+
    "\1\132\1\116\1\104\1\105\2\7\1\106\1\127\1\110\1\111\1\122\1\133\1\113\1\102"+
    "\1\0\1\41\1\25\1\134\1\135\1\136\1\137\1\140\1\135\1\7\1\141\1\142\1\143\1"+
    "\144\1\25\1\125\1\0\1\25\1\41\1\145\1\30\1\106\2\7\1\106\1\7\1\146\1\147\1"+
    "\143\1\150\1\47\1\102\1\0\2\25\1\103\1\30\1\106\2\7\1\106\1\151\1\110\1\147"+
    "\1\143\1\150\1\32\1\102\1\0\1\152\1\25\1\77\1\30\1\106\4\7\1\153\1\147\1\154"+
    "\1\155\1\156\1\102\1\0\1\25\1\37\1\116\1\7\1\22\1\37\2\7\1\34\1\157\1\22\1"+
    "\160\1\161\1\0\1\125\1\0\1\162\1\25\1\40\5\7\1\163\1\164\1\165\1\166\1\0\1"+
    "\167\4\25\1\137\1\170\2\7\1\171\1\7\1\163\1\172\1\173\1\50\1\0\1\174\4\25"+
    "\1\131\2\25\1\167\1\0\1\167\1\175\1\176\1\7\1\40\3\7\1\26\1\43\1\0\1\147\1"+
    "\177\1\0\1\43\3\0\1\200\1\201\7\25\5\7\1\53\1\0\1\202\1\0\1\167\1\65\1\203"+
    "\1\204\1\205\1\206\1\7\1\207\1\210\1\0\1\50\4\7\1\35\1\20\5\7\1\170\51\7\1"+
    "\136\1\22\1\136\5\7\1\136\4\7\1\136\1\22\1\136\1\7\1\22\7\7\1\136\10\7\1\211"+
    "\4\25\2\7\2\25\12\7\2\212\1\40\114\7\1\104\2\7\1\213\2\7\1\47\11\7\1\135\1"+
    "\7\1\131\1\7\1\30\1\214\1\25\2\7\1\214\1\25\2\7\1\215\1\25\1\7\1\30\1\216"+
    "\1\25\6\7\1\217\3\0\1\220\1\221\1\0\1\167\3\25\1\222\1\0\1\167\13\7\1\131"+
    "\1\223\4\7\1\224\10\7\1\212\1\25\3\7\1\22\1\0\1\2\1\0\1\2\1\125\1\0\3\7\1"+
    "\212\1\26\1\25\5\7\1\114\3\7\1\24\1\0\1\167\4\25\2\7\1\165\1\2\6\7\1\177\1"+
    "\166\3\0\1\111\1\0\1\167\1\0\1\167\1\156\1\25\1\0\1\44\1\225\7\25\1\145\5"+
    "\7\1\217\1\0\1\145\1\114\1\0\1\167\1\25\1\76\1\2\1\25\1\226\3\7\1\101\1\205"+
    "\1\0\1\67\4\7\1\65\1\0\1\2\1\25\4\7\1\217\2\0\1\25\1\0\1\227\1\0\1\67\3\7"+
    "\1\212\1\7\1\131\5\7\1\230\2\25\1\231\2\0\1\232\1\233\1\234\30\7\7\0\1\235"+
    "\42\7\2\212\4\7\2\212\1\7\1\236\3\7\1\212\6\7\1\30\1\173\1\237\1\26\1\240"+
    "\1\114\1\7\1\26\1\237\1\26\1\241\1\242\3\25\1\243\1\25\1\156\1\131\1\25\1"+
    "\244\1\245\1\147\1\0\1\41\1\156\2\25\1\7\1\26\4\7\2\25\1\0\1\200\1\246\1\0"+
    "\1\225\1\25\1\247\1\37\1\157\1\250\1\27\1\251\1\7\1\252\1\253\1\254\2\25\5"+
    "\7\1\131\116\25\5\7\1\22\5\7\1\22\20\7\1\26\1\255\1\256\1\25\4\7\1\35\1\20"+
    "\7\7\1\156\1\25\1\62\2\7\1\22\1\25\10\22\4\0\5\25\1\156\72\25\1\257\3\25\1"+
    "\40\1\207\1\250\1\26\1\40\11\7\1\22\1\260\1\40\12\7\1\170\1\253\5\7\1\40\12"+
    "\7\1\22\2\25\4\7\6\25\172\7\10\25\77\7\1\26\21\7\1\26\10\25\5\7\1\212\41\7"+
    "\1\26\2\7\1\0\1\256\2\25\5\7\1\165\1\261\1\262\3\7\1\65\12\7\1\167\3\25\1"+
    "\156\1\7\1\37\14\7\1\105\6\7\1\37\1\47\4\25\1\253\1\7\1\263\1\264\2\7\1\53"+
    "\1\265\1\25\1\131\6\7\1\114\1\25\1\67\5\7\1\217\1\0\1\50\1\25\1\0\1\167\2"+
    "\0\1\67\1\266\1\0\1\67\2\7\1\65\1\50\2\7\1\165\1\0\1\2\1\25\3\7\1\26\1\77"+
    "\5\7\1\53\1\0\1\225\1\156\1\0\1\167\1\267\1\7\1\0\1\270\5\7\1\101\1\166\1"+
    "\25\1\264\1\271\1\0\1\167\2\7\1\22\1\272\6\7\1\204\1\273\1\224\2\25\1\274"+
    "\1\7\1\53\1\275\1\25\3\276\1\25\2\22\5\7\1\170\1\7\1\24\16\7\1\53\1\277\1"+
    "\0\1\167\64\7\1\114\1\25\2\7\1\22\1\300\5\7\1\114\40\25\55\7\1\212\15\7\1"+
    "\24\4\25\1\22\1\25\1\300\1\301\1\7\1\106\1\22\1\173\1\302\15\7\1\24\3\25\1"+
    "\300\54\7\1\212\2\25\10\7\1\37\6\7\5\25\1\7\1\26\2\0\2\25\2\0\1\140\2\25\1"+
    "\253\3\25\1\41\1\30\20\7\1\303\1\244\1\25\1\0\1\167\1\40\2\7\1\46\1\40\2\7"+
    "\1\47\1\304\12\7\1\22\3\37\1\305\1\306\2\25\1\307\1\7\1\151\2\7\1\22\2\7\1"+
    "\310\1\7\1\212\1\7\1\212\4\25\17\7\1\47\10\25\6\7\1\26\20\25\1\311\20\25\3"+
    "\7\1\26\6\7\1\131\1\25\1\225\3\25\4\7\1\25\1\253\3\7\1\47\4\7\1\65\1\312\3"+
    "\7\1\212\4\7\1\114\1\7\1\250\5\25\23\7\1\212\1\0\1\167\4\7\1\114\4\7\1\114"+
    "\5\7\1\25\6\7\1\114\23\25\46\7\1\22\1\25\2\7\1\212\1\25\1\7\23\25\1\212\1"+
    "\106\4\7\1\35\1\313\2\7\1\212\1\25\2\7\1\22\1\25\3\7\1\22\10\25\2\7\1\314"+
    "\1\25\2\7\1\212\1\25\3\7\1\24\10\25\7\7\1\304\10\25\1\315\1\261\1\151\1\40"+
    "\2\7\1\212\1\121\4\25\3\7\1\26\3\7\1\26\4\25\1\7\1\40\2\7\1\316\3\25\6\7\1"+
    "\212\1\25\2\7\1\212\1\25\2\7\1\47\1\25\2\7\1\24\15\25\11\7\1\131\6\25\6\7"+
    "\1\47\1\25\6\7\1\47\1\25\4\7\1\217\1\25\1\0\1\167\50\25\5\7\1\317\1\24\11"+
    "\25\3\7\1\26\1\156\1\25\2\7\1\65\1\0\1\225\13\25\2\7\1\26\3\25\2\7\1\22\1"+
    "\25\1\226\6\7\1\0\1\166\3\25\1\125\1\0\1\25\1\62\1\226\5\7\1\0\1\320\1\25"+
    "\1\311\3\7\1\131\1\0\1\167\1\226\3\7\1\165\1\0\1\147\1\0\1\321\1\25\4\7\1"+
    "\322\1\25\1\226\5\7\1\53\1\0\1\323\1\324\1\0\1\325\4\25\2\7\1\34\2\7\1\217"+
    "\1\0\1\201\10\25\1\22\1\251\1\7\1\35\1\7\1\131\5\7\1\165\1\0\1\312\1\0\1\167"+
    "\1\326\1\104\1\105\2\7\1\106\1\127\1\327\1\111\1\122\1\144\1\253\1\102\2\200"+
    "\21\25\6\7\1\177\1\0\1\202\1\47\1\0\1\330\1\24\3\25\6\7\2\0\1\331\1\25\1\0"+
    "\1\167\24\25\5\7\1\165\1\50\1\0\1\225\2\25\1\271\4\25\6\7\2\0\1\332\1\25\1"+
    "\0\1\167\4\25\5\7\1\53\1\0\1\131\1\0\1\167\6\25\3\7\1\211\1\0\1\2\1\0\1\167"+
    "\30\25\5\7\1\217\1\0\1\312\14\25\10\7\1\0\1\167\1\25\1\156\1\22\1\333\1\334"+
    "\3\7\1\44\1\335\1\336\1\25\1\0\1\167\10\25\1\7\1\37\4\7\1\101\1\337\1\340"+
    "\3\25\1\101\1\226\4\7\1\53\1\341\1\62\1\25\1\101\1\77\5\7\1\207\1\0\1\342"+
    "\4\25\7\7\1\131\40\25\1\7\1\106\3\7\1\165\1\166\1\0\1\131\1\25\1\0\1\167\2"+
    "\25\1\37\3\7\1\337\2\0\1\43\1\166\11\25\1\22\1\34\4\7\1\343\1\344\1\210\1"+
    "\25\1\0\1\167\1\35\1\106\3\7\1\345\1\235\1\131\1\0\1\167\46\25\2\7\1\346\27"+
    "\25\1\131\4\25\1\253\1\131\3\25\63\7\1\24\14\25\15\7\1\22\2\25\30\7\1\114"+
    "\27\25\5\7\1\22\1\0\1\225\70\25\10\7\1\22\67\25\7\7\1\131\3\7\1\22\1\0\1\167"+
    "\14\25\3\7\1\212\1\200\1\25\6\7\1\166\1\25\1\114\1\25\1\0\1\167\1\300\2\7"+
    "\1\253\2\7\26\25\10\7\20\25\11\7\1\347\1\101\6\0\1\62\1\226\1\7\10\25\1\350"+
    "\1\25\1\167\1\25\77\7\1\25\32\7\1\212\5\25\1\7\1\131\36\25\43\7\1\22\6\25"+
    "\1\47\1\25\1\351\1\25\61\7\1\114\40\25\15\7\1\47\1\7\1\26\1\7\1\131\1\7\1"+
    "\352\1\2\127\25\1\133\1\353\2\0\1\354\1\2\3\25\1\355\22\25\1\356\67\25\12"+
    "\7\1\30\10\7\1\30\1\357\1\360\1\7\1\361\1\151\7\7\1\35\1\230\2\30\3\7\1\362"+
    "\1\173\1\37\1\106\51\7\1\212\3\7\1\106\2\7\1\170\3\7\1\170\2\7\1\30\3\7\1"+
    "\30\2\7\1\22\3\7\1\22\3\7\1\106\3\7\1\106\2\7\1\170\1\363\14\0\1\166\1\76"+
    "\5\0\1\200\1\311\1\25\1\265\2\25\1\76\1\43\1\0\52\25\1\166\2\0\1\364\1\365"+
    "\1\312\32\25\5\7\1\26\1\202\1\212\1\0\1\366\56\25\5\7\1\217\1\0\1\367\40\25"+
    "\30\7\1\26\1\25\1\166\5\25\10\7\1\217\1\370\1\0\1\167\52\25\1\131\51\25\1"+
    "\151\3\7\1\371\1\40\1\170\1\372\1\247\1\373\1\371\1\236\1\371\2\170\1\124"+
    "\1\7\1\34\1\7\1\114\1\374\1\34\1\7\1\114\146\25\1\0\1\167\33\7\1\212\4\25"+
    "\106\7\1\26\1\25\33\7\1\212\120\7\1\24\1\25\146\7\1\131\3\25\3\7\1\212\74"+
    "\25\51\7\1\47\26\25\1\123\3\25\14\0\20\25\36\0\2\25");

  /* The ZZ_CMAP_A table has 2024 entries */
  static final char ZZ_CMAP_A[] = zzUnpackCMap(
    "\11\15\1\4\1\2\1\17\1\4\1\1\6\15\4\14\1\3\1\14\1\12\1\56\1\5\2\14\1\16\1\50"+
    "\1\51\2\14\1\43\1\11\1\7\1\14\2\15\1\44\1\14\1\46\1\14\1\47\1\14\1\10\22\5"+
    "\1\54\1\13\1\55\1\14\1\5\1\14\1\26\1\42\1\33\1\24\1\22\1\20\1\32\1\5\1\21"+
    "\2\5\1\23\1\30\1\40\1\35\1\25\1\5\1\27\1\34\1\37\1\36\1\31\2\5\1\41\1\5\1"+
    "\52\1\45\1\53\1\14\6\15\1\6\2\15\1\0\1\14\4\5\4\14\1\5\2\14\1\15\7\14\1\5"+
    "\4\14\1\5\5\14\7\5\1\14\2\5\4\14\4\5\16\14\5\5\7\14\1\5\1\14\1\5\1\14\5\5"+
    "\1\14\2\5\2\14\4\5\1\14\1\5\6\14\1\5\1\14\3\5\1\14\1\5\1\14\4\5\1\14\13\5"+
    "\1\14\3\5\1\14\5\15\2\14\6\5\1\14\7\5\1\14\1\5\6\14\1\5\6\14\1\5\1\14\15\15"+
    "\1\14\1\15\1\14\2\15\1\14\2\15\1\14\1\15\3\5\4\14\4\5\5\14\6\15\5\14\1\5\4"+
    "\14\3\15\1\14\1\15\3\14\3\5\7\15\4\14\2\5\1\15\13\5\1\14\1\5\7\15\2\5\2\15"+
    "\1\14\4\15\2\5\2\15\3\5\2\14\1\5\7\14\1\15\1\5\1\15\6\5\3\15\2\14\11\5\3\15"+
    "\1\5\6\14\2\15\6\5\4\15\2\5\4\14\1\5\2\14\1\15\2\5\2\15\1\5\11\15\1\5\3\15"+
    "\1\5\5\15\2\14\1\5\3\15\7\14\11\15\6\5\3\15\1\5\2\15\1\5\7\15\2\5\2\15\2\14"+
    "\2\15\1\5\3\15\1\14\10\5\2\14\2\5\2\14\6\5\1\14\7\5\1\14\1\5\3\14\4\5\2\14"+
    "\1\15\1\5\7\15\2\14\2\15\2\14\3\15\1\5\5\14\2\5\1\14\5\5\7\14\2\5\1\14\1\15"+
    "\2\14\3\15\1\14\4\5\1\14\2\5\1\14\2\5\1\14\2\5\2\14\1\15\1\14\5\15\4\14\2"+
    "\15\2\14\3\15\3\14\1\15\7\14\4\5\1\14\1\5\7\14\4\15\3\5\1\15\2\14\1\5\1\14"+
    "\2\5\1\14\3\5\2\15\1\14\3\15\2\14\1\5\10\14\1\5\6\15\5\14\3\15\2\14\1\15\1"+
    "\5\1\14\6\5\3\14\3\5\1\14\4\5\3\14\2\5\1\14\1\5\1\14\2\5\3\14\2\5\3\14\2\5"+
    "\4\14\5\15\3\14\3\15\1\14\4\15\2\14\1\5\6\14\6\15\5\5\3\14\1\5\7\15\1\14\2"+
    "\15\5\14\2\15\1\14\4\5\1\14\3\5\1\14\2\5\5\14\3\5\2\15\1\5\3\15\1\14\4\15"+
    "\1\5\5\14\3\5\1\15\7\14\5\5\1\14\1\5\4\14\1\15\4\14\6\15\1\14\1\15\3\14\2"+
    "\15\4\14\1\5\1\15\2\5\7\15\4\14\10\5\10\15\1\14\2\15\6\14\3\5\1\14\10\5\1"+
    "\14\1\5\1\14\1\5\5\15\1\5\2\14\5\5\1\14\1\5\1\14\2\15\2\14\4\5\5\14\1\15\1"+
    "\14\1\15\1\14\1\15\4\14\2\15\5\5\10\15\11\14\1\15\1\14\7\15\1\5\2\15\4\5\3"+
    "\15\1\5\3\15\2\5\7\15\3\5\4\15\5\5\14\15\1\5\1\15\3\5\2\14\3\15\6\5\2\14\1"+
    "\0\11\5\3\15\3\14\2\5\2\15\4\14\1\5\1\14\2\15\4\14\4\5\10\15\3\14\1\5\3\14"+
    "\2\5\1\15\5\14\4\15\1\14\5\5\2\15\2\5\1\15\1\5\5\14\1\15\7\14\3\15\5\5\2\15"+
    "\3\14\6\5\2\14\3\5\3\15\1\14\5\15\4\5\1\15\6\5\1\15\2\5\3\15\1\5\5\14\2\15"+
    "\1\14\5\15\1\14\1\5\1\14\1\5\1\14\1\5\1\14\1\5\2\14\3\5\1\14\6\5\2\14\2\5"+
    "\13\0\5\15\2\17\5\15\1\0\4\14\1\5\12\14\1\0\1\14\1\15\3\14\3\15\2\14\1\5\4"+
    "\14\1\5\1\14\5\5\2\14\1\5\1\14\4\5\1\14\3\5\2\14\4\5\5\14\5\5\4\14\1\5\4\14"+
    "\4\5\3\15\2\5\4\14\1\0\4\14\3\5\1\14\2\15\2\14\3\5\4\14\12\15\1\14\3\5\1\15"+
    "\3\5\1\15\4\5\1\15\4\5\4\14\1\15\6\14\1\5\1\14\2\5\1\15\5\5\1\15\2\5\2\15"+
    "\5\5\1\14\4\5\2\15\4\14\1\5\3\15\2\5\1\15\5\5\2\15\3\14\3\5\4\14\3\5\2\15"+
    "\2\14\6\5\1\14\3\15\1\14\2\15\5\14\5\5\5\14\1\5\1\15\3\5\1\14\2\5\1\14\7\5"+
    "\2\14\1\15\6\14\2\5\2\14\3\5\3\14\2\5\3\14\2\5\2\14\3\15\4\14\3\5\1\14\2\5"+
    "\1\14\1\5\5\14\1\15\2\14\3\15\5\14\1\5\3\14\1\5\2\14\4\5\1\14\2\5\2\14\1\5"+
    "\3\15\1\14\2\15\1\14\5\5\2\15\1\14\2\5\1\14\2\15\3\14\3\15\2\14\1\15\6\14"+
    "\1\5\2\15\4\5\1\15\2\14\1\5\1\14\1\15\4\5\4\14\4\15\1\14\4\15\1\5\1\14\1\5"+
    "\3\14\4\15\1\14\5\5\1\14\2\15\1\5\4\15\4\14\1\15\1\5\4\15\2\5\1\14\1\5\1\15"+
    "\3\14\1\5\4\14\1\5\2\14\10\5\1\14\2\5\1\14\1\15\2\14\4\15\1\5\1\15\1\5\2\15"+
    "\6\14\7\15\1\5\1\14\1\5\1\15\3\14\2\15\1\5\4\15\1\14\2\15\3\14\1\5\2\14\1"+
    "\5\6\15\3\14\1\15\1\14\2\15\1\14\1\15\2\5\5\15\1\14\3\5\4\15\1\14\3\5\4\14"+
    "\1\15\2\5\1\14\1\5\1\15\7\14\6\5\3\14\2\15\1\14\2\15\3\14\6\15\2\14\3\15\2"+
    "\14\4\15\4\14\3\15\5\14\1\5\2\14\2\5\2\14\4\5\1\14\4\5\1\14\1\5\1\14\5\5\1"+
    "\14\4\5\1\14\4\5\2\14\3\15\2\14\7\15\1\14\2\15\1\14\4\15\4\14\1\5\1\14\2\15"+
    "\5\14\1\5\3\15\1\5\5\14\2\5\1\14\1\5\2\14\1\5\1\14\1\5\1\14\1\5\5\14\1\5\1"+
    "\14\1\5\1\14\3\5\1\14\3\5\1\14\3\5");

  /** 
   * Translates DFA states to action switch labels.
   */
  private static final int [] ZZ_ACTION = zzUnpackAction();

  private static final String ZZ_ACTION_PACKED_0 =
    "\4\0\1\1\13\0\1\2\2\3\1\4\1\5\1\6"+
    "\1\2\2\7\1\10\1\11\1\12\1\13\1\14\1\15"+
    "\15\16\1\1\1\4\1\17\1\5\1\20\1\5\2\20"+
    "\1\21\1\22\1\23\1\24\1\25\1\26\1\27\1\30"+
    "\1\31\1\5\1\32\1\33\1\17\1\34\1\35\1\36"+
    "\2\37\1\40\17\16\2\0\2\20\1\41\2\17\1\37"+
    "\2\0\14\16\1\42\3\16\1\17\1\20\1\43\1\20"+
    "\3\17\16\16\1\44\1\20\3\17\1\45\1\16\1\46"+
    "\3\16\1\47\4\16\1\50\2\16\1\20\3\17\3\16"+
    "\1\51\1\52\1\53\1\54\3\16\1\55\2\17\1\56"+
    "\1\16\1\57\1\16\1\60\2\16\1\61\1\17\1\62"+
    "\1\16\1\63\1\64\1\17\1\65\1\66";

  private static int [] zzUnpackAction() {
    int [] result = new int[185];
    int offset = 0;
    offset = zzUnpackAction(ZZ_ACTION_PACKED_0, offset, result);
    return result;
  }

  private static int zzUnpackAction(String packed, int offset, int [] result) {
    int i = 0;       /* index in packed string  */
    int j = offset;  /* index in unpacked array */
    int l = packed.length();
    while (i < l) {
      int count = packed.charAt(i++);
      int value = packed.charAt(i++);
      do result[j++] = value; while (--count > 0);
    }
    return j;
  }


  /** 
   * Translates a state to a row index in the transition table
   */
  private static final int [] ZZ_ROWMAP = zzUnpackRowMap();

  private static final String ZZ_ROWMAP_PACKED_0 =
    "\0\0\0\57\0\136\0\215\0\274\0\353\0\u011a\0\u0149"+
    "\0\u0178\0\u01a7\0\u01d6\0\u0205\0\u0234\0\u0263\0\u0292\0\u02c1"+
    "\0\u02f0\0\u031f\0\u02f0\0\u034e\0\u02f0\0\u02f0\0\u037d\0\u03ac"+
    "\0\u02f0\0\u03db\0\u02f0\0\u02f0\0\u040a\0\u02f0\0\u02f0\0\u0439"+
    "\0\u0468\0\u0497\0\u04c6\0\u04f5\0\u0524\0\u0553\0\u0582\0\u05b1"+
    "\0\u05e0\0\u060f\0\u063e\0\u066d\0\u069c\0\u06cb\0\u06fa\0\u0729"+
    "\0\u0758\0\u0787\0\u07b6\0\u07e5\0\u02f0\0\u02f0\0\u02f0\0\u02f0"+
    "\0\u02f0\0\u02f0\0\u02f0\0\u02f0\0\u02f0\0\u0814\0\u0843\0\u02f0"+
    "\0\u0872\0\u02f0\0\u02f0\0\u02f0\0\u08a1\0\u08d0\0\u037d\0\u08ff"+
    "\0\u092e\0\u095d\0\u098c\0\u09bb\0\u09ea\0\u0a19\0\u0a48\0\u0a77"+
    "\0\u0aa6\0\u0ad5\0\u0b04\0\u0b33\0\u0b62\0\u0b91\0\u0bc0\0\u0bef"+
    "\0\u0c1e\0\u0c4d\0\u02f0\0\u0c7c\0\u0cab\0\u02f0\0\u0cda\0\u0d09"+
    "\0\u0d38\0\u0d67\0\u0d96\0\u0dc5\0\u0df4\0\u0e23\0\u0e52\0\u0e81"+
    "\0\u0eb0\0\u0edf\0\u0f0e\0\u0f3d\0\u0439\0\u0f6c\0\u0f9b\0\u0fca"+
    "\0\u02f0\0\u02f0\0\u0758\0\u0ff9\0\u1028\0\u1057\0\u1086\0\u10b5"+
    "\0\u10e4\0\u1113\0\u1142\0\u1171\0\u11a0\0\u11cf\0\u11fe\0\u122d"+
    "\0\u125c\0\u128b\0\u12ba\0\u12e9\0\u1318\0\u0439\0\u1347\0\u1376"+
    "\0\u13a5\0\u13d4\0\u0439\0\u1403\0\u0439\0\u1432\0\u1461\0\u1490"+
    "\0\u0439\0\u14bf\0\u14ee\0\u151d\0\u154c\0\u0439\0\u157b\0\u15aa"+
    "\0\u15d9\0\u1608\0\u1637\0\u1666\0\u1695\0\u16c4\0\u16f3\0\u0439"+
    "\0\u0439\0\u0439\0\u0439\0\u1722\0\u1751\0\u1780\0\u0758\0\u17af"+
    "\0\u17de\0\u06fa\0\u180d\0\u0439\0\u183c\0\u0439\0\u186b\0\u189a"+
    "\0\u06fa\0\u18c9\0\u0439\0\u18f8\0\u0439\0\u0439\0\u1927\0\u0439"+
    "\0\u06fa";

  private static int [] zzUnpackRowMap() {
    int [] result = new int[185];
    int offset = 0;
    offset = zzUnpackRowMap(ZZ_ROWMAP_PACKED_0, offset, result);
    return result;
  }

  private static int zzUnpackRowMap(String packed, int offset, int [] result) {
    int i = 0;  /* index in packed string  */
    int j = offset;  /* index in unpacked array */
    int l = packed.length();
    while (i < l) {
      int high = packed.charAt(i++) << 16;
      result[j++] = high | packed.charAt(i++);
    }
    return j;
  }

  /** 
   * The transition table of the DFA
   */
  private static final int [] ZZ_TRANS = zzUnpackTrans();

  private static final String ZZ_TRANS_PACKED_0 =
    "\1\21\1\22\1\23\2\24\1\21\1\25\1\21\1\26"+
    "\1\27\5\21\1\25\37\21\1\25\1\30\1\31\2\24"+
    "\1\32\2\25\1\33\7\25\23\32\13\25\1\34\1\25"+
    "\1\30\1\31\2\24\1\35\4\25\1\36\3\25\1\37"+
    "\1\25\23\35\15\25\1\30\1\31\2\24\1\40\12\25"+
    "\1\41\2\40\1\42\1\40\1\43\1\44\1\45\1\46"+
    "\1\47\1\50\1\51\1\52\1\53\1\40\1\54\3\40"+
    "\14\25\1\55\1\30\1\31\1\56\1\24\52\55\1\25"+
    "\1\30\1\31\2\24\1\57\1\25\1\60\10\25\23\57"+
    "\15\25\1\30\1\31\2\24\1\61\1\25\1\62\1\33"+
    "\1\25\1\36\3\25\1\37\1\25\1\63\10\61\1\64"+
    "\11\61\1\65\1\66\1\67\1\70\1\71\1\72\1\73"+
    "\1\74\1\75\1\76\3\25\1\30\1\31\2\24\1\77"+
    "\12\25\23\77\14\25\1\21\1\30\1\31\2\24\37\21"+
    "\1\100\12\21\1\25\1\30\1\31\2\24\1\57\12\25"+
    "\5\57\1\101\15\57\15\25\1\30\1\31\2\24\1\57"+
    "\12\25\23\57\14\25\1\102\1\30\1\31\2\24\1\32"+
    "\12\102\23\32\1\103\1\104\13\102\1\30\1\31\2\24"+
    "\1\57\12\102\23\57\15\102\1\30\1\31\2\24\1\32"+
    "\12\102\23\32\1\103\13\102\12\25\1\105\62\25\1\106"+
    "\40\25\61\0\1\23\57\0\2\24\63\0\1\107\47\0"+
    "\1\31\61\0\3\32\5\0\1\32\2\0\23\32\21\0"+
    "\3\35\5\0\1\35\2\0\23\35\21\0\3\40\5\0"+
    "\1\40\2\0\23\40\21\0\3\40\5\0\1\40\2\0"+
    "\1\40\1\110\21\40\21\0\3\40\5\0\1\40\2\0"+
    "\6\40\1\111\14\40\21\0\3\40\5\0\1\40\2\0"+
    "\6\40\1\112\1\113\6\40\1\114\4\40\21\0\3\40"+
    "\5\0\1\40\2\0\3\40\1\115\17\40\21\0\3\40"+
    "\5\0\1\40\2\0\2\40\1\116\20\40\21\0\3\40"+
    "\5\0\1\40\2\0\15\40\1\117\5\40\21\0\3\40"+
    "\5\0\1\40\2\0\6\40\1\120\14\40\21\0\3\40"+
    "\5\0\1\40\2\0\2\40\1\121\20\40\21\0\3\40"+
    "\5\0\1\40\2\0\3\40\1\122\17\40\21\0\3\40"+
    "\5\0\1\40\2\0\2\40\1\123\13\40\1\124\4\40"+
    "\21\0\3\40\5\0\1\40\2\0\11\40\1\125\11\40"+
    "\21\0\3\40\5\0\1\40\2\0\21\40\1\126\1\40"+
    "\14\0\1\55\2\0\1\55\1\0\53\55\2\0\1\56"+
    "\1\24\52\55\5\0\3\57\5\0\1\57\2\0\23\57"+
    "\23\0\1\127\54\0\3\61\5\0\1\61\2\0\23\61"+
    "\23\0\1\130\54\0\3\61\5\0\1\61\2\0\16\61"+
    "\1\131\4\61\21\0\3\61\5\0\1\61\2\0\6\61"+
    "\1\132\14\61\71\0\1\133\6\0\3\77\5\0\1\77"+
    "\2\0\23\77\21\0\3\57\5\0\1\57\2\0\7\57"+
    "\1\134\6\57\1\135\4\57\14\0\12\105\1\136\1\137"+
    "\43\105\13\106\1\140\2\106\1\136\40\106\5\0\3\40"+
    "\5\0\1\40\2\0\2\40\1\141\20\40\21\0\3\40"+
    "\5\0\1\40\2\0\20\40\1\142\2\40\21\0\3\40"+
    "\5\0\1\40\2\0\7\40\1\143\13\40\21\0\3\40"+
    "\5\0\1\40\2\0\1\40\1\144\13\40\1\145\5\40"+
    "\21\0\3\40\5\0\1\40\2\0\22\40\1\146\21\0"+
    "\3\40\5\0\1\40\2\0\1\40\1\147\21\40\21\0"+
    "\3\40\5\0\1\40\2\0\17\40\1\150\3\40\21\0"+
    "\3\40\5\0\1\40\2\0\4\40\1\151\16\40\21\0"+
    "\3\40\5\0\1\40\2\0\7\40\1\152\13\40\21\0"+
    "\3\40\5\0\1\40\2\0\20\40\1\153\2\40\21\0"+
    "\3\40\5\0\1\40\2\0\6\40\1\154\14\40\21\0"+
    "\3\40\5\0\1\40\2\0\2\40\1\155\20\40\21\0"+
    "\3\40\5\0\1\40\2\0\5\40\1\156\15\40\21\0"+
    "\3\40\5\0\1\40\2\0\2\40\1\157\20\40\21\0"+
    "\3\40\5\0\1\40\2\0\5\40\1\160\15\40\23\0"+
    "\1\161\56\0\1\162\54\0\3\61\5\0\1\61\2\0"+
    "\20\61\1\163\2\61\21\0\3\61\5\0\1\61\2\0"+
    "\7\61\1\164\13\61\21\0\3\57\5\0\1\57\2\0"+
    "\1\57\1\165\13\57\1\166\5\57\21\0\3\57\5\0"+
    "\1\57\2\0\22\57\1\167\15\0\2\105\2\0\1\105"+
    "\1\0\10\105\1\0\37\105\1\0\2\106\2\0\1\106"+
    "\1\0\10\106\1\0\37\106\5\0\3\40\5\0\1\40"+
    "\2\0\3\40\1\170\17\40\21\0\3\40\5\0\1\40"+
    "\2\0\12\40\1\171\10\40\21\0\3\40\5\0\1\40"+
    "\2\0\6\40\1\172\14\40\21\0\3\40\5\0\1\40"+
    "\2\0\11\40\1\173\11\40\21\0\3\40\5\0\1\40"+
    "\2\0\17\40\1\174\3\40\21\0\3\40\5\0\1\40"+
    "\2\0\3\40\1\175\17\40\21\0\3\40\5\0\1\40"+
    "\2\0\6\40\1\176\14\40\21\0\3\40\5\0\1\40"+
    "\2\0\16\40\1\177\4\40\21\0\3\40\5\0\1\40"+
    "\2\0\16\40\1\200\4\40\21\0\3\40\5\0\1\40"+
    "\2\0\6\40\1\201\14\40\21\0\3\40\5\0\1\40"+
    "\2\0\2\40\1\202\20\40\21\0\3\40\5\0\1\40"+
    "\2\0\14\40\1\203\6\40\21\0\3\40\5\0\1\40"+
    "\2\0\5\40\1\204\15\40\21\0\3\40\5\0\1\40"+
    "\2\0\7\40\1\205\13\40\21\0\3\40\5\0\1\40"+
    "\2\0\2\40\1\206\20\40\21\0\3\61\5\0\1\61"+
    "\2\0\6\61\1\207\14\61\21\0\3\57\5\0\1\57"+
    "\2\0\11\57\1\210\11\57\21\0\3\57\5\0\1\57"+
    "\2\0\17\57\1\211\3\57\21\0\3\57\5\0\1\57"+
    "\2\0\3\57\1\212\17\57\21\0\3\40\5\0\1\40"+
    "\2\0\4\40\1\213\16\40\21\0\3\40\5\0\1\40"+
    "\2\0\16\40\1\214\4\40\21\0\3\40\5\0\1\40"+
    "\2\0\10\40\1\215\12\40\21\0\3\40\5\0\1\40"+
    "\2\0\6\40\1\216\14\40\21\0\3\40\5\0\1\40"+
    "\2\0\2\40\1\217\20\40\21\0\3\40\5\0\1\40"+
    "\2\0\1\40\1\220\21\40\21\0\3\40\5\0\1\40"+
    "\2\0\14\40\1\221\6\40\21\0\3\40\5\0\1\40"+
    "\2\0\7\40\1\222\13\40\21\0\3\40\5\0\1\40"+
    "\2\0\3\40\1\223\17\40\21\0\3\40\5\0\1\40"+
    "\2\0\7\40\1\224\13\40\21\0\3\40\5\0\1\40"+
    "\2\0\7\40\1\225\13\40\21\0\3\40\5\0\1\40"+
    "\2\0\14\40\1\226\6\40\21\0\3\40\5\0\1\40"+
    "\2\0\7\40\1\227\13\40\21\0\3\40\5\0\1\40"+
    "\2\0\3\40\1\230\17\40\21\0\3\61\5\0\1\61"+
    "\2\0\7\61\1\231\13\61\21\0\3\57\5\0\1\57"+
    "\2\0\6\57\1\232\14\57\21\0\3\57\5\0\1\57"+
    "\2\0\2\57\1\233\20\57\21\0\3\57\5\0\1\57"+
    "\2\0\1\57\1\234\21\57\21\0\3\40\5\0\1\40"+
    "\2\0\6\40\1\235\14\40\21\0\3\40\5\0\1\40"+
    "\2\0\17\40\1\236\3\40\21\0\3\40\5\0\1\40"+
    "\2\0\13\40\1\237\7\40\21\0\3\40\5\0\1\40"+
    "\2\0\13\40\1\240\7\40\21\0\3\40\5\0\1\40"+
    "\2\0\20\40\1\241\2\40\21\0\3\40\5\0\1\40"+
    "\2\0\2\40\1\242\20\40\21\0\3\40\5\0\1\40"+
    "\2\0\12\40\1\243\10\40\21\0\3\40\5\0\1\40"+
    "\2\0\1\40\1\244\21\40\21\0\3\40\5\0\1\40"+
    "\2\0\2\40\1\245\20\40\21\0\3\40\5\0\1\40"+
    "\2\0\15\40\1\246\5\40\21\0\3\61\5\0\1\61"+
    "\2\0\12\61\1\247\10\61\21\0\3\57\5\0\1\57"+
    "\2\0\17\57\1\250\3\57\21\0\3\57\5\0\1\57"+
    "\2\0\13\57\1\251\7\57\21\0\3\57\5\0\1\57"+
    "\2\0\13\57\1\252\7\57\21\0\3\40\5\0\1\40"+
    "\2\0\12\40\1\253\10\40\21\0\3\40\5\0\1\40"+
    "\2\0\2\40\1\254\20\40\21\0\3\40\5\0\1\40"+
    "\2\0\17\40\1\255\3\40\21\0\3\40\5\0\1\40"+
    "\2\0\13\40\1\256\7\40\21\0\3\40\5\0\1\40"+
    "\2\0\14\40\1\257\6\40\21\0\3\40\5\0\1\40"+
    "\2\0\6\40\1\260\14\40\21\0\3\57\5\0\1\57"+
    "\2\0\2\57\1\261\20\57\21\0\3\57\5\0\1\57"+
    "\2\0\17\57\1\262\3\57\21\0\3\40\5\0\1\40"+
    "\2\0\2\40\1\263\20\40\21\0\3\40\5\0\1\40"+
    "\2\0\2\40\1\264\20\40\21\0\3\40\5\0\1\40"+
    "\2\0\14\40\1\265\6\40\21\0\3\40\5\0\1\40"+
    "\2\0\4\40\1\266\16\40\21\0\3\57\5\0\1\57"+
    "\2\0\2\57\1\267\20\57\21\0\3\40\5\0\1\40"+
    "\2\0\4\40\1\270\16\40\21\0\3\57\5\0\1\57"+
    "\2\0\4\57\1\271\16\57\14\0";

  private static int [] zzUnpackTrans() {
    int [] result = new int[6486];
    int offset = 0;
    offset = zzUnpackTrans(ZZ_TRANS_PACKED_0, offset, result);
    return result;
  }

  private static int zzUnpackTrans(String packed, int offset, int [] result) {
    int i = 0;       /* index in packed string  */
    int j = offset;  /* index in unpacked array */
    int l = packed.length();
    while (i < l) {
      int count = packed.charAt(i++);
      int value = packed.charAt(i++);
      value--;
      do result[j++] = value; while (--count > 0);
    }
    return j;
  }


  /* error codes */
  private static final int ZZ_UNKNOWN_ERROR = 0;
  private static final int ZZ_NO_MATCH = 1;
  private static final int ZZ_PUSHBACK_2BIG = 2;

  /* error messages for the codes above */
  private static final String[] ZZ_ERROR_MSG = {
    "Unknown internal scanner error",
    "Error: could not match input",
    "Error: pushback value was too large"
  };

  /**
   * ZZ_ATTRIBUTE[aState] contains the attributes of state <code>aState</code>
   */
  private static final int [] ZZ_ATTRIBUTE = zzUnpackAttribute();

  private static final String ZZ_ATTRIBUTE_PACKED_0 =
    "\4\0\1\1\13\0\1\11\1\1\1\11\1\1\2\11"+
    "\2\1\1\11\1\1\2\11\1\1\2\11\25\1\11\11"+
    "\2\1\1\11\1\1\3\11\22\1\2\0\2\1\1\11"+
    "\2\1\1\11\2\0\20\1\2\11\107\1";

  private static int [] zzUnpackAttribute() {
    int [] result = new int[185];
    int offset = 0;
    offset = zzUnpackAttribute(ZZ_ATTRIBUTE_PACKED_0, offset, result);
    return result;
  }

  private static int zzUnpackAttribute(String packed, int offset, int [] result) {
    int i = 0;       /* index in packed string  */
    int j = offset;  /* index in unpacked array */
    int l = packed.length();
    while (i < l) {
      int count = packed.charAt(i++);
      int value = packed.charAt(i++);
      do result[j++] = value; while (--count > 0);
    }
    return j;
  }

  /** the input device */
  private java.io.Reader zzReader;

  /** the current state of the DFA */
  private int zzState;

  /** the current lexical state */
  private int zzLexicalState = YYINITIAL;

  /** this buffer contains the current text to be matched and is
      the source of the yytext() string */
  private CharSequence zzBuffer = "";

  /** the textposition at the last accepting state */
  private int zzMarkedPos;

  /** the current text position in the buffer */
  private int zzCurrentPos;

  /** startRead marks the beginning of the yytext() string in the buffer */
  private int zzStartRead;

  /** endRead marks the last character in the buffer, that has been read
      from input */
  private int zzEndRead;

  /**
   * zzAtBOL == true <=> the scanner is currently at the beginning of a line
   */
  private boolean zzAtBOL = true;

  /** zzAtEOF == true <=> the scanner is at the EOF */
  private boolean zzAtEOF;

  /** denotes if the user-EOF-code has already been executed */
  private boolean zzEOFDone;

  /* user code: */
    private int _typeLevel = 0;
    private boolean _typeReq = false;
    private Stack<Integer> _stack = new Stack<>();
    public _LuaDocLexer() {
        this((java.io.Reader) null);
    }

    private void pushState(int state) {
        _stack.push(zzLexicalState);
        yybegin(state);
    }

    private void popState() {
        var state = _stack.pop();
        yybegin(state);
    }

    private void beginType() {
        yybegin(xTYPE_REF);
        _typeLevel = 0;
        _typeReq = true;
    }


  /**
   * Creates a new scanner
   *
   * @param   in  the java.io.Reader to read input from.
   */
  public _LuaDocLexer(java.io.Reader in) {
    this.zzReader = in;
  }


  /** 
   * Unpacks the compressed character translation table.
   *
   * @param packed   the packed character translation table
   * @return         the unpacked character translation table
   */
  private static char [] zzUnpackCMap(String packed) {
    int size = 0;
    for (int i = 0, length = packed.length(); i < length; i += 2) {
      size += packed.charAt(i);
    }
    char[] map = new char[size];
    int i = 0;  /* index in packed string  */
    int j = 0;  /* index in unpacked array */
    while (i < packed.length()) {
      int  count = packed.charAt(i++);
      char value = packed.charAt(i++);
      do map[j++] = value; while (--count > 0);
    }
    return map;
  }

  public final int getTokenStart() {
    return zzStartRead;
  }

  public final int getTokenEnd() {
    return getTokenStart() + yylength();
  }

  public void reset(CharSequence buffer, int start, int end, int initialState) {
    zzBuffer = buffer;
    zzCurrentPos = zzMarkedPos = zzStartRead = start;
    zzAtEOF  = false;
    zzAtBOL = true;
    zzEndRead = end;
    yybegin(initialState);
  }

  /**
   * Refills the input buffer.
   *
   * @return      {@code false}, iff there was new input.
   *
   * @exception   java.io.IOException  if any I/O-Error occurs
   */
  private boolean zzRefill() throws java.io.IOException {
    return true;
  }


  /**
   * Returns the current lexical state.
   */
  public final int yystate() {
    return zzLexicalState;
  }


  /**
   * Enters a new lexical state
   *
   * @param newState the new lexical state
   */
  public final void yybegin(int newState) {
    zzLexicalState = newState;
  }


  /**
   * Returns the text matched by the current regular expression.
   */
  public final CharSequence yytext() {
    return zzBuffer.subSequence(zzStartRead, zzMarkedPos);
  }


  /**
   * Returns the character at position {@code pos} from the
   * matched text.
   *
   * It is equivalent to yytext().charAt(pos), but faster
   *
   * @param pos the position of the character to fetch.
   *            A value from 0 to yylength()-1.
   *
   * @return the character at position pos
   */
  public final char yycharat(int pos) {
    return zzBuffer.charAt(zzStartRead+pos);
  }


  /**
   * Returns the length of the matched text region.
   */
  public final int yylength() {
    return zzMarkedPos-zzStartRead;
  }


  /**
   * Reports an error that occurred while scanning.
   *
   * In a wellformed scanner (no or only correct usage of
   * yypushback(int) and a match-all fallback rule) this method
   * will only be called with things that "Can't Possibly Happen".
   * If this method is called, something is seriously wrong
   * (e.g. a JFlex bug producing a faulty scanner etc.).
   *
   * Usual syntax/scanner level error handling should be done
   * in error fallback rules.
   *
   * @param   errorCode  the code of the errormessage to display
   */
  private void zzScanError(int errorCode) {
    String message;
    try {
      message = ZZ_ERROR_MSG[errorCode];
    }
    catch (ArrayIndexOutOfBoundsException e) {
      message = ZZ_ERROR_MSG[ZZ_UNKNOWN_ERROR];
    }

    throw new Error(message);
  }


  /**
   * Pushes the specified amount of characters back into the input stream.
   *
   * They will be read again by then next call of the scanning method
   *
   * @param number  the number of characters to be read again.
   *                This number must not be greater than yylength()!
   */
  public void yypushback(int number)  {
    if ( number > yylength() )
      zzScanError(ZZ_PUSHBACK_2BIG);

    zzMarkedPos -= number;
  }


  /**
   * Contains user EOF-code, which will be executed exactly once,
   * when the end of file is reached
   */
  private void zzDoEOF() {
    if (!zzEOFDone) {
      zzEOFDone = true;
    
    }
  }


  /**
   * Resumes scanning until the next regular expression is matched,
   * the end of input is encountered or an I/O-Error occurs.
   *
   * @return      the next token
   * @exception   java.io.IOException  if any I/O-Error occurs
   */
  public IElementType advance() throws java.io.IOException {
    int zzInput;
    int zzAction;

    // cached fields:
    int zzCurrentPosL;
    int zzMarkedPosL;
    int zzEndReadL = zzEndRead;
    CharSequence zzBufferL = zzBuffer;

    int [] zzTransL = ZZ_TRANS;
    int [] zzRowMapL = ZZ_ROWMAP;
    int [] zzAttrL = ZZ_ATTRIBUTE;

    while (true) {
      zzMarkedPosL = zzMarkedPos;

      zzAction = -1;

      zzCurrentPosL = zzCurrentPos = zzStartRead = zzMarkedPosL;

      zzState = ZZ_LEXSTATE[zzLexicalState];

      // set up zzAction for empty match case:
      int zzAttributes = zzAttrL[zzState];
      if ( (zzAttributes & 1) == 1 ) {
        zzAction = zzState;
      }


      zzForAction: {
        while (true) {

          if (zzCurrentPosL < zzEndReadL) {
            zzInput = Character.codePointAt(zzBufferL, zzCurrentPosL/*, zzEndReadL*/);
            zzCurrentPosL += Character.charCount(zzInput);
          }
          else if (zzAtEOF) {
            zzInput = YYEOF;
            break zzForAction;
          }
          else {
            // store back cached positions
            zzCurrentPos  = zzCurrentPosL;
            zzMarkedPos   = zzMarkedPosL;
            boolean eof = zzRefill();
            // get translated positions and possibly new buffer
            zzCurrentPosL  = zzCurrentPos;
            zzMarkedPosL   = zzMarkedPos;
            zzBufferL      = zzBuffer;
            zzEndReadL     = zzEndRead;
            if (eof) {
              zzInput = YYEOF;
              break zzForAction;
            }
            else {
              zzInput = Character.codePointAt(zzBufferL, zzCurrentPosL/*, zzEndReadL*/);
              zzCurrentPosL += Character.charCount(zzInput);
            }
          }
          int zzNext = zzTransL[ zzRowMapL[zzState] + ZZ_CMAP(zzInput) ];
          if (zzNext == -1) break zzForAction;
          zzState = zzNext;

          zzAttributes = zzAttrL[zzState];
          if ( (zzAttributes & 1) == 1 ) {
            zzAction = zzState;
            zzMarkedPosL = zzCurrentPosL;
            if ( (zzAttributes & 8) == 8 ) break zzForAction;
          }

        }
      }

      // store back cached position
      zzMarkedPos = zzMarkedPosL;

      if (zzInput == YYEOF && zzStartRead == zzCurrentPos) {
        zzAtEOF = true;
        zzDoEOF();
        return null;
      }
      else {
        switch (zzAction < 0 ? zzAction : ZZ_ACTION[zzAction]) {
          case 1: 
            { yybegin(YYINITIAL); return STRING;
            } 
            // fall through
          case 55: break;
          case 2: 
            { yybegin(xCOMMENT_STRING); yypushback(yylength());
            } 
            // fall through
          case 56: break;
          case 3: 
            { yybegin(YYINITIAL); return com.intellij.psi.TokenType.WHITE_SPACE;
            } 
            // fall through
          case 57: break;
          case 4: 
            { return com.intellij.psi.TokenType.WHITE_SPACE;
            } 
            // fall through
          case 58: break;
          case 5: 
            { return com.intellij.psi.TokenType.BAD_CHARACTER;
            } 
            // fall through
          case 59: break;
          case 6: 
            { yybegin(xTAG_NAME); return AT;
            } 
            // fall through
          case 60: break;
          case 7: 
            { yybegin(YYINITIAL);return com.intellij.psi.TokenType.WHITE_SPACE;
            } 
            // fall through
          case 61: break;
          case 8: 
            { return ID;
            } 
            // fall through
          case 62: break;
          case 9: 
            { yybegin(xCOMMENT_STRING); return STRING_BEGIN;
            } 
            // fall through
          case 63: break;
          case 10: 
            { return SHARP;
            } 
            // fall through
          case 64: break;
          case 11: 
            { yybegin(xCOMMENT_STRING); return ID;
            } 
            // fall through
          case 65: break;
          case 12: 
            { pushState(xDOUBLE_QUOTED_STRING); yypushback(yylength());
            } 
            // fall through
          case 66: break;
          case 13: 
            { pushState(xSINGLE_QUOTED_STRING); yypushback(yylength());
            } 
            // fall through
          case 67: break;
          case 14: 
            { yybegin(xCOMMENT_STRING); return TAG_NAME;
            } 
            // fall through
          case 68: break;
          case 15: 
            { beginType(); return ID;
            } 
            // fall through
          case 69: break;
          case 16: 
            { if (_typeReq || _typeLevel > 0) { _typeReq = false; return ID; } else { yybegin(xCOMMENT_STRING); yypushback(yylength()); }
            } 
            // fall through
          case 70: break;
          case 17: 
            { _typeReq = true; return COMMA;
            } 
            // fall through
          case 71: break;
          case 18: 
            { _typeReq = true; return EXTENDS;
            } 
            // fall through
          case 72: break;
          case 19: 
            { _typeReq = true; return OR;
            } 
            // fall through
          case 73: break;
          case 20: 
            { _typeLevel++; return LT;
            } 
            // fall through
          case 74: break;
          case 21: 
            { _typeLevel--; _typeReq = false; return GT;
            } 
            // fall through
          case 75: break;
          case 22: 
            { _typeLevel++; return LPAREN;
            } 
            // fall through
          case 76: break;
          case 23: 
            { _typeLevel--; _typeReq = false; return RPAREN;
            } 
            // fall through
          case 77: break;
          case 24: 
            { _typeLevel++; return LCURLY;
            } 
            // fall through
          case 78: break;
          case 25: 
            { _typeLevel--; _typeReq = false; return RCURLY;
            } 
            // fall through
          case 79: break;
          case 26: 
            { yybegin(xCLASS_EXTEND); return ID;
            } 
            // fall through
          case 80: break;
          case 27: 
            { beginType(); return EXTENDS;
            } 
            // fall through
          case 81: break;
          case 28: 
            { yybegin(YYINITIAL); yypushback(yylength());
            } 
            // fall through
          case 82: break;
          case 29: 
            { return COMMA;
            } 
            // fall through
          case 83: break;
          case 30: 
            { return EXTENDS;
            } 
            // fall through
          case 84: break;
          case 31: 
            { popState(); return STRING_LITERAL;
            } 
            // fall through
          case 85: break;
          case 32: 
            { return DASHES;
            } 
            // fall through
          case 86: break;
          case 33: 
            { _typeReq = false; return ARR;
            } 
            // fall through
          case 87: break;
          case 34: 
            { yybegin(xTAG); return TAG_NAME_SEE;
            } 
            // fall through
          case 88: break;
          case 35: 
            { return FUN;
            } 
            // fall through
          case 89: break;
          case 36: 
            { beginType(); return TAG_NAME_TYPE;
            } 
            // fall through
          case 90: break;
          case 37: 
            { yybegin(xFIELD); return TAG_NAME_FIELD;
            } 
            // fall through
          case 91: break;
          case 38: 
            { yybegin(xPARAM); return TAG_NAME_PARAM;
            } 
            // fall through
          case 92: break;
          case 39: 
            { yybegin(xALIAS); return TAG_NAME_ALIAS;
            } 
            // fall through
          case 93: break;
          case 40: 
            { yybegin(xCLASS); return TAG_NAME_CLASS;
            } 
            // fall through
          case 94: break;
          case 41: 
            { return TAG_NAME_PUBLIC;
            } 
            // fall through
          case 95: break;
          case 42: 
            { beginType(); return TAG_NAME_RETURN;
            } 
            // fall through
          case 96: break;
          case 43: 
            { yybegin(xCLASS); return TAG_NAME_MODULE;
            } 
            // fall through
          case 97: break;
          case 44: 
            { yybegin(xPARAM); return TAG_NAME_VARARG;
            } 
            // fall through
          case 98: break;
          case 45: 
            { _typeReq = true; return VARARG;
            } 
            // fall through
          case 99: break;
          case 46: 
            { yybegin(xFIELD_ID); return PUBLIC;
            } 
            // fall through
          case 100: break;
          case 47: 
            { return TAG_NAME_PRIVATE;
            } 
            // fall through
          case 101: break;
          case 48: 
            { yybegin(xGENERIC); return TAG_NAME_GENERIC;
            } 
            // fall through
          case 102: break;
          case 49: 
            { yybegin(xFIELD_ID); return PRIVATE;
            } 
            // fall through
          case 103: break;
          case 50: 
            { yybegin(xTAG_WITH_ID); return TAG_NAME_LANGUAGE;
            } 
            // fall through
          case 104: break;
          case 51: 
            { yybegin(xSUPPRESS); return TAG_NAME_SUPPRESS;
            } 
            // fall through
          case 105: break;
          case 52: 
            { beginType(); return TAG_NAME_OVERLOAD;
            } 
            // fall through
          case 106: break;
          case 53: 
            { return TAG_NAME_PROTECTED;
            } 
            // fall through
          case 107: break;
          case 54: 
            { yybegin(xFIELD_ID); return PROTECTED;
            } 
            // fall through
          case 108: break;
          default:
            zzScanError(ZZ_NO_MATCH);
          }
      }
    }
  }


}
